2012-05-26 5 views
5

Obtención de un error:LDAP_MOD_REPLACE() [function.ldap-mod-REPLACE]: Modificar: Servidor no está dispuesto a realizar

Server is unwilling to perform

mientras cambia unicodePwd en AD a través de PHP. Sin embargo, puedo buscar, agregar, eliminar y modificar cualquier atributo de los usuarios.

Uso de la cuenta de administrador para vincular y el administrador tiene todos los derechos para cambiar las contraseñas de los usuarios.

Aquí está el código que estoy usando:

<?php 
$dn = "CN=Vishal Makwana,OU=Address Book,DC=example,DC=com"; 
$ad = ldap_connect("ldap://example.com") 
     or die("Couldn't connect to AD!"); 
ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3); 
$bd = ldap_bind($ad,"[email protected]","admin1"); 

    if($bd) { 
     echo "AD bind successfully"; 
     } 
    else { 
     echo "Couldn't bind AD";; 
    } 

$user["unicodePwd"] = "asdf1234"; 

$result = ldap_mod_replace($ad, $dn, $user); 
if ($result) echo "User modified!"; else 
      echo "There was a problem!"; 

ldap_unbind($ad); 
?> 

Respuesta

9

Hay una serie de cosas que hay que conseguir exactamente derecho a establecer una contraseña en el año a través de LDAP.

  • es necesario utilizar una conexión SSL (ldaps: //)

  • la contraseña debe estar entre comillas

  • el (citado) La contraseña debe ser codificado en 16- unicode bits (UTF-16LE)

Suponiendo que la contraseña que está tratando de establecer es de caracteres ASCII ordinarias, la conversión unicode se puede lograr mediante la adición de un byte \ 000 después de cada byte de la cadena ascii, como se muestra en this code sample.

Así que su ejemplo podría en cambio ser:

$newpassword = "asdf1234"; 
$newpassword = "\"" . $newpassword . "\""; 
$len = strlen($newpassword); 
for ($i = 0; $i < $len; $i++) $newpass .= "{$newpassword{$i}}\000"; 
$user["unicodePwd"] = $newpass; 
+0

Muchas gracias David, pero estoy un poco confundido. Cuando intenté usar la conexión SSL, (ldaps: //) ni siquiera se vincula con AD. Quiero decir, ¿debería hacer algo para habilitar el soporte SSL en Apache o PHP? Si es así, ¿cómo puedo hacer eso? –

+0

no debería "{$ newpassword {$ i}} \ 000" ser "{$ newpassword [$ i]} \ 000" es decir, corchetes en lugar de rizados? – redreinard

2

Después de buscar mucho y gastar mucho tiempo, estoy finalmente capaz de modificar la contraseña del usuario de directorio activo de código PHP usando la biblioteca LDAP.

Necesitamos la conexión LDAP con el servidor de directorio activo desde el código PHP; y que debe modificar el campo unicodePwd.

ldap_connect(ldaps://IP, 636); 
ldap_connect(ldaps://IP, 389); 
+0

Después de instalar mi certificado, seguí pensando que ese era mi problema, pero después de leer lo que escribía, estaba usando "userPassword" en lugar de "unicodePwd". Gracias. – geekinit

Cuestiones relacionadas