I am using LDAPS:

$ad = Net::LDAP->new(\@ad_servers,
                     onerror=> 'warn',
                     scheme => 'ldaps',
                     verify => 'require',
                     cafile => $tls_cacertfile,
                       ) || die 'Couldn\'t connect to Active Directory server';

I should have specified that earlier. As far as I know, that's the same
as using

$ad = Net::LDAPS->new(...)

As you mentioned, LDAP/TLS or LDAP/SSL is a requirement for password
changes on AD, even with our previous AD servers. So, if I didn't use
it, my program wouldn't have worked with the earlier AD servers, either.

Prentice


On 04/28/2011 04:00 PM, Dan Cutler wrote:
> Prentice,
> 
> Try using LDAPS.  The setup for this isn't terribly easy but once you've got 
> the keys in place, AD seems more friendly.
> 
> From my understanding AD will only let you make "security related" changes 
> over secured (encrypted) connections (-Z) switch below...
> 
> ie: ldapmodify  -c -x -D "CN=ldap 
> Admin,OU=ServiceAccounts,DC=mycompany,DC=com" -w 'supersecretpw' -f 
> new_users_pw.ldif  -H ldaps://dc01.mycompany.com -Z
> 
> I typically write perl code to create LDIF files, then use "ldappmodify" with 
> wire encryption.
> 
> If I don't use encryption, AD rejects all security related changes.
> 
> Hope that helps.
> 
> --Dan
> 
> -----Original Message-----
> From: Prentice Bisbal [mailto:prent...@ias.edu] 
> Sent: Thursday, April 28, 2011 3:07 PM
> To: perl-ldap@perl.org
> Subject: Can't change passwd in AD 2008 R2
> 
> We recently updated our Active Directory servers to 2008 R2. I had a
> perl script that would change a users password in OpenLDAP and Active
> Directory at the same time. This was working fine until the update. I
> can still change a user's password when I bind as an AD administrator,
> but not as a normal user. Has anyone else here gone through this?
> 
> I know the that behavior or replacing a password is different whether
> you are an administrator or regular user changing your own password, as
> documented here:
> 
> http://support.microsoft.com/?kbid=269190
> 
> I wrote this code based on the above link:
> 
> # AD doesn't allow non-admin users to replace their password.
> # Instead, it must be deleted and re-added. Administrators can only
> # replace a password.
> if ($username ne getlogin()) {
>     $mesg = $ad->modify($ad_user_dn, replace=>{unicodePwd =>
> $newUnicodePwd} );
> } else {
>     $mesg = $ad->modify($ad_user_dn, delete=>{unicodePwd =>
> $newUnicodePwd});
>     $code = $mesg->code;
>     if ($code != 0) {
>       $mesg = $ad->modify($ad_user_dn, replace=>{unicodePwd =>
> $newUnicodePwd} );
>     }
> }
> 
> This worked for just fine until the upgrade to 2008 R2. Any ideas?
> 

-- 
Prentice

Reply via email to