Instead of this:
$dn="cn=$cn,$retail_base,$base1";
try this:
$dn="cn=" . $lastname . "\\," . $firstname . ",$retail_base,$base1";
Do similar for your Corporate and IT categories. Also, if you set your $dn
variable like above, your $cn varible can be changed to this:
$cn="$lastname, $firstname";
The CN of an AD account doesn't need the comma escaped. But in the name of a
container you are creating, commas must be escaped. Try it and let us know.
AG
> -----Original Message-----
> From: wy [mailto:[EMAIL PROTECTED]
> Sent: Thursday, July 14, 2005 4:57 PM
> To: Giuoco, Aaron
> Cc: Glenn Lamb; [email protected]
> Subject: Re: Problem using comma in Common Name
>
>
> On 7/14/05, Giuoco, Aaron <[EMAIL PROTECTED]> wrote:
> > Please provide us all of your code related to creating the
> user, specifically the stuff related to creation of the
> container. I have created accounts with commas in them
> before, so I know it's possible. It has to be some kind of
> small syntax error.
> >
>
> Here you go.
>
> use lib qw(d:\scripts);
> use strict;
> use warnings;
> use DBI;
> use lib;
> use Net::LDAP qw(:all);
>
>
>
>
>
> my $base;
> my $base1="ou=users,ou=level2,dc=abc,dc=com";
> my $base2="dc=abc,dc=com";
> my $corporate_base="cn=users";
> my $it_base="ou=xyz";
> my $center_base="ou=center";
> my $retail_base="ou=retail";
> my $mobile_base="ou=mobile";
> my $scope="subtree";
> my $cn;
> my $dn;
>
> my $ldap;
> my $mesg;
> my $filter;
> my $results;
> my $count;
>
>
> my $insert_rec='N';
> my $lookup_key;
> my $empid_offset=454333;
> my $empid;
> my $category;
> my $firstname;
> my $lastname;
> my $middlename;
> my $displayname;
> my $street;
> my $city;
> my $state;
> my $zipcode;
> my $title;
> my $branch_dept;
> my $location;
> my $phone;
> my $fax;
> my $mobile;
> my $pager;
> my $emailaddr;
> my $homepage='http://homepage/';
> my $userid;
>
> my @row;
>
> #### Process record while looping through the array
>
> while ( @row = $sth->fetchrow_array )
> {
> ###### Preparing DN and data
>
> $empid=$row[0];
> $category=$row[1];
> $firstname=ucfirst(lc($row[2]));
> $lastname=ucfirst(lc($row[3]));
> $middlename=ucfirst(lc($row[4]));
> $street=$row[5];
> $city=$row[6];
> $state=$row[7];
> $zipcode=$row[8];
> $title=$row[9];
> $branch_dept=$row[10];
> $location=$row[11];
> $phone=$row[12];
> $fax=$row[13];
> $mobile=$row[14];
> $pager=$row[15];
> $emailaddr=$row[16];
> $userid=lc(substr($row[16], 0, length($row[16]) - 20));
> $cn="$lastname\, $firstname";
> $displayname=$lastname . ", " . $firstname;
> $lookup_key=$empid + $empid_offset;
>
> if ($category eq 'RETAIL')
> {
> $ldap=Net::LDAP->new('abc.com')
> or die("Could not connect to LDAP server");
>
> #Connect to Active Directory server
> $mesg=$ldap->bind("[EMAIL PROTECTED]", password=>"password");
>
> $dn="cn=$cn,$retail_base,$base1";
> $base=$retail_base . $base2;
>
> }
> elsif ($category eq 'CORPORATE')
> {
> $ldap=Net::LDAP->new('abc.efg.com')
> or die("Could not connect to LDAP server");
>
> #Connect to Active Directory server
> $mesg=$ldap->bind("[EMAIL PROTECTED]", password=>"password");
>
> $dn="cn=$cn,$corporate_base,$base2";
> $base=$corporate_base . $base2;
>
> }
> elsif ($category eq 'IT')
> {
> $ldap=Net::LDAP->new('abc.ijk.com')
> or die("Could not connect to LDAP server");
>
> #Connect to Active Directory server
> $mesg=$ldap->bind("[EMAIL PROTECTED]", password=>"password");
>
> $dn="cn=$cn,$it_base,$base2";
> $base=$it_base . $base2;
>
> }
>
>
> #### Check for duplicate Common Name (CN) before inserting record
>
> $filter="(&(objectclass=User)(cn=$cn))";
> $results=$ldap->search(base=>$base, scope=>$scope,
> filter=>$filter);
> $count=$results->count;
>
>
> if ($count ne 0)
> {
> print(ERRFH "error $cn \n");
> $cn="$lastname\, $firstname $middlename";
> $displayname=$lastname . ", " . $firstname . " " . $middlename;
> print(ERRFH "error $cn \n");
>
> $filter="(&(objectclass=User)(cn=$cn))";
> $results=$ldap->search(base=>$base, scope=>$scope,
> filter=>$filter);
> $count=$results->count;
>
> if ($count ne 0)
> {
> print(ERRFH "error $userid \n");
> }
> else
> {
> $insert_rec='Y';
> }
> }
> else
> {
> $insert_rec='Y';
> }
>
>
> if ($insert_rec eq 'Y')
> {
> $results = $ldap->add($dn,
> attr=>['cn' => $cn,
> 'givenname' => $firstname,
> 'sn' => $lastname,
> 'displayname' => $displayname,
> 'description' => $lookup_key,
> 'physicaldeliveryofficename' => $location,
> 'telephonenumber' => $phone,
> 'mail' => $emailaddr,
> 'wwwhomepage' => $homepage,
> 'userprincipalname' => $emailaddr,
> 'samaccountname' => $userid,
> 'streetaddress' => $street,
> 'l' => $city,
> 'st' => $state,
> 'postalcode' => $zipcode,
> 'c' => 'US',
> 'title' => $title,
> 'department' => $branch_dept,
> 'company' => 'xyz',
> 'pager' => $pager,
> 'mobile' => $mobile,
> 'facsimiletelephonenumber' => $fax,
> 'objectclass' => ['top', 'person',
> 'organizationalPerson', 'user'],
> ]);
>
> $results->code && warn "failed to add entry: $firstname, $lastname
> ", $results->error;
>
>
> if ($results->code == 0)
> {
> print(FH "inserted @row \n");
> }
> else
> {
> print(ERRFH "error @row \n");
> }
> $insert_rec='N'
> }
>
> ####Unbind from Active Directory server
> $mesg=$ldap->unbind;
> }
>
>
> #### Disconnect from Oracle DB
> $sth->finish();
> $dbh->disconnect or warn "Disconnection failed: $DBI::errstr\n";
>