Dear Perl LDAP users! I have some difficulties while trying to update the LDAP entry. I have looked through the mail archive and I see that this topic is raised quite often.
Ideally I would like to create an entry, that I would like to use either for adding or for updating (the choice is not known at the moment of creation). I see from debug output, that "changetype=add", but I call $ldap->modify() which should override this... === CODE === my $entry = Net::LDAP::Entry->new(); my $ldif = Net::LDAP::LDIF->new(\*STDOUT, 'w', 'encode' => 'base64', 'change' => 1); $entry->add('objectClass' => [ qw(inetOrgPerson mozillaAbPersonAlpha) ]); # Somehow computed value, $1 = first name, $2 = surname: $entry->dn("cn=$1 $2"); # These entries only when adding a new entry: $entry->add( 'givenName' => $1, 'sn' => $2, 'cn' => "$1 $2", 'mail' => $contact->{email} ); # These entries when adding/updating a new entry: $entry->replace('mail' => $contact->{email}); $entry->replace('telephoneNumber' => $contact->{'telephone'}); $entry->replace('mobile' => $contact->{'mobile'}); eval { $ldap->search('base' => $entry->dn(), 'filter' => '(cn=*)', 'scope' => 'base', 'sizelimit' => 1) }; if ($@) { print "Adding " . $entry->dn() . "\n"; eval { $ldap->add($entry) }; carp $@ if $@; } else { print "Updating " . $entry->dn() . "\n"; $ldif->write_entry($entry); $ldap->debug(15); $ldap->modify($entry); } === END OF CODE === === OUTPUT === Updating cn=Dmitry Katsubo,cn=persons,cn=centurion dn: cn=Dmitry Katsubo,cn=persons,cn=centurion changetype: add objectClass: inetOrgPerson objectClass: mozillaAbPersonAlpha givenName: Dmitry sn: Katsubo cn: Dmitry Katsubo mail: Dmitry Katsubo <dmitry.kats...@gmail.com> mobile: +31 65 196-30-34 Net::LDAP=HASH(0x2165c1c) sending: 30 32 02 01 03 66 2D 04 29 63 6E 3D 44 6D 69 74 02...f-.)cn=Dmit 72 79 20 4B 61 74 73 75 62 6F 2C 63 6E 3D 70 65 ry Katsubo,cn=pe 72 73 6F 6E 73 2C 63 6E 3D 63 65 6E 74 75 72 69 rsons,cn=centuri 6F 6E 30 00 __ __ __ __ __ __ __ __ __ __ __ __ on0. 0000 50: SEQUENCE { 0002 1: INTEGER = 3 0005 45: [APPLICATION 6] { 0007 41: STRING = 'cn=Dmitry Katsubo,cn=persons,cn=centurion' 0032 0: SEQUENCE { 0034 : } 0034 : } 0034 : } Net::LDAP=HASH(0x2165c1c) received: 30 0C 02 01 03 67 07 0A 01 00 04 00 04 00 __ __ 0....g........ 0000 12: SEQUENCE { 0002 1: INTEGER = 3 0005 7: [APPLICATION 7] { 0007 1: ENUM = 0 000A 0: STRING = '' 000C 0: STRING = '' 000E : } 000E : } === END OF OUTPUT === I also tried the following: $entry->changetype('modify')->update($ldap); instead of $ldap->modify($entry); with no effect (also debug was not shown). Can somebody give an advice how to update the entry correctly? Thanks!