I have a working Net::LDAP::Entry program for adding users so I decided to gut it to create a userPassword changer.
I keep getting "Error changing password: no objectClass attribute". I cannot find examples doing simple one-at-a-time adds like this. All I can find are examples using arrays and hashes and cannot seem to translate it to this. Any tips? sub resetMacAcct($newuid,$pw,$newpw){ $time = localtime time; $theirIP = $q->remote_addr(); # create mac account $macldapsvr = "XXX.XXX.XXX.XXX"; $macADMdn = "uid=admin,cn=people,dc=lib-mac,dc=local"; $macadmpwd ="XXXXXXXX"; $macBind = Net::LDAP->new($macldapsvr, port => 389, debug => 0, timeout => 60, version => 3 ) or die "Couldn't connect to Mac LDAP server: $@"; my $conn = $macBind->bind(dn => $macADMdn, password => $macadmpwd); if ($conn->code){ die 'Cannot bind:' . $conn->error . "\n";} my $macEntry = Net::LDAP::Entry->new; $newdn="uid=" . $username . ",cn=people,dc=lib-mac,dc=local"; $macEntry->dn($newdn); # added sha1 hashing $salt=XX; $ctx = Digest::SHA1->new; $ctx->add($newpw); $ctx->add($salt); $newMacpw = '{SSHA}' . encode_base64($ctx->digest . $salt ,''); $macEntry->replace(userPassword => $newMacpw); my $add = $macBind->add($macEntry); die "Error changing password: " . $add->error()."\n" if $add->code(); print LOG "$time;$cn;$theirIP;$username\n"; $macBind->unbind(); } -- Robert Threet Systems Manager USI Computer Center (812) 465-1082 Confidentiality Statement: This email message, including any attachments, is for the sole use of the intended recipient(s) and may contain confidential and privileged information.