with what not know found example ejemplo don perl winapi ldap passwords

perl - what - mongorestore folder path



¿Cómo restablezco mi contraseña de LDAP de Perl? (4)

Net::LDAP::Extension::SetPassword no tiene nada que ver con ningún objeto LDAP OLE. O bien usa Net :: LDAP , o usa Win32::OLE->GetObject(''LDAP:'') .

No mencionaste qué servidor estás usando. Establecer contraseñas requiere una extensión a LDAP, por lo que es relevante.

Mi empresa, como la de todos, requiere restablecer la contraseña de vez en cuando. Todo esto está bien y bien por razones de seguridad, pero me gustaría explorar el desafío de restablecerlo a través de un script (sobre todo porque no podemos usar nuestras 25 contraseñas anteriores, Perl es mucho más rápido sobre el ciclismo a través de una lista de dos docenas más profundo que mis dedos son).

Estoy tratando de usar los conectores LDAP de Perl y Win32 :: OLE para restablecer mi contraseña. He seguido un par de ejemplos en línea, y tengo, brevemente:

use strict; use Win32::OLE; my $dn = ''cn=name,dc=corp,dc=com''; my $ldap = Win32::OLE->GetObject(''LDAP:''); my $ldap_user = $ldap->OpenDSObject(''LDAP://'' . $dn,''username'',''password'',1); $ldap_user->SetPassword(''mySw337NewPassword'');

Y todo lo que obtengo por mis problemas es:

Win32::OLE(0.1707) error 0x80070005: "Access is denied" in METHOD/PROPERTYGET "SetPassword" at pw.change.pl line 8

¿Es esto algo que se puede solucionar? Net::LDAP::Extension::SetPassword módulo Net::LDAP::Extension::SetPassword , pero no hay ningún dado allí.

¡Gracias!

Actualización para Leon (Max, eres el siguiente):

Tienes razón, debería haber especificado mejor. Intenté Win32::OLE , fallé, intenté por separado Net::LDAP::Extension::SetPassword y fallé aún más.

En cuanto a mi servidor: no estoy seguro, no soy el tipo LDAP :) Al ejecutar ->root_dse->get_value(''supportedExtension'') puedo ver que setPassword OID no está configurado, por lo que tal vez simplemente no sea ser.

Apoyos finales a barneyton!

Solución final:

use strict; use Win32::OLE; my $orig_password = ''password123Test''; my $target_password = ''password321Test''; my $dn = ''cn=myname,dc=corp,dc=com''; my $ldap = Win32::OLE->GetObject(''LDAP:''); my $ldap_user = $ldap->OpenDSObject(''LDAP://''.$dn,''myname'',$orig_password,1); my $tmp_password = ''''; for ( my $i = 0; $i < 30; ++$i ) { $tmp_password = ''password'' . $i . ''ABC''; print ''Changing to '' . $tmp_password . "/n"; $ldap_user->ChangePassword($orig_password,$tmp_password); $orig_password = $tmp_password; sleep 1; } $ldap_user->ChangePassword($tmp_password,$target_password);


Cuando dijiste que intentabas "restablecer" tu contraseña, creo que en realidad querías cambiar la contraseña en lugar de establecer la contraseña. Hay una diferencia entre los dos. "SetPassword" requiere privilegio god / admin ya que está configurando la contraseña de un usuario para un nuevo valor independientemente de si se conoce la contraseña anterior, mientras que "ChangePassword" requiere que el usuario conozca realmente la contraseña anterior. Supongo que su cuenta no tiene privilegios de administrador, de lo contrario no habría recibido 0x80070005: "Acceso denegado"

Entonces, en lugar de:

$ldap_user->SetPassword(''mySw337NewPassword'');

prueba esto:

$ldap_user->ChangePassword(''password'', ''mySw337NewPassword'');

Por cierto, nunca hice esto en Perl, así que solo estoy adivinando. Espero que esto te ayude.


Otra cosa a tener en cuenta es que Active Directory no le permite establecer contraseñas a menos que se vincule al puerto 636 usando LDAPS.


Podría tratar de escribir el valor en userPassword que sería un restablecimiento de contraseña, y es posible que no tenga derechos para hacerlo.

De lo contrario, podría intentar en una operación (LDIF lo mostraría como separado por un solo guión en una línea) eliminar el valor de la contraseña anterior y luego agregar el valor de la nueva contraseña. Eso sería un evento de cambio de contraseña.