Marco: Probleme mit LDAP Abfrage (mehr als 1000)

Hallo zusammen

Ich habe ein kleines Problem und zwar muss ich mit PHP eine LDAP Abfrage machen welches mein AD ausliest. Leider sind es mehr als 1000 Benutzern. Das Problem ist, dass das AD standardmässig nur 1000 Objekte zum abfragen zuläst und ich diese Policy auf dem Windows Server nicht ändern kann / darf!

Wie kann ich es mit PHP lösen, damit ich es "Schrittweise" auslesen kann um dann trotzdem alle Benutzer zu erhalten.

Mein Script sieht Momentan so aus:

<?php  
  
	  
	$ldap_server = 'server';  
	$ldap_user = 'benutzer';  
	$ldap_password = 'paswort';  
	$ldap_basedn = 'dc=xxx,dc=zzz';  
	$ldap_port = "3268";  
	  
	  
	// Nach was soll gesucht werden?  
	$filter = "(&(objectClass=user) (samaccountname=*))";  
	// Verbinde mit Ldap Server  
	$ds = ldap_connect($ldap_server, $ldap_port) or die (ldap_error($ds));  
	  
	// Angeblich nötig für den Zugriff auf ein Win2003 AD  
		ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);  
		ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);  
		ldap_set_option($ds, LDAP_OPT_SIZELIMIT, 400);  
  
  
	// Wenn Verbindung erfolgreich:  
		if($ds){  
			$ldapbind = @ldap_bind($ds,$ldap_user,$ldap_password) or die (ldap_error($ds));  
			$search = ldap_search($ds,$ldap_basedn,$filter) or die (ldap_error($ds));  
			$data = ldap_get_entries($ds,$search);  
			$anzahl = ldap_count_entries($ds,$search);  
			echo "Es gibt ".$anzahl." Einträge im AD";  
			  
			for ($i=0; $i<$anzahl;$i++) {  
				$ergebnis[$i]["sn"] = utf8_decode($data[$i]["sn"][0]);  
				$ergebnis[$i]["givenname"] = utf8_decode($data[$i]["givenname"][0]);  
				$ergebnis[$i]["telephoneNumber"] = utf8_decode($data[$i]["telephonenumber"][0]);  
				$ergebnis[$i]["physicalDeliveryOfficeName"] = utf8_decode($data[$i]["physicaldeliveryofficename"][0]);  
			}  
			  
		}else{  
			echo "Fehler!";  
		}  
		  
		  
echo "<html>";  
echo "<table border=0>";  
for ($i=0; $i<$anzahl; $i++) {  
    echo "<tr>";  
   echo "<td width=100>" . $i . "</td>";  
	echo "<td width=200>" . $ergebnis[$i]["sn"] . ", ".$ergebnis[$i]["givenname"]. "</td>";  
	echo "<td width=200>" . $ergebnis[$i]["cn"] . ", ".$ergebnis[$i]["givenname"]. "</td>";  
    echo "<td width=200>" . $ergebnis[$i]["telephoneNumber"] . "</td>";  
    echo "<td width=150>" . $ergebnis[$i]["physicalDeliveryOfficeName"] . "</td>";  
}  
echo "</table>";  
  
echo "</body></html>";  
		  
	  
?>  

Es werden jedoch nur diese 400 angezeigt und es kommt eine Meldung:
ldap_search() [function.ldap-search]: Partial search results returned: Sizelimit exceeded

Wie schaffe ich es, dass es mir alle anzeigt in den 400 Schritten. Ich bin euch für eure Hilfe sehr dankbar!

Marco

  1. Hallo,

    Wie kann ich es mit PHP lösen, damit ich es "Schrittweise" auslesen kann um dann trotzdem alle Benutzer zu erhalten.

    Das gleiche Problem hatten schon andere vor Dir und unter der folgenden Seite (nach unten scrollen!) gibt es Code, der das Problem angeblich löst:

    http://www.edugeek.net/forums/coding/30482-php-ldap-returning-only-some-results.html

    Kann das mangels AD nicht selbst testen, hoffe, es hilft Dir aber trotzdem.

    Viele Grüße,
    Christian

    1. Hallo Christian

      Vielen Dank für Deine Antwort. Ich habe mir die beiden Links angeschaut. Leider aber auf keine Lösung gekommen. Ich schaffe es einfach nicht, das AD "schritt-weise" auszulesen :-(

      Hat sonst noch jemand Erfahrungen?

      Marco