2012-05-26 28 views
5

gerçekleştirmek istemediğini:ldap_mod_replace() [function.ldap-mod değiştirme]: değiştirin: Sunucu bir hata alma

Server is unwilling to perform

PHP üzerinden AD unicodePwd değiştirirken. Ancak, kullanıcıların herhangi bir özelliğini arayabilir, ekleyebilir, kaldırabilir ve değiştirebilir miyim.

Bağlamak ve yönetici için Yönetici hesabını kullanmak, herhangi bir kullanıcının parolalarını değiştirme hakkına sahiptir.

İşte kullanıyorum kodu:

Eğer LDAP aracılığıyla AD şifre belirlemesini tam olarak doğru almak gerekir şeylerin vardır
<?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); 
?> 

cevap

9

.

  • şifre

  • (alıntı) şifre 16'lı içinde kodlanması gerekir tırnak içinde gerekiyor:

    • bir SSL bağlantısı (// LDAPS) kullanmak gerekir Eğer ayarlamaya çalıştığınız şifreyi varsayarsak bit unicode (UTF-16LE)

    sıradan aSCII karakter, unicode dönüşüm a \ 000 byte ekleyerek yapılabilir this code sample'da gösterildiği gibi ascii dizesinin her baytından sonra.

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

    Çok teşekkürler David, ama biraz kafam karıştı. SSL bağlantısını kullanmaya çalıştığımda (ldaps: //) AD ile bile bağlanmaz. Apache'de veya PHP'de SSL desteğini etkinleştirmek için bir şeyler yapmalı mıyım? Evet ise, bunu nasıl yapabilirim. –

    +0

    , "{$ newpassword {$ i}} \ 000" olmalıdır "{$ newpassword [$ i]} \ 000", yani kıvırcık yerine köşeli ayraçlar? – redreinard

    2

    bir çok arama ve çok zaman geçirdikten sonra sonunda LDAP kitaplığı kullanarak PHP kodundan aktif dizin kullanıcı şifresini değiştirmek mümkün duyuyorum: gibi

    Yani örnek yerine olmazdı.

    LDAP'ın etkin dizin sunucusuyla PHP kodundan bağlantıya ihtiyacımız var; ve unicodePwd alanını değiştirmeniz gerekiyor.

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

    Sertifikamı yükledikten sonra bunun benim sorunum olduğunu düşünmeye devam ettim, ancak yazdıklarınızı okuduktan sonra "unicodePwd" yerine "userPassword" kullanıyordum. Teşekkürler. – geekinit