15 Stimmen

Holen Sie alle möglichen Attribute und alle objectClasses von openLDAP in PHP.

Ich muss einen LDAP-Editor in PHP schreiben. LDAP wird verwendet, um Netzwerkgeräte (Switch, AP, ..) zu speichern. Daher handelt es sich um keine normale Funktionalität und ich habe viele Probleme gefunden. Das größte Problem ist:

Ist es möglich, alle objectClasses aus der Datenbank zu lesen und alle Attribute für eine bestimmte objectClass?

Vielen Dank für alle Antworten!! Ajax

21voto

kalyan Punkte 3047

Warum nicht?

Es wird einen Subschema-Eintrag pro Server geben, der alle Objektklassen und Attributtypen enthält. (einschließlich AD)

Aber der Subschema-Eintrag dn kann in jeder Implementierung unterschiedlich sein, dies kann aus dem rootDSE-Attribut "subschemasubentry" abgerufen werden.

-AD-Beispiel-
ldapsearch -s base -b "" -D cn=Administrator,cn=users,dc=domain,dc=com -w 'password' -x -h 192.168.3.10 objectClass=* subschemasubentry

**AUSGABE:**
dn:
subschemaSubentry: CN=Aggregate,CN=Schema,CN=Configuration,DC=domain,DC=com

-OpenLdap-Beispiel-
ldapsearch -s base -b "" -D cn=Administrator,dc=capua,dc=com -w password -x -h 192.168.3.11 subschemaSubentry 

**AUSGABE:**
#
dn:
objectClass: top
objectClass: OpenLDAProotDSE
subschemaSubentry: cn=Subschema

Beachten Sie außerdem den Suchbereich. Es sollte BASE_LEVEL sein, sonst wird kein Ergebnis zurückgegeben.

Nach diesem Suchvorgang das Subschema für Objektklassen und Attributtypen durchsuchen.

ldapsearch -s base -b "cn=subschema" -D cn=Administrator,dc=capua,dc=com -w password -x -h 192.168.3.11  objectclass=subschema objectclasses attributetypes

Dies gibt alle Objektklassen und Attributtypen als Zeichenfolge zurück. Sie haben keine Option, eine Liste der Attribute einer bestimmten Objektklasse abzufragen. Sie können NUR die ldif-Ausgabe aller gespeicherten Objektklassen und Attribute erhalten. Möglicherweise können Sie einen Parser schreiben oder ein ldif-Objekt erstellen, wenn das funktioniert. Aber wenn es sich um AD handelt, haben Sie möglicherweise etwas Flexibilität, indem Sie direkt cn=Schema,cn=configuration abfragen.

Schauen Sie sich den PHP-Code an. Angenommen, $ld ist verbunden. Einige Verzeichnisserver ermöglichen anonymes Lesen des Subschemas, in diesem Fall müssen Sie sich nicht binden.

  //Holen Sie sich den Subschema dn aus rootDSE
  $search = ldap_read($ld, "", "objectclass=*", array('*', 'subschemasubentry'));
  $entries = ldap_get_entries($ld, $search);
  $schemadn = $entries[0]["subschemasubentry"][0];

  print "Suche ". $schemadn . "";

  // Lesen Sie alle Objektklassen, Attributtypen aus dem Subschema
  $schsearch = ldap_read($ld, $schemadn, "objectClass=subSchema", array('objectclasses', 'attributetypes'));
  $schentries = ldap_get_entries($ld, $schsearch);

  $count = $schentries[0]["attributetypes"]["count"];

  print "Drucke alle Attributtypen ";
  for ($i=0; $i<$count; $i++)
     print $schentries[0]["attributetypes"][$i] . "";

  $count = $schentries[0]["objectclasses"]["count"];

  print "Drucke alle Objektklassen ";
  for ($i=0; $i<$count; $i++)
     print $schentries[0]["objectclasses"][$i] . "";

1voto

Stefan Gehrig Punkte 80686

Vielleicht sollten Sie einen Blick auf Zend_Ldap werfen, das LDAP-Komponente im Zend Framework. Es ermöglicht ein Schema-Introspektion für OpenLDAP-Server und solche, die mit OpenLDAP kompatibel sind. Der Code könnte Ihnen einige Hinweise dazu geben, wie dies zu erreichen ist.

Bitte beachten Sie, dass dieses Verfahren mit einem Active Directory-Server nicht möglich ist, da sie die Schema-Informationen in einer Form speichern, die von ext/php aufgrund des Mangels an Paging-Unterstützung nicht abgerufen werden kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X