php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 26.07.2011, 17:35  
Neuer Benutzer
 
Registriert seit: 26.07.2011
Beiträge: 6
PHP-Kenntnisse:
Fortgeschritten
bn.One befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] LDAP_search fehler bei Suche auf "Toplevel"?

Hallo Leute,

ich habe ein Skript geschrieben, welches einen User an einer Domäne authentifiziert und anschließend bestimmte, benötigte Daten des Users abfragt - z.B. company.

Da es sich im Produktivbetrieb aber um rund 6 verschiedene Windows 2003/2008 Domänen handelt, die alle unterschiedlich strukturiert sind, kommt es zu Fehlern bei der Search bzw. List Abfrage. Ldap_connect sowie ldap_bind funktionieren.

Bsp:
PHP-Code:
$this->connectid = @ldap_connect$this->server$this->port
    or die(
"Keine Verbindung zum Domaincontroller {$this->server}:{$this->port} möglich");
        
$binding = @ldap_bind$this->connectid$this->username$this->password);
$this->error.= ldap_error($this->connectid); 
//gibt success zurueck
        
$search = @ldap_search$this->connectid$this->basedn$this->filter);
$this->error.= ldap_error($this->connectid); 
//gibt operations Error zurueck, wenn userobjekt tiefer als 1 unterebene zu $this->basedn angelegt ist 
Ich konnte die Ursache bereits eingrenzen, dass ich immer dann einen Fehler erhalte, wenn ich als baseDN einen Pfad angebe der 2 Ebenen oder mehr über dem Userobjekt liegt. Da es Windows DC's sind, habe ich allerdings keinen Einfluss auf den LDAP_SCOPE_SUBTREE, der hier offenbar 1 ist (lt. http://de3.php.net/manual/de/function.ldap-search.php).

Beispiel:
als $this->baseDN definiere ich DC=meinedn,DC=local und der User liegt aber unter OU=benutzer,OU=Gruppe1,OU=StandortXY,DC=meinedn,DC =local

Hier drückt der Schuh!

Da ich nie weiß, wie meine OU mit den Usern lautet und es in einer der Domänen sogar viele OU's im Toplevel mit den Benutzern gibt, habe ich mir folgenden Workaround ausgedacht:

Ich scanne die OU's rekursiv durch, bis mir ein search mit dem Filter company=XYZ etwas zurückgibt. Afaik kein Problem, doch...

Auch hier bekomme ich einen operations Error, wenn meine baseDN aufs Root-Verzeichnis zeigt (DC=meinedn,DC=local). Scanne ich hingegen mit dem $this->basedn Wert OU=StandortXY,DC=meinedn,DC=local, dann erhalte ich einen schönen Array mit allen Filterregeln entsprechenden OU's zurück. wtf?!

Kennt jemand das "Phänomen" und kann mir jmd. bitte Tipps geben, wie ich dieses Dilemma angehen und ggf. lösen kann?
Thx schonmal und sry für den langen Text.

Noch für die, die es interessiert meine "gebastelte" LDAP-Klasse:

PHP-Code:
class ldap {
    public  
$user     = array();
    public    
$entries= array();
    private 
$connectid NULL;
    private 
$basedn NULL;
    private 
$server NULL;
    private 
$username NULL;
    private 
$password NULL;
    private 
$port NULL;
    private 
$filter NULL;
    public     
$error NULL;
    
    public function 
__construct() {
    
    }
    
    private function 
connect () {
        
$this->connectid = @ldap_connect$this->server$this->port
            or die(
"Keine Verbindung zum Domaincontroller {$this->server}:{$this->port} möglich");
        
        
$binding = @ldap_bind$this->connectid$this->username$this->password);
        
$this->error.= ldap_error($this->connectid) ." ldap_bind: \r\n User: {$this->username} \r\n Server:{$this->server}\r\n<br />\r\n<br />";
        
        
$search = @ldap_search$this->connectid$this->basedn$this->filter);
        
$this->error.= ldap_error($this->connectid) ." ldap_search: \r\n BaseDN: {$this->basedn} \r\n Filter: {$this->filter}\r\n<br />\r\n<br />";
        
        return ( 
$binding && ( @ldap_count_entries$this->connectid$search) > 0)) ? @ldap_get_entries$this->connectid$search) : NULL;
    }

    public function 
auth ($user$pass$domain$server NULL$port "389") {
        if (
strpos($domain'.'))
            
$this->basedn  "dc="str_replace("."",dc="$domain); //DC wird vom DNS-Server aufgelöst
        
$this->server     = (($server) ? $server $domain);
        
$this->username "{$user}@{$domain}"
        
$this->password $pass;
        
$this->port $port;
        
$this->filter "(&(objectClass=user)(objectCategory=person)(sAMAccountName={$user}))"
        
$this->user $this->connect();
        return (
$this->user) ? 0;
    }

bn.One ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PHP Suche Hans_PHP_11 PHP Einsteiger 7 21.04.2011 11:26
google Suche - Beschreibung - Fehler Susum PHP Einsteiger 8 18.04.2011 17:20
Fehler bei der Suche nach \ oder ' choice PHP Einsteiger 2 14.02.2011 20:00
[Erledigt] Suche Fehler im REGEX Lollix PHP Einsteiger 3 09.01.2011 19:50
[Erledigt] Fehler suche TommyTom Datenbanken 3 07.01.2011 23:11
Funktion rename() auf USB-Festplatten bringt Fehler Wing PHP Tipps 2010 13 16.07.2010 23:00
Suche ohne Groß-/Kleinschreibung pfump Datenbanken 11 30.05.2010 10:13
Weiße Seite (Fehler suche wie anpacken?) Tobi1970 PHP Tipps 2009 9 05.01.2010 23:59
[Erledigt] Syntax Error - Wo ist der Fehler? Extremefall PHP Tipps 2009 5 14.12.2009 17:46
Suche Alienuser PHP Tipps 2006 5 02.07.2006 16:31
[Erledigt] Erweiterung der Suche PHP Tipps 2007 2 01.12.2005 19:30
Frage: Suche Fehler in diesem Script... PHP Tipps 2005-2 14 25.10.2005 19:24
Fehler suche Mail Formular PHP Tipps 2005-2 7 11.08.2005 23:26
mal wieder eine suche lomtas Datenbanken 0 12.07.2005 11:03

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
ldap_search, n to server null:389, ldap_saerch php, ldap_search php, ldap_search php operations error, ldap_search example, ldap_search ou php

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:01 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum