jeeroy
Goto Top

Wie kann ich eine LDAP suche machen in jedem verzeichniss nur nicht in einem.

Hallo Leute,

ich möchte eine Ldap Abfrage nach allen Workstations machen, und das auf dem Kompletten server nur nicht in einem Verzeichniss, dass soll aus der Suche ausgeschlossen werden.

Meine Bisherige Abfrage sieht so aus:

$attr_cn = array("*");  
$filter_cn = "(objectClass=Workstation)";  
$ldap_search_cn = ldap_search($ldap_con, "o=Server", $filter_cn, $attr_cn) or die ("<p>Ging leider schief!</p>");  
$ldap_result_cn = ldap_get_entries ($ldap_con, $ldap_search_cn);

Nun habe ich als Suchort ja den Baum Server angegeben (o=server) möchte da auch überall suchen, jedoch soll in dem verzeichniss "ou=PO,ou=REGION,o=Server" nicht gesucht werden.

Wie grenze ich das nun aus?

Danke für eure Hilfe!

Content-ID: 181716

Url: https://administrator.de/contentid/181716

Ausgedruckt am: 22.11.2024 um 21:11 Uhr

emeriks
emeriks 11.03.2012 um 14:40:03 Uhr
Goto Top
"objectClass=Workstation" geht auch? Ich dachte immer, dass müsste "objectClass=Computer" lauten?

Ferner muss es sicher "ou=Server" lauten.

Du möchtest also eine rekursive Suche durch alle Sub-OU's machen und dabei aber eine Sub-OU auslassen?
Das ginge höchstens per Filter auf dem DN. Da man aber meines Wissen im DN nicht mit Wildcards suchen kann (also z.B. nach "*,ou=PO,ou=REGION,o=Server,..." kannst Du entweder zweimal suchen, beim zweiten Mal mit dieser OU als Basis und dann das Ergebnis aus der ersten Suche rausrechnen, oder Du verpasst allen Computer-Objekten in dieser OU ein bestimmtes Attribut, nach welchem Du dann filterst.

1. Beispiel:
Alle Computer der OU "PO" bekommen im Betreff einen String der mit "PO: " anfängt. Dann könnter er Filter so aussehen:
$filter_cn = "(objectClass=Computer)(!description=PO:*)"  

2. Beispiel
Du verwendest die bei Computer-Objekten die ungenutzten Attribute "extensionAttribute1" bis "...15", legts dort einen bestimmten Wert rein und filterst danach:
z.B. in OU "PO" haben alle Computerobjekte als "extensionAttribute1" den Wert "auslassen". Dann könnte der Filter so aussehen:
$filter_cn = "(objectClass=Computer)(!extensionAttribute1=auslassen)";   
Jeeroy
Jeeroy 12.03.2012 um 09:33:47 Uhr
Goto Top
Hey emeriks,

ich danke für deine Antwort!
Es gibt sogar echt ein Attribute, was bei diesen Workstations immer hinterlegt ist, ich werde es so probieren wie du geschrieben hast und dieses Attribute ausklammer.

PS: Bei uns geht es auch mit Workstations und es lautet bei uns ou=Norden, o=Server ;)!

Ich gebe Rückmeldung, sobald ich es probiert habe.
emeriks
emeriks 12.03.2012 um 09:42:13 Uhr
Goto Top
Zitat von @Jeeroy:
PS: Bei uns geht es auch mit Workstations und es lautet bei uns ou=Norden, o=Server ;)!

Hm...? Was ist das für ein Verzeichnisdienst?
Jeeroy
Jeeroy 12.03.2012 um 09:51:24 Uhr
Goto Top
Zitat von @emeriks:
Hm...? Was ist das für ein Verzeichnisdienst?

Novell eDirectory.
Jeeroy
Jeeroy 12.03.2012 um 11:11:26 Uhr
Goto Top
Hey emeriks,

habe nun ein das Attribut, bei jedem Computer der ausgeklammert werden soll (Attributname = cvStatus).
Jeder der ausgeklammert werden soll hat bei dem Attribut cvStatus den Wert success.

Den Filter habe ich deswegen nun so umgeschrieben:

$filter_cn = "(&(objectClass=Workstation)(!cvStatus=success))";  

Bekomme jedoch nun eine Fehler Meldung:

ldap_search() [function.ldap-search]: Search: Bad search filter in PFAD on line 30

Alson das der Filter Falsch ist, weißte warum?
emeriks
emeriks 12.03.2012 um 11:15:11 Uhr
Goto Top
versuche mal

$filter_cn = "(&(objectClass=Workstation)(!(cvStatus=success)))";  
Jeeroy
Jeeroy 12.03.2012 um 11:33:20 Uhr
Goto Top
Sehr gut, das funktioniert, habe ich da noch die Klammern vergessen..
Nun habe ich zwar das Problem, dass

Fatal error: Maximum execution time of 30 seconds exceeded

Aber das werde ich auch gelöst bekommen ;) Danke dir!