Sorry, you had it right creating the ldif object. it should be just 'change' not 'changes'
Graham. On Nov 29, 2010, at 16:01 , Dan Cutler wrote: > Thanks Graham, > > I must still be missing something. I still get no changetype:modify or the > new attr in the LDIF file. > > I changed my $ldif line to be this: > > $ldif = Net::LDAP::LDIF->new ('changes.ldif','w', changes => '1'); > > And the other lines to be this: > ... > my $dne = Net::LDAP::Entry->new; > $dne->dn($user); > $dne->changetype('modify'); > $dne->add ( MyCompany-ClientKey => $name ); > $ldif->write_entry($dne); > } > } > $ldif->done(); > > Am I still missing something or doing something else wrong? > > Thanks again Graham! > > -----Original Message----- > From: Graham Barr [mailto:gb...@pobox.com] > Sent: Monday, November 29, 2010 4:47 PM > To: Dan Cutler > Cc: perl-ldap@perl.org > Subject: Re: LDIF file instead of updating directory > > > On Nov 29, 2010, at 15:36 , Dan Cutler wrote: > >> Hi all, >> >> I have a quick question about the Net::LDAP::LDIF module. >> >> I noticed that the LDIF module requires the use of Net::LDAP::Entry objects >> since its methods are all against Entry objects... >> >> The script snippet below is fully capable of updating the directory below, >> but I'd prefer to create LDIF files rather than direct updates. > > If you create an LDIF object with > > my $ldif = Net::LDAP::LDIF->new( "file.ldif", "w", changes => 1); > > then you can call $ldif->write_entry($dne); for each entry > > and call $ldif->done; at the end of your script. you should have an ldif file > with changetype: modify entries in it. > > Graham. > >> >> If I uncomment these two lines, the script will update directly and it works. >> >> #my $result = $dne->update($AD_ldap); >> #$result->code && warn "failed to add entry for $user ", $result->error ; >> >> Unfortunately, the LDIF file only contains the DN of the user followed by an >> add line like this: >> >> dn: CN=Dan Cutler,OU=ClientX,DC=MyCompany,DC=com >> MyCompany-ClientKey: ClientX >> >> The LDIF file is missing everything else. (like "changetype: modify", and >> the new attribute name "MyCompany-ClientKey"). >> >> Any Suggestions? >> >> Thanks!! >> >> >> >> $AD_ldap = Net::LDAP->new($AD_host) or die "$@"; >> >> $ldif = new Net::LDAP::LDIF ('Mirgrate_ou_name_to_attr.ldif','w', >> encode => 'base64', >> change => '1'); >> >> # bind for searches using system account >> my $AD_mesg = $AD_ldap->bind( $AD_bind_user, password => $AD_bind_pw, port >> => 3268); >> if ($AD_mesg->code) { print "AD bind failed with ", $AD_mesg->code , "\n"; } >> >> >> my $AD_result = $AD_ldap->search ( base => $base_dn, >> filter => '(objectclass=organizationalUnit)', >> scope => 'one', >> attrs => ['name'] >> ); >> >> my @AD_entries = $AD_result->entries; >> >> >> # Get AD OUs >> print "AD OUs =========================================\n"; >> >> foreach my $ADentr ( @AD_entries ) { >> my $name = $ADentr->get_value('name'); >> my $dn = $ADentr->dn(); >> print "Finding users under OU $dn with name = $name...\n"; >> >> my @users = users_under_ou($dn,'AD'); # sub returns all user DNs with >> scope=base and baseDN is the group DN >> >> foreach my $user (@users) { >> print "Modifying User $user setting MyCompany-ClientKey to $name\n"; >> my $dne = Net::LDAP::Entry->new; >> $dne->dn($user); >> $dne->changetype('modify'); >> $dne->add ( MyCompany-ClientKey => $name ); >> #my $result = $dne->update($AD_ldap); >> #$result->code && warn "failed to add entry for $user ", $result->error ; >> #$dne->dump(); >> $ldif->write($dne); >> } >> print "\n"; >> } >> >> --Dan >