2013-07-19 15 views
14

Ho un problema con la connessione ldap.Errore operativo LDAP

$hostname="ldap://sub.domain.com"; 
$ds=ldap_connect($hostname, 389); 
ldap_set_option ($ds, LDAP_OPT_REFERRALS, 0) or die('Unable to set LDAP opt referrals'); 
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3) or die('Unable to set LDAP protocol version'); 

if ($ds) 
{ 
$dn = "OU=Users,OU=ro,DC=sub,DC=domain,DC=com"; 

if (!($ldapc=ldap_bind($ds))) { 
    echo "<p>Error:" . ldap_error($ds) . "</p>"; 
    echo "<p>Error number:" . ldap_errno($ds) . "</p>"; 
    echo "<p>Error:" . ldap_err2str(ldap_errno($ds)) . "</p>"; 
    die; 
} 

$attributes = array("sn"); 
$filter = "(sn=*)"; 
$result = ldap_search($ds, $dn, $filter, $attributes); 

echo $result; 
$info = ldap_get_entries($ds, $result); 
for ($i=0; $i < $info["count"]; $i++) { 
    echo $info[$i]["ou"][0]; 
} 
} else { 
    echo "<h4>Unable to connect to LDAP server</h4>"; 
} 

ldap_unbind($ds); 

Il ldap qualsiasi connessione anonima funziona perché lo provo in un browser AD e tutto va bene. In questo codice si ferma a

ldap_search($ds, $dn, $filter, $attributes); 

ricevo l'avviso:

Attenzione: ldap_search(): Ricerca: errore di operazioni in .. \ index.php on line 38

Non so davvero quale possa essere la causa di questo errore, apprezzo il tuo aiuto.

+1

Non ci si perde con portata variabile? $ dn (base dn per ricerca) è definito un livello sotto la chiamata ldap_search. Prova a echoing (var_dump) parametri di ricerca ldap appena prima di chiamare search, per assicurarti che tutto sia a posto, o includi il controllo isset ($ dn). O semplicemente definire $ dn incondizionatamente. –

+0

I parametri sono ok, li ho controllati subito prima della chiamata di ricerca e va bene. Un problema che penso possa essere, sono su intranet, non ho le autorizzazioni di amministratore, quindi non posso scrivere in C. Ho copiato l'archivio xampp, non ho installato xampp su questa macchina. Primo anche se ho abilitato l'estensione ldap da php.ini non ha funzionato perché non ho un file in C/windows/system. Quando li ho copiati, tutto funziona, penso. Quindi, l'installazione può essere un problema? –

+0

Che ne dici di utilizzare lo strumento shell per controllare o Apache DirectoryStudio (GUI client LDAP)? Non è necessario essere amministratori locali per installarlo/usarlo, su workstation Linux o Windows, qualunque cosa. Prova a connettere e interrogare il server ldap con altri strumenti oltre a PHP. –

risposta

16

per farlo fuori dalla lista senza risposta:


ho trovato il problema, era il problema si legano. Il server accetta il binding anonimo ma non la ricerca. E con un utente e pass ha funzionato ma stavo facendo un errore. Per l'utente ho considerato solo il nome utente di de windows non la posizione di tutti da AD, ora funziona.

+0

Esattamente lo stesso problema per me.Nessun errore sul binding anonimo, ma poi "Warning: ldap_search(): Search: Operations error in .." durante la ricerca. Fornendo un utente/pass AD valido sul binding, la ricerca è stata riparata. $ ldapbind = @ldap_bind ($ ldapconn, $ ldaprdn, $ password); – RobDigital

7

Aveva questo problema, ma ero correttamente associato con un utente che era autorizzato a cercare.

ho risolto attraverso la creazione di questa opzione per lavorare con Active Directory:

ldap_set_option($connection, LDAP_OPT_REFERRALS, 0); 
+0

Anche questo mi è sembrato di aiuto: 'ldap_set_option ($ connection, LDAP_OPT_PROTOCOL_VERSION, 3);' – bgStack15