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-Key: 181716

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

Printed on: April 18, 2024 at 11:04 o'clock

Member: emeriks
emeriks Mar 11, 2012 at 13:40:03 (UTC)
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)";   
Member: Jeeroy
Jeeroy Mar 12, 2012 at 08:33:47 (UTC)
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.
Member: emeriks
emeriks Mar 12, 2012 at 08:42:13 (UTC)
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?
Member: Jeeroy
Jeeroy Mar 12, 2012 at 08:51:24 (UTC)
Goto Top
Zitat von @emeriks:
Hm...? Was ist das für ein Verzeichnisdienst?

Novell eDirectory.
Member: Jeeroy
Jeeroy Mar 12, 2012 at 10:11:26 (UTC)
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?
Member: emeriks
emeriks Mar 12, 2012 at 10:15:11 (UTC)
Goto Top
versuche mal

$filter_cn = "(&(objectClass=Workstation)(!(cvStatus=success)))";  
Member: Jeeroy
Jeeroy Mar 12, 2012 at 10:33:20 (UTC)
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!