hawkmaster: LDAP Keine Einträge gefunden

Hallo zusammen,
ich habe mit PHP eine LDAP Funktion gemacht, mit der Anwenderdaten (email, displayname ..) in einem AD ausgelesen werden.
Bisher hatte ich noch nie Probleme damit. Heute hatte ich nun einen AD Server bei dem ich keine Attribute auslesen kann.
Selbst wenn ich in meiner testumgebung den AD Server (Server 2003) mit den Organistionseinheiten genau nachbaue kann ich hier immer alle User auslesen.

Ich bin jetzt nicht so der Experte mit AD: Daher meine Frage;
gibt es vielleicht irgend welche Unterschiede oder Besonderheiten zu beachten? Bei dem Server wo es nicht klappt ist es auch ein Server 2003.

Die Abfrage mache ich im Prinzip so:

  
$filter = "samaccountname=".$ldapuser;  
$search = ldap_search($ad, $dn, $filter, $attrs);  
$entries = ldap_get_entries($ad, $search);  

Also die Connection und der Bind scheint zu gehen. Es werden nur keine "Entries" gefunden. ein print_r($entries) ist leer.

Vielleicht hatte schon mal jemand ein ähnliches Problem?

vielen Dank und viele Grüße
hawk

  1. Tach!

    Die Abfrage mache ich im Prinzip so:

    $filter = "samaccountname=".$ldapuser;

    $search = ldap_search($ad, $dn, $filter, $attrs);
    $entries = ldap_get_entries($ad, $search);

      
    Wenn du Fehler suchst, ist es günstig, die Hinweise auf Fehler nicht zu ignorieren. Diese bekommst du als Rückgabewert der Funktionen. Den genauen Text liefert dann ldap\_error().  
      
      
    dedlfix.
    
    1. Hallo dedlfix,
      danke für deine Hilfe.

      ich habe ja extra schon die @ vor ldap_search oder get_entries weggenommen um irgend welche Fehler zu sehen.
      Das Problem ist, das es keine Fehlermeldung zu geben scheint.
      Ich kann einen Connect und Bind mit dem Anwender machen aber eben keine Entries auslesen. Das Array ist leer bzw. ldap_get_entries bringt nichts zurück.

      vielen Dank und viele Grüße
      hawk

      1. Tach!

        ich habe ja extra schon die @ vor ldap_search oder get_entries weggenommen um irgend welche Fehler zu sehen.

        Das reicht nicht, und du solltest das bereits von den Datenbank-Funktionen her kennen. Du musst auswerten, was die Funktionen zurückgeben und nicht einfach nur das Ergebnis an die nächste Funktion weitergeben. Es ist eine Grundphilosophie von PHP, dass Fehler nicht nur ausgegeben werden (meist nur bei reinen PHP-Fehlern), sondern auch dass Funktionen über ihr Ergebnis einen Fehlerzustand signaliseren (false statt Ressourcenkennung oder etwas anderem nützlichem). Mitunter (vorwiegend bei Extensions, die irgendwas externes abfragen, so auch LDAP) gibt es spezielle Funktionen, die den Fehlermeldungstext abholen.

        Das Problem ist, das es keine Fehlermeldung zu geben scheint.

        Der Schein trügt vielleicht, wenn du dich nicht vergewisserst, was wirklich passiert. Zum ordentlichen Programmieren zählt, dass man potentielle Fehler einkalkuliert. Und zum Suchen von bereits auftretenden Fehlern ist var_dump() das wichtigste Werkzeug. Was ist wirklich in der Variable enthalten? Was wird wirklich von der Funkton zurückgegeben? var_dump() klärt auf.

        Also bitte: Handbuch aufschlagen, was gibt die Funktion im Gutfall zurück, was im Fehlerfall? Strategie ausdenken, wie auf den Fehlerfall reagiert werden soll. Diese in Code umsetzen. Nicht immer steht im Handbuch ein Hinweis auf die Funktion, die die Fehlermeldung vom externen System holt, dann sollest du nachsehen, ob es eine Funktion namens ..._error() gibt. Diese Funktion solltest du nicht einfach so aufrufen, sondern erst wenn feststeht (false als Ergebnis), dass ein Fehler auftrat.

        dedlfix.

        1. Hallo dedlfix,
          nochmals vielen Dank für die Hilfestellung.

          Das Problem ist das ich den "Fehler" nicht nachstellen kann. Ich habe bereits einige unterschiedliche ADs ausprobiert. Es hat immer funktioniert, ich habe immer Anwenderdaten auslesen können.
          Ich werde wohl vor Ort das prüfen müssen (auch mit var_dump) und versuche die Ursach einzugrenzen.

          Meine Frage war auch dahingehend gestellt, ob jemand weiss ob es bei ADs auch Unterschiede gibt hinsichtlich den Attributen, der Speicherung der Anwenderdaten usw.
          Danke nochmals.

          vielen Dank und viele Grüße
          hawk

          1. Tach!

            Meine Frage war auch dahingehend gestellt, ob jemand weiss ob es bei ADs auch Unterschiede gibt hinsichtlich den Attributen, der Speicherung der Anwenderdaten usw.

            Ja, man kann zumindest die Struktur um Felder erweitern. Und Leseberechtigungen beziehungsweise -verweigerungen sollten sich auch setzen lassen. Aber das was alles sein könnte, hilft dir wenig. Es ist bedeutend aufwendiger, alle möglichen Fälle zu ermitteln (noch dazu, wenn du die Möglichkeiten des Systems gar nicht erschöpfend zu wissen scheinst), um daraus irgendwie zu schlussfolgern, was die Ursache sein könnte. Bau lieber eine gescheite Fehlererkennung in deinen Code ein und untersuche und recherchiere anhand von konkreten Fehlermeldungen deinen wirklich vorliegenden Fall.

            dedlfix.