Hi,
 There is a bug in Net::LDAP::LDIF when parsing change records.

 Refer to RFC 2849, Pages 9 and 10:
---------------------------------------------------------------
# Modify an entry's relative distinguished name
dn: cn=Paul Jensen, ou=Product Development, dc=airius, dc=com
changetype: modrdn
newrdn: cn=Paula Jensen
deleteoldrdn: 1
---------------------------------------------------------------

 The changetype attribute is listed in the LDIF before the attribute to
be changed is listed. This is also the way OpenLDAP's ldapmodify tool
parses the LDIF change records.

 Net::LDAP::LDIF fails to parse the records properly if the changetype
attribute comes before the attribute to be changed. The result is that
the $entry->attributes() method will return an empty list of attributes.

Net::LDAP::LDIF _should_ parse
---------------------------------------------------------------
dn: cn=foo,o=bar
changetype: modify
add: newAttrib
newAttrib: someValue
---------------------------------------------------------------

however

Net::LDAP::LDIF expects
---------------------------------------------------------------
dn: cn=foo,o=bar
add: newAttrib
changetype: modify
newAttrib: someValue
---------------------------------------------------------------


 I wrote a parsing function that can take an LDIF file which has new
records and change records, and call add or modify respectively. It uses
logic like this:

 for my $attrib ( $entry->attributes() ) {
        if ( $attrib =~ /changetype/ ) {
                $record->{entrytype} = "change";
                last;
        } else {
                $record->{entrytype} = "new";
        }
  }
  push @entries, $record;


 My parsing of the entrytype fails when the $entry->attributes() list is
empty, unless I modify my LDIF change records to suit Net::LDAP::LDIF.
And then they can't be used with OpenLDAP tools...

 Comments?

Thanks!
-- 
Mike Jackson

Reply via email to