Boy, I really am tired - this was supposed to go to the developer
mailing list.  Sorry for the accidental cross post - John

On Thu, 2009-01-15 at 20:48 -0500, John A. Sullivan III wrote:
> Hello, all.  I've been working on cracking the problem of multiple user
> inputs for the same type of field in browser_req.xml, e.g., multiple OU
> or, more typically DC fields and have an attached patch to submit.  Here
> is an excerpt from my post to the user's mailing list describing the
> problem:
> 
> Hello, all.  I've heard some discussion of people using OpenCA with
> domain components instead of O= C=.  We've gotten most of that working
> but have a problem where whatever routine is parsing the input from the
> browser_req.xml generated form is setting both values to the first dc
> setting.  To clarify, I am allowing the cert requester to choose the
> domain components from a drop down rather than appending the base rdn
> values.  This is for a multi-client environment where not everyone is
> dc=mycompany,dc=com.
> 
> As a result, when they fill in something like dc=ssiservices,dc=biz, the
> CSR comes out as dc=ssiservices,dc=ssiservices.  I'm having the same
> problem with allowing multiple ou fields on the form.
> 
> I suspected the problem was that the names of the html fields were the
> same (duh!) so I changed the names to something like dc_1 and dc_2 and
> tried adding the <valueType> tag, e.g., <valueType>dc</valueType> to
> such fields.  I thought that would be the solution for sure and was
> thrilled when the DN displayed properly on the confirmation page but,
> alas, I received an error when generating the CSR:
> 
> (OpenCA::REQ->new: Cannot create new request. Backend fails with
> errorcode 7712013. OpenCA::OpenSSL->genReq: Cannot build X500::DN-object
> from subject CN=nopub2, OU_1=OfficeUsers, DC_1=ssiservices, DC_2=biz)
> 
> It appears the parser is indeed using the name tag to determine the
> field type! Of course, this creates a problem anytime there are multiple
> inputs for the same field type.
> 
> I'm guessing the browser_req.xml file is parse by the genInputXML
> subroutine of request-utils.lib.  This appears to be called from
> advanced_csr.  I made the following changes starting at line 619 in my
> copy and it appears to be working:
> 
>         my $dn = "";
>         foreach my $item
> ($reqTwig->get_xpath("request/certificate/dn/input")) {
>                 my $name = getField( $item, "name" );
>                 my $vtype = getField( $item, "valueType" );
>                 if( (! defined $vtype) or $vtype eq "" ) {
>                         $vtype = $name;
>                 }
>                 my $val = $query->param( "$name" );
> 
>                 if( $dn ne "" ) {
>                         $dn .= ", ";
>                 }
> 
> #               $name =~ s/^\s+//g;
>                 $vtype =~ s/^\s+//g;
> 
>                 $val =~ s/\\/\\\\/g;
>                 $val =~ s/,/\\,/g;
>                 $val =~ s/=/\\=/g;
>                 $val =~ s/\+/\\+/g;
> 
> #               if ( $name =~ /cn|ou|o|l|c|sn|uid/i ) {
> #                       $name = uc ($name);
>                 if ( $vtype =~ /cn|ou|o|l|c|sn|uid/i ) {
>                         $vtype = uc ($vtype);
>                 }
> 
> #               $dn .= uc($name) . "=$val";
>                 $dn .= uc($vtype) . "=$val";
>         }
>         $dn =~ s/^\s+//g;
> 
> PLEASE DO NOT USE THIS PATCH UNLESS YOU CAN VALIDATE IT DOES WHAT IT IS
> SUPPOSED TO DO!!!!!!!!!!!! I don't know a thing about Perl.  I made
> these changes by guessing at the syntax from the rest of the file and
> thumbing through the O'Reilly Programming Perl book (which I have never
> read).  It may be catastrophic and foolish.
> 
> To make it work, I borrowed the valueType tag from the subjectAltName
> logic.  If one does not have a valueType tag defined in browser_req.xml,
> it will pass the name tag value into the dn.  This preserves all the
> existing configurations.  However, if you have multiple OU or DC fields,
> you cannot have two input fields both named DC for example.  Thus, you
> can use something like DC_1 and DC_2 for the name tags but add a
> valueType tag with value DC.  Here is a snippet from my test
> browser_req.xml file:
> 
>          <input>
>            <name>cn</name>
>            <label>Subject Name</label>
>            <type>textfield</type>
>            <charset>UTF8_LETTERS</charset>
>            <value>$ADDITIONAL_ATTRIBUTE_UID</value>
>            <minlen>2</minlen>
>            <required>YES</required>
>          </input>
>          <input>
>             <name>ou_1</name>
>             <label>Certificate Group 1</label>
>             <type>select</type>
>             <charset>UTF8_MIXED</charset>
>             <value>OfficeUsers</value>
>             <value>Engineers</value>
>             <value>HelpDesk</value>
>             <value>Operators</value>
>             <value>VPNGateways</value>
>             <value>WebServers</value>
>             <minlen>2</minlen>
>             <required>YES</required>
>            <valueType>OU</valueType>
>          </input>
>          <input>
>             <name>ou_2</name>
>             <label>Certificate Group 2</label>
>             <type>select</type>
>             <charset>UTF8_MIXED</charset>
>             <value></value>
>             <value>OfficeUsers</value>
>             <value>Engineers</value>
>             <value>HelpDesk</value>
>             <value>Operators</value>
>             <value>VPNGateways</value>
>             <value>WebServers</value>
>             <minlen>0</minlen>
>             <required>NO</required>
>            <valueType>OU</valueType>
>          </input>
> 
> Note how the cn element does not use a valueType tag and thus uses the
> name value for the dn whereas I have two OU inputs named ou_1 ad ou_2
> which do use the valueType tag to tell the dn parser that this is an OU
> element.
> 
> The patch should be copied to common/lib/cmds/ and applied with patch
> -p0 < openca_advanced_csr_multiField-1.0.2.patch
> 
> I cannot emphasize enough that I do not know what I am doing and someone
> needs to validate, dismiss, or improve this patch.  Thanks for the
> product.  Hope this helps - John
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by:
> SourcForge Community
> SourceForge wants to tell your story.
> http://p.sf.net/sfu/sf-spreadtheword
> _______________________________________________ Openca-Users mailing list 
> Openca-Users@lists.sourceforge.net 
> https://lists.sourceforge.net/lists/listinfo/openca-users
-- 
John A. Sullivan III
Open Source Development Corporation
+1 207-985-7880
jsulli...@opensourcedevel.com

http://www.spiritualoutreach.com
Making Christianity intelligible to secular society


------------------------------------------------------------------------------
This SF.net email is sponsored by:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword
_______________________________________________
Openca-Users mailing list
Openca-Users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openca-users

Reply via email to