Ok, Graham supplied the missing bit, so now I know at least the basics
are working.
Now the question remains, what is wrong with the original thing I was
trying, using the Net::LDAP::LDIF functionality? Here's the code (part
of a script fed from a web form, cut out extraneous details):
#Version to do it through LDIF read
use Net::LDAP::LDIF ;
local $tmp="/tmp/$$.ldif" ;
open OUTFILE,"> $tmp"; print OUTFILE $w->param('ldif') ; close OUTFILE ;
$ldif = Net::LDAP::LDIF->new($tmp,"r",onerror => 'warn');
$entry = $ldif->read_entry();
if ($debug) {
print "${redon}ldif loaded with dn=",$entry->dn(),"${redoff}$br";
@attributes=$entry->attributes;
print "${redon}read entry:<BR>"; foreach $key (sort @attributes) {
print "$key=" ; print $entry->get_value($key); print "${br}"; } print
"${redoff}${br}";
}
$ldap = Net::LDAP->new($LDAPSERVER);
$result=$ldap->bind("$binddn",password=>"$bindpass",version=>"3");
$result=$ldap->add($entry);
$result->code && die "add error: ", $result->error;
And here is the LDIF that is pasted into the form (a textarea field):
dn: cn=kingr,o=PennLibraryStaff,dc=library,dc=upenn,dc=edu
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: upennEduPerson
cn: kingr
gn: Richard
sn: King
userid: kingr
uidNumber: 3019
gidNumber: 100
homeDirectory: /home/kingr
loginShell: /bin/bash
gecos: Richard P. King
ou: Reference
title: Systems Tech II
And here's the results (some debug statements were omitted from the code
above, but the output is below):
In sub process_ldif
creating /tmp/19277.ldif
/tmp/19277.ldif contains
dn: cn=kingr,o=PennLibraryStaff,dc=library,dc=upenn,dc=edu
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: upennEduPerson
cn: kingr
gn: Richard
sn: King
userid: kingr
uidNumber: 3019
gidNumber: 100
homeDirectory: /home/kingr
userPassword: {SHA}6wEWbSyjuY4/gp469HkIAxqj3vs=
loginShell: /bin/bash
gecos: Richard P. King
ou: Reference
mail: [EMAIL PROTECTED]
telephonenumber: 215-898-5928
title: Systems Tech II
ldif loaded with dn=cn=kingr,o=PennLibraryStaff,dc=library,dc=upenn,dc=edu
read entry:
cn=kingr
gecos=Richard P. King
gidnumber=100
gn=Richard
homedirectory=/home/kingr
loginshell=/bin/bash
[EMAIL PROTECTED]
objectclass=person organizationalPerson inetOrgPerson posixAccount
upennEduPerson
ou=Reference
sn=King
telephonenumber=215-898-5928
title=Systems Tech II
uidnumber=3019
userid=kingr
userpassword={SHA}6wEWbSyjuY4/gp469HkIAxqj3vs=
add error: objectclass: value #0 invalid per syntax at
/var/www/html/bin/ldappasswd.cgi line 117, line 1.
So, as far as I can tell the $entry reference has everything in it, and
I know the object classes in the LDIF are good, for they are the same as
every other entry in this particular LDAP instance. In fact, if I use
this LDIF file from the command line with an ldapadd statement, it works
fine. So again, I am missing something but can't tell what. It's not
the bit I was missing doing it manually that Graham pointed out, for you
can see the debug code is correctly outputting $entry->dn() and showing
the value is set.
Thanks again in advance,
Rick
______________________________________________________________________
This email has been scanned by the MessageLabs Email Security System.
For more information please visit http://www.messagelabs.com/email
______________________________________________________________________