Saturday, 6 May 2017

Ldapsearch Objectsid Binary Options

LDAP-Filter-Syntax Dieses Thema behandelt die Syntax und Regeln für ein LDAP-Filter, das eine normale Zeichenfolge ist, die die Kriterien für den Filter ausdrückt. Sie benötigen Kenntnisse über LDAP-Filter, wenn Sie Objekte und Filterobjekte im LDAP-Browser LEX durchsuchen möchten. Grundlegende LDAP-Filter-Syntax und Operatoren LDAP-Filter bestehen aus einem oder mehreren Kriterien. Wenn in einer Filterdefinition nur ein Kriterium vorhanden ist, können sie durch logische UND - oder ODER-Operatoren verkettet werden. Die logischen Operatoren werden immer vor den Operanden (d. H. Den Kriterien) platziert. Dies ist die sogenannte polnische Notation. Die Suchkriterien müssen in Klammern gesetzt werden und dann muss der gesamte Begriff noch einmal eingeklammert werden. (K2)) oder mit mehr als zwei Kriterien: (amp (K1) (K2) (K3) (K4) (K1) (K2)) oder mit mehr als zwei Kriterien: (K1) (K2) (K3) (K4) Jede UND / ODER-Operation kann auch als ein einziges Kriterium verstanden werden: (( (K1 UND K2) OR (K3 UND K4) Die Suchkriterien bestehen aus einer Anforderung für ein LDAP-Attribut , z. B (GegebenNameSandra). Folgende Regeln sind zu beachten: (attribute abc). z. B. (Amp (objectclassuser) (displayNameFoeckeler) Das Zeichen null (00) kann auch gelegentlich gefordert werden, es ist auch möglich, nach bestimmten Werten in mehrwertigen Attributen zu filtern Ein Beispiel ist das Attribut objectClass. Aufgrund der hierarchischen Struktur des Directory Schemas ist ein Ein ADS - Benutzer ist zB ein Objekt der Klassen - typen, also ein Objekt der Klassen - typen, also ein Filter: Sie müssen jedoch berücksichtigen, dass eine solche Filterung immer kostet Filtern nach Hex-Nummern und Binärwerten In Fällen, in denen Attribute des Typs Integer oder Long Integer für bestimmte Hex-Nummern verglichen und gefiltert werden, muss immer die entsprechende dezimalkodierte Zahl verwendet werden Im LDAP-Filter Beispiel: Wenn Sie nach lokalen Sicherheitsgruppen im ADS suchen, müssen zwei Flags für das groupType-Attribut gesetzt werden: ADSGROUPTYPELOCALGROUP (0x00000004) ADSGROUPTYPESECURITYENABLED (0x80000000) Die Addition dieser Werte ist der Hexadezimalwert 0x80000004, Berechnet in der Dezimalzahl 2147483652 - muss dies im LDAP-Filter verwendet werden: Es ist eine völlig andere Sache, wenn Sie Filter für Attribute erstellen wollen, deren Datentypen als binäre Hex-Werte erscheinen (der entsprechende Datentyp wird oft als Octet String bezeichnet ). Wenn Sie nach solchen binären Attributen filtern, ist es obligatorisch, jedes einzelne Byte zu deklarieren, das im Hex-Code verglichen werden muss. wenn Sie für Objekte mit dem Attribut Inventar suchen Zum Beispiel, die den Wert 0x01AAF5EF hat, dann wird der entsprechende Filter wird zu lesen: (Inventory01aaf5ef) Leider ist Wildcard-Suche nicht zulässig, wenn für die binäre Suche Attribute Filtering für Bit-Felder durch LDAP-Filter verwenden Es ist auch möglich, Objekte zu finden, für die ein bestimmtes Bit entweder innerhalb eines Bitfeldes gesetzt ist oder nicht. In diesem Fall muss eine seltsam aussehende Syntax beachtet werden: ltAttribute namegt: ltBitFilterRule-IDgt: ltdecimal comparative valuegt Es gibt genau zwei BitFilterRule-IDs: Eine für bitweise AND-Vergleiche und eine für bitweise ODER-Vergleiche: LDAPMATCHINGRULEBITAND 1.2.840.113556 .1.4.803 LDAPMATCHINGRULEBITOR 1.2.840.113556.1.4.804 für das Attribut group folgende Bitmaske in ADS-Gruppenobjekte wichtig ist: ADSGROUPTYPEGLOBALGROUP 0x00000002 ADSGROUPTYPELOCALGROUP 0x00000004 ADSGROUPTYPEUNIVERSALGROUP 0x00000008 ADSGROUPTYPESECURITYENABLED 0x80000000 Ein Filter für universelle Gruppen hat für diese Objekte zu suchen, in dessen Unternehmen die 4. Attribute Niedrigstwertiges Bit gesetzt ist. Dies kann überprüft werden, indem das Attribut des Wertes 0x00000008 (dies ist das 4. Bit) in einem AND-Filter gesetzt wird: Alle universellen Gruppen: Achtung: In LDAP-Filtern muss der Hex-Wert des Bitfilters an dieser Stelle dezimal sein Also wenn alle Sicherheit (0x80000000 2147483648): Alle sicherheitsaktivierten Gruppen: Ein Beispiel für ein ODER-Filter: Wir suchen alle Benutzer, die kein Passwort benötigen (userAccountControl Wird auf 0x20 - 32 gesetzt) ​​oder deren Passwörter nie ablaufen (userAccountControl ist auf 0x10000 65536 gesetzt). Deshalb müssen wir einen Filter mit dem Wert 65568 (65536 32) erstellen: Alle Benutzer, die kein Passwort benötigen oder deren Passwörter nicht ablaufen: Bitte beachten Sie, dass die bitweise Filterung ein viel komplexeres Verfahren für einen Server ist. Aus diesem Grund sollten Sie die Verwendung der normalen Eigenkapitalkriterien berücksichtigen. Wenn man z. B. für universelle Sicherheitsgruppen können die beiden Fahnen 0x80000000 und 0x00000008 addiert werden und dann für den entsprechenden Dezimalwert 2147483656 gefiltert werden: Alle universellen Sicherheitsgruppen: Bitte beachten Sie, dass die LEX-Dialoge für die Bearbeitung von LDAP-Filtern können Sie solche Bitmap-Filter Syntaxen sehr leicht einstellen . Filtern mit Ambiguous Name Resolution (ANR) Die Ambiguous Name Resolution kann Benutzer oder Kontakte in Active Directory-Umgebungen finden, deren Namen nur teilweise bekannt sind. Dabei sind nicht nur der Objektname, sondern auch der Anzeigename, Vor - und Nachname sowie die diversen Mail-Adressen bei der Suche beteiligt. Als Outlook-Benutzer können Sie einen Blick auf die ANR-Filterung suchen, indem Sie z. Die Option Namen überprüfen, um den besten Treffer bei der Suche nach einer Adresse zu erhalten. Welche Attribute genau in die ANR-Suche integriert werden, wird durch die Attributsuche-Flags im Verzeichnisschema festgelegt. Auf diese Weise wird ein sogenannter ANR-Satz von Attributen deklariert. Folgende Attribute sind Bestandteil des ANR, der standardmäßig gesetzt ist: Relativer Distinguished Name (RDN). Dies können beispielsweise die Werte für cn sein. Oder ou. given (Vorname) sn (Nachname) display (Anzeigename) legacyExchangeDN (nach Migrationen der Exchange 5.5-Verzeichnisnamen der alten Mailbox wird hier gezeigt) Proxyaddresses (E-Mail-Adressen) physicalDeliveryOfficeName (Büroadresse) Die Syntax von ANR-Filter ist wie folgt : Alle diese Filter finden den Benutzer Foeckeler, Philipp. Die zweite ist in der Lage, Philipp Foeckeler sowie Fritz Paul zu finden. Das liegt daran, dass der ANR-Filter den Vornamen und den Nachnamen in beide Richtungen überprüft. ldapsetoption LDAPOPTSERVERCONTROLS und LDAPOPTCLIENTCONTROLS benötigen eine Liste von Steuerelementen, das bedeutet, dass der Wert ein Array von Steuerelementen sein muss. Eine Steuerung besteht aus einem OID, das die Steuerung identifiziert, ein optionaler Wert. Und ein optionales Flag für Kritikalität. In PHP wird eine Kontrolle durch ein Array mit einem Element mit dem Schlüssel oid und String-Wert und zwei optionale Elemente gegeben. Die optionalen Elemente sind Schlüsselwert mit dem Stringwert und der Schlüssel iscritical mit dem booleschen Wert. Iscritical defaults auf FALSE, wenn nicht geliefert. Weitere Informationen finden Sie unter raquo draft-ietf-ldapext-ldap-c-api-xx. txt. Siehe auch das zweite Beispiel unten. Der neue Wert für die angegebene Option. Rückgabewerte Gibt bei Erfolg TRUE zurück oder bei einem Fehler FALSE. Beispiel 1 Set-Protokollversion ltphp // ds ist eine gültige Verbindungs-Kennung für einen Verzeichnis-Server if (ldapsetoption (ds. LDAPOPTPROTOCOLVERSION. 3)) echo LDAPv3- anderes einstellen Protokollversion 3 gt Beispiel 2 Set-Server-Steuerelemente echo failed ltphp // ds ist eine gültige Verbindungs-Kennung für einen Verzeichnis-Server // ohne Wert ctrl1 Array steuern (oid gt 1.2.752.58.10.1. iscritical gt true) // iscritical auf FALSE ctrl 2 Array (oid gt 1.2.752.58.1.10. Wert gt Magic) // versuchen, beide Steuerelemente festzulegen, wenn (ldapsetoption (ds. LDAPOPTSERVERCONTROLS. array (ctrl1.ctrl2))) echo Server-Steuerelemente fehlgeschlagen gt Diese Funktion ist nur verfügbar, wenn OpenLDAP 2.xx OR Netscape Directory SDK xxldapsearch ldapsearch verwendet mdash Suche LDAP-Baum Beschreibung resource ldapsearch (Ressource linkidentifier. Zeichenfolge basedn. String-Filter-Array-Attribute, int nur_werte, int größenbegrenzung, int time, int deref) Führt die Suche nach einem gegebenen Filter im Verzeichnis mit der Reichweite von LDAPSCOPESUBTREE. Dies entspricht der Suche im gesamten Verzeichnis. Ab 4.0.5 ist es auch möglich, parallel zu suchen. Hierzu verwenden Sie als erstes Argument ein Array von Link-Bezeichnern statt eines einzigen Bezeichners. Wenn Sie don039t wollen die gleiche Basis-DN und den gleichen Filter für alle Suchvorgänge, können Sie auch ein Array von Basis-DNs und / oder ein Array von Filtern. Diese Arrays müssen dieselbe Größe haben wie das Link-Identifier-Array, da die ersten Einträge der Arrays für eine Suche verwendet werden, die zweiten Einträge für eine andere verwendet werden, und so weiter. Beim Durchführen von parallelen Suchvorgängen wird ein Array von Suchergebnis-IDs zurückgegeben, außer im Fall eines Fehlers wird der der Suche entsprechende Eintrag FALSE sein. Dies ist sehr ähnlich wie der Wert normalerweise zurückgegeben, außer dass eine Ergebnis-ID immer zurückgegeben wird, wenn eine Suche durchgeführt wurde. Es gibt einige seltene Fälle, in denen die normale Suche FALSE zurückgibt, während die parallele Suche einen Bezeichner zurückgibt. Parameter Eine LDAP-Verbindungskennung, die von ldapconnect () zurückgegeben wird. Die Basis-DN für das Verzeichnis. Der Suchfilter kann einfach oder erweiterbar sein, wobei boolesche Operatoren in dem in der LDAP-Dokumentation beschriebenen Format verwendet werden (siehe das raquo Netscape Directory SDK oder raquo RFC4515 für vollständige Informationen über Filter). Ein Array der erforderlichen Attribute, z. B. Array (quotmailquot, quotsnquot, quotcnquot). Beachten Sie, dass die quotdnquot immer unabhängig davon zurückgegeben wird, welche Attributtypen angefordert werden. Die Verwendung dieses Parameters ist wesentlich effizienter als die Standardaktion (die alle Attribute und die zugehörigen Werte zurückgibt). Die Verwendung dieses Parameters sollte daher als bewährte Verfahren angesehen werden. Sollte auf 1 gesetzt werden, wenn nur Attributtypen gewünscht werden. Wenn auf 0 gesetzt, werden beide Attributtypen und Attributwerte abgerufen, was das Standardverhalten ist. Ermöglicht es Ihnen, die Anzahl der abgerufenen Einträge zu begrenzen. Die Einstellung auf 0 bedeutet kein Limit. Dieser Parameter kann die serverseitige Voreinstellung sizelimit nicht überschreiben. Sie können es jedoch niedriger einstellen. Einige Verzeichnisserver-Hosts werden so konfiguriert, dass sie nicht mehr als eine voreingestellte Anzahl von Einträgen zurückgeben. Wenn dies auftritt, gibt der Server an, dass er nur eine partielle Ergebnismenge zurückgegeben hat. Dies geschieht auch, wenn Sie diesen Parameter verwenden, um die Anzahl der abgerufenen Einträge zu begrenzen. Legt die Anzahl der Sekunden fest, wie lange die Suche vergeht. Die Einstellung auf 0 bedeutet kein Limit. Dieser Parameter kann die serverseitige voreingestellte Zeitlimitüberschreitung nicht überschreiben. Sie können es jedoch niedriger einstellen. Legt fest, wie Aliase während der Suche behandelt werden sollen. Es kann einer der folgenden sein: LDAPDEREFNEVER - (Standard) Aliase sind nie dereferenziert. LDAPDEREFSEARCHING - Aliase sollten während der Suche dereferenziert werden, aber nicht beim Suchen des Basisobjekts der Suche. LDAPDEREFFINDING - Aliase sollten bei der Lokalisierung des Basisobjekts, aber nicht während der Suche dereferenziert werden. LDAPDEREFALWAYS - Aliase sollten immer dereferenziert werden. Rückgabewerte Gibt bei Fehler eine Suchergebnis-ID oder FALSE zurück. Das folgende Beispiel ruft die Organisationseinheit, den Nachnamen, den Vornamen und die E-Mail-Adresse für alle Personen in quotMy Companyquot ab, wobei der Nachname oder Vorname die Substring-Person enthält. Dieses Beispiel verwendet einen booleschen Filter, um dem Server mitzuteilen, nach Informationen in mehr als einem Attribut zu suchen. Beispiel 1 LDAP-Suche ltphp // ds ist eine gültige Verbindungskennung für einen Verzeichnisserver // Person ist ein ganzer oder ein Teil eines Personennamens, z. B. Jo dn oMy Company, cUS filter ((sn Person) (givenname person)) justthese array ( Mail-Adresse) sr ldapsearch (ds. Dn. Filter onlythese) Informationen ldapgetentries (ds. Sr) Echo-Info-Zähler. Einträge gt Benutzer returnedn 31 Hinweise Bereitgestellt Hinweise ltphp settimelimit (30) errorreporting (EALL) iniset (errorreporting. EALL) iniset (displayerrors. 1) // config-ldapserver svr. domain ldapuser PASSWORDHERE ldaptree OUSBSUsers ldappass Administrator, OUUsers, OUMyBusiness, DCmyDomain, DClocal verbinden // ldapconn ldapconnect (ldapserver) oder die (nicht auf LDAP-Server verbinden kann.) if (ldapconn) // Bindung an LDAP-Server ldapbind ldapbind oder sterben (Fehler zu binden versuchen (ldapconn ldapuser ldappass...): ldaperror (ldapconn )) // überprüfe verbindlich if (ldapbind) echo LDAP binde erfolgreich. LTBR / gtltbr / gt Ergebnis ldapsearch (. ldapconn ldaptree (cn).) oder sterben (Fehler in einer Suchabfrage. ldaperror (ldapconn)) Daten ldapgetentries (. ldapconn Ergebnis) // liefert alle Daten zeigen echo lth1gtDump alle datalt / h1gtltpregt printr ( Daten) echo lt / pregt // Iteration über Array und Druckdaten für jeden Eintrag echo lth1gtShow me the userslt / h1gt für (i 0 i lt data count i) // echo dn is:. Dataidn. ltbr / gt echo Benutzer:. Daten i cn 0. Ltbr / gt wenn (isset (data i mail 0)) echo Email:. Daten i Mail 0. Ltbr / gtltbr / gt else echo Email: Noneltbr / gtltbr / gt // print Anzahl der gefundenen Einträge echo Anzahl der gefundenen Artikel:. Ldapcountentries (ldapconn. Ergebnis) else echo LDAP-Bindung fehlgeschlagen. // Alles getan Sanierung ldapclose (ldapconn) gt es nützlich sein könnten hier die Betreiber aufzulisten, die arbeiten: - genaue Wert xxx Spiele - Partien Endwerte xxx xxx - Spiele beginnen Werte xxx xxx - passt Werte xxx enthält - alle Werte entspricht ( wenn gesetzt - NULLS werden nicht zurückgegeben) gtxxx - Everthing von xxx entspricht der Verzeichnis ltxxx zu beenden - passt alles oben im Verzeichnis xxx xxx - vergleicht ähnliche Einträge (nicht alle Systeme) Boolesche Operatoren für den Bau komplexer Such amp (term1) (term2) - Spiele term1 UND term2 (term1) (term2) - passend term1 OR term2 (term1) - Matches term1 amp ((term1) (term2)) ((amp (term1) (term2)) - Spiele XOR term1 term2 einige der mehr compelx Konstruktionen scheinen mit unterschiedlicher Effizienz zu arbeiten - manchmal kann es besser sein, einige der Ergebnisse mit der Suche zu filtern und in PHP weitere Filterung tun, um die internen Attribute (wie create, modifyTimestamp, etc.), die standardmäßig kommen tragen sie (. Wenn die optionalen Parameterattribute nicht gesetzt sind). Sie müssen es angeben: Um die Teilbaumsuche von der obersten DN in Active Directory auszuführen, stellen Sie sicher, dass Sie ldapsetoption () ausführen. ltphp ldaphost pdc. php. net basedn DCphp, DCnet Filter (cnJoe Benutzer) ldapuser CNJoe Benutzer, OUSales, DCphp, DCnet ldappass ldapconnect verbinden Pass (ldaphost. ldapport) oder Ausfahrt ldapsetoption (gtgtCould zu LDAP serverltlt nicht verbinden) (verbinden. LDAPOPTPROTOCOLVERSION. 3) ldapsetoption (verbinden. LDAPOPTREFERRALS. 0) binden ldapbind (verbinden. ldapuser. ldappass) oder Ausgang (gtgtCould binden nicht LTLT) lesen ldapsearch zu ldaphost (verbinden. basedn. Filter) oder Ausgang (gtgtUnable ldap serverltlt) info ldapgetentries zu suchen ( Verbinden) lesen echo info count. Einträge returnltpgt ii 0 für (i 0 ii lt info i count ii) Daten info i ii echo data. : Ampnbspampnbsp. Info i Daten 0. ltbrgt ldapclose (verbinden) gt Um die Suche auf Windows 2003 Server Active Directory Sie die LDAPOPTREFERRALS Option auf 0 setzen müssen, um auszuführen: ldapsetoption (ldap, LDAPOPTREFERRALS, 0) Ohne dies wird Sie Operations Fehler, wenn Sie versuchen, das zu suchen, Ganze AD-Schema (mit Root der Domäne als eine basedn). Im Gegensatz zu Windows 2000 Server, wo diese Option optional war und nur die Leistung erhöht. Ich habe an einem Skript, wo ich brauchte, um alle Benutzer, die Mitglied einer bestimmten MS-AD-Gruppe waren zu arbeiten. Wegen des PHP-Bugs 42060 (bugs. php. net/bug. phpid42060) konnte ich nicht alle Benutzer zurück erhalten, die Mitglied der Gruppe waren. Nach googeln für einen Tag fand ich einen Artikel und ein Patch, aber es erfordert, dass ich den Quellcode für php 5.1.6 oder 5.2.10 heruntergeladen und führen Sie das Patch und als rekompilieren Sie den Code, um das Problem zu beheben. Problem war 1) Ich bin nicht ein Linux goeroe, so war ich nicht sehr komfortabel, dies zu tun. 2) Ich verwende das Skript auf einer Produktionsmaschine mit anderen Code mit PHP und wusste nicht, was die Konsequenz für diesen Code Biene würde. 3) Ich konnte nicht aktualisieren PHP mehr, weil in neueren Versionen dieser Patch würde wahrscheinlich nicht mehr funktionieren. Aber gestern sah ich das Licht und schrieb einige Code, um dieses Problem zu umgehen, vielleicht können andere Leute es verwenden, die das gleiche Problem haben. ltPHP Startfilter (amp (memberOf. ADGROUP.)) startResults ldapsearch (ldapconnect. totzukriegen. Startfilter. attr) countResult ldapcountentries (ldapconnect. startResults) IF (countResult 1000 oder countResult 1500) // Schleife Trog die Nummer 97-122 (ASCII-Nummer für die Zeichen az) Für (a 97 a lt 122 a) // die Nummer zu einem Zeichen Zeichen chr (a) übersetzen // die neuen Suchfilter withs gibt alle Benutzer mit einem Nachnamen mit Zeichenfilter (amp (sn Zeichen beginnen) (memberOf ADGROUP)) ergibt ldapsearch (ldapconnect. totzukriegen. Filter. attr) countResult2 ldapcountentries (ldapconnect. Ergebnisse) // sehen Sie, wenn die Suche für alle Benutzer mit einem bestimmten Zeichen beginnen immer noch die Suche Grenze trifft // wenn ja, als einen neuen zu tun Suche alle Benutzer zu finden, wo der letzte Name beginnt mit aa und // als mit ab, ac usw. usw. // im besten Fall haben wir jetzt 675,324 Benutzer pro Gruppe finden können, wenn die Suche Grenze beträgt 1000 // ((26 999 für die Faust-Zeichen) 26 für das zweite Zeichen) // und 1.013.324, wenn die Suche Grenze 1500 Falls (countResult2 1000 oder countResult2 1500) für (b 97 b lt 122 b) Zeichen2 chr (b) filter2 (amp (sn Charactercharacter2) (memberOf ADGroup)) Ergebnisse2 ldapsearch (ldapconnect. Nutzerbasis. Filter2. Attr) count2 ldapcountentries (ldapconnect. resultate2) Einträge2 ldapgetentries (ldapconnect. resultate2) // mache deine Sache Else-Einträge ldapgetentries (ldapconnect. resultate) // mache deine anderen Einträge ldapgetentries (ldapconnect. StartResults) // mach dein Ding gt


No comments:

Post a Comment