Page 1 of 1

LDAP SBS win2k3

Posted: Sat May 19, 2012 4:40 pm
by andi1000
Hallo,

ich habe mal eine Frage für DAUs. Ich blicks mal wieder nicht. Ich habe einen Server 2k8R2 auf dem läuft mein Mailserver(nicht M$) und jetzt auch das FAQ.
Beim Mailserver war es ganz einfach die LDAP Anbindung zu erstellen, beim FAQ kapier ichs nicht....
Der Server auf dem das FAQ läuft ist selbst nicht in der Domain, der DC ist ein SBS 2k3.

In der ldap.php habe folgendes eingetragen, die ldap_const habe ich unverändert gelassen. In der Console habe ich das LDAP aktiviert und danach ca 30x den server neu gestartet....

<?php
// Main LDAP server
$PMF_LDAP['ldap_server'] = 'ip';
$PMF_LDAP['ldap_port'] = '389';
$PMF_LDAP['ldap_user'] = Admin-User';
$PMF_LDAP['ldap_password'] = 'Admin-User-Passwort';
$PMF_LDAP['ldap_base'] = 'OU=MyBusiness'

Was mache ich falsch? Später soll dann noch SSO aktiviert werden und das FAQ ohne Anmeldung gar nix anzeigen. Aber ich fürchte wenn ich jetzt schon scheitere, dann wirds mit dem anderen gar nix.
Vielen Dank schon jetzt!
Andreas

Re: LDAP SBS win2k3

Posted: Sun May 20, 2012 10:23 am
by Thorsten
Hi,

welcher Fehler erscheint denn? Das hast du leider nicht geschrieben...

bye
Thorsten

Re: LDAP SBS win2k3

Posted: Sun May 20, 2012 8:09 pm
by andi1000
Hallo Thorsten,

es passierte einfach gar nix. Mittlerweile habe ich herausgefunden, dass die php_ldap.dll noch ins ext Verzeichnis muss und zwei andere Dateien und dann die extension akktiviert werden muss.
Das habe ich nun auch versucht, aber leider ist immer wenn ich in der php.ini die ldap extension aktiviere der webserver nicht mehr startbereit.
Also es kommt dann keine Fehlermeldung, aber es kommen nur weiße webseiten ohne Inhalt auch ne phpinfo Seite klappt dann nicht mehr.
Der webserver verwendet php 5.35 in der vc9 Version, die passende php_ldap.dll habe ich auch herunter geladen, aber es gelingt mir nicht.
Bei der php_sqlite.dll hat es relativ einfach so funktioniert. Die vorhandene aktive php_pdo_sqlite.dll wurde nicht erkannt, also musste ich die nicht_pdo sqlite noch hinzufügen.
Diese libeasy und ssl... sind in meinem php Verzeichnis eigentlich schon drin, aber als phpeasy.dll oder so ähnlich, nützen aber auch nix.
Es ist zum verrückt werden.
Ich glaube ich werd mir da mal wieder nen Programmierer kaufen müssen, der das Ding zum Laufen bringt. Warum gibt es für uns Daus nicht einfache Installer die alles mitbringen und automatisch einrichten. Immer muss alles mögliche extern bereitgestellt werden und zig Bedingungen erfüllen. Frust!
Grüßle
Andreas

Re: LDAP SBS win2k3

Posted: Sun May 20, 2012 8:57 pm
by Thorsten
Hi,

das sieht eher nach PHP- als phpMyFAQ-Problemen aus... ohne genauere Infos kann ich da leider nicht helfen....

bye
Thorsten

Re: LDAP SBS win2k3

Posted: Sat May 26, 2012 11:06 am
by andi1000
So hallo nochmal,

jetzt bin ich ein Stückchen weiter - aber noch keine Lösung. Mein php läuft jetzt mit der ldap Erweiterung, es fehlte noch die libsasl.dll. Obwohl die lt. php.net eigentlich nicht mehr nötig wäre....
Naja egal eine dll mehr oder weniger macht den Server auch nciht unsicherer.
Mein Problem ist aber, dass immer noch keine Anfrage beim meinem DC/AD Server aus der faq ankommt. Nehme ich dieselben Daten aber in die ldp.exe, dann bekomme ich die treeview dort wie erwartet und auch einen log-Eintrag auf dem DC in dem Sicherheitslog über die Nutzeranmeldung.
Das log auf dem AD-Server bleibt aber absolut unberührt bei einem Anmeldeversuch aus der faq und in der faq heißt es "User Passwort ungültig".
Gibt es irgendwie eine log Möglichkeit auf dem faq-Server oder von der faq selbst wo man sieht was passiert bzw. was eben nicht?
Grüßle
Andreas

Update:
Ich habe jetzt von http://www.serverhowto.de ein Beispielscript in den faq Ordner kopiert und mit denselben Infos gefüttert wie die faq. Das Beispielscript hat fehlerfrei funktioniert. Also muss es wohl doch irgendwo innerhalb der faq oder dem Setup der faq bei mir ein Problem geben.
Angehängt mal das Beispielscript, ich sehe da auch keinen Unterschied zu den Einträgen/Funktionen in der faq, außer dass dort kein Port übergeben wird und das "ldap://" habe ich mal weggelassen - klappte auch.
In dem ldap.php der faq habe ich gesehen, dass dorch irgendwo ein Fehlerlog angelegt wird/werden kann - aber ich finde es nicht.

Code: Select all

<?php

echo "<html><head>";
echo "<title>LDAP-Zugriff auf ein Active Directory</title>";
echo "</head><body>";

// *** Parameter für den LDAP-Zugriff ***
// Adresse des Domänencontrollers:
$ldap_server = "ldap://192.168.200.100";
// Konto für den Zugriff:
$auth_user = "Administrator@test.local";
$auth_pass = "admin";

// Mit Server verbinden:
if (!($connect=@ldap_connect($ldap_server))) {
	die("Keine Verbindung zum Verzeichnis-Server möglich.");
}
// Diese Parameter sind nötig für den Zugriff auf ein Active Directory:
ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($connect, LDAP_OPT_REFERRALS, 0);

// An Server binden:
if (!($bind=@ldap_bind($connect, $auth_user, $auth_pass))) {
   die("Bind fehlgeschlagen.");
}

// BaseDN festlegen:
$base_dn = "OU=Benutzer,DC=test,DC=local";
// LDAP filter setzen: Nur Kontakt- und Benutzer-Objekte sollen zurückgegeben werden
$filter = "(|(objectClass=contact)(objectClass=user))";

// Suche starten:
if (!($search=@ldap_search($connect,$base_dn,$filter))) {
     die("Durchsuchen des LDAP-Servers fehlgeschlagen.");
}
$anzahl = ldap_count_entries($connect,$search);
// Ergebnis der Suche in der Variablen $info ablegen:
$info = ldap_get_entries($connect, $search);

// Nur die relevanten Teile des $info-Arrays in ein $ergebnis-Array übernehmen:
// (Verbessert die Übersichtlichkeit)
// Hinweis: utf8_decode dekodiert Umlaute richtig.
for ($i=0; $i<$anzahl; $i++) {
    $ergebnis[$i]["objectclass"]    = $info[$i]["objectclass"][3];
    $ergebnis[$i]["displayname"]    = utf8_decode($info[$i]["displayname"][0]);
    $ergebnis[$i]["givenname"]      = utf8_decode($info[$i]["givenname"][0]);
    $ergebnis[$i]["sn"]             = utf8_decode($info[$i]["sn"][0]);
    $ergebnis[$i]["mail"]           = $info[$i]["mail"][0];
    $ergebnis[$i]["telephonenumber"]= $info[$i]["telephonenumber"][0];
    // Der distinguishedName, also z.B. CN=blub,OU=...,DC=test,DC=local
    // soll dazu verwendet werden, aus den OU-Angaben die Abteilung
    // zu erzeugen:
    $ergebnis[$i]["abteilung"]		= erzeuge_abteilung($info[$i][dn]);
}

// Array alphabetisch sortieren, usort erwartet dazu eine Vergleichsfunktion:
usort($ergebnis, 'vergleich');

// Array $ergebnis in einer Tabelle ausgeben:
echo "<table border=0>";
for ($i=0; $i<$anzahl; $i++) {
    echo "<tr>";
    echo "<td width=200>" . $ergebnis[$i]["displayname"] . "</td>";
    echo "<td width=200>" . $ergebnis[$i]["abteilung"] . "</td>";
    /*
    if (empty($ergebnis[$i]["mail"]))
        echo "<td width=200> - </td>";
    else
        echo "<td width=200>	" . $ergebnis[$i]["mail"] . "</td>";
    */
    if (empty($ergebnis[$i]["telephonenumber"]))
        echo "<td width=100> - </td>";
    else
        echo "<td width=100>" . $ergebnis[$i]["telephonenumber"] . "</td>";
    echo "</tr>";
}
echo "</table>";

echo "</body></html>";




function erzeuge_abteilung ($dn) {
	// $dn ist z.B.: CN=blub,OU=Nord,OU=Verkauf,OU=Benutzer,DC=test,DC=local
    $pos = strpos($dn, ',DC=');
    $dn = substr($dn, 0, $pos);
    // -> $dn: CN=blub,OU=Nord,OU=Verkauf,OU=Benutzer
    $pos = strpos($dn, ',OU=');
    $dn = substr($dn, $pos);
    // -> $dn: ,OU=Nord,OU=Verkauf,OU=Benutzer

    $abteilung = "";
    $abteilungen = explode(',OU=', $dn);
	// -> $abteilungen: Nord, Verkauf, Benutzer
    for ($j = count($abteilungen)-1; $j > 0; $j--) {
    	$abteilung = $abteilung . "-" . $abteilungen[$j];
    }
    // -> $abteilung: - Benutzer - Verkauf - Nord
	$abteilung = substr($abteilung, 1);
    // -> $abteilung: Benutzer - Verkauf - Nord
    return $abteilung;
}

function vergleich($wert_a, $wert_b)
{
  // Sortierung nach dem displayname
  $a = $wert_a["displayname"];
  $b = $wert_b["displayname"];
  if ($a == $b) {
      return 0;
  }
 return ($a < $b) ? -1 : +1;
}

?>

Re: LDAP SBS win2k3

Posted: Mon May 28, 2012 1:37 pm
by Thorsten
Hi,

der Code von phpMyFAQ macht auch nix anderes... LDAP ist im Adminbereich aktiv?

bye
Thorsten

Re: LDAP SBS win2k3

Posted: Mon May 28, 2012 2:32 pm
by andi1000
Hallo Thorsten,

ja der Haken ist gesetzt. Ich habe es schon ein paar mal ab und wieder angewählt, den ganzen Server neu gestartet - aber nix hat geholfen.
Ich habe es auch schon mit einem Domänen Admin Account versucht, aber wie gesagt, im AD-Server-Log kommt gar kein Zeichen einer Anfrage an.

Wie kann ich denn die Fehlereinträge sehen? In den einzelnen Scripten sind ja immer Variablen, welche im fehlerfall gefüllt werden, nur keine Ahnung wo das endet. In der GUI finde ich kein Log und als Datei auch keine Aufzeichnung.
Grüße
Andreas

Re: LDAP SBS win2k3

Posted: Tue May 29, 2012 2:24 pm
by Thorsten
Hi,

mach mal den DEBUG Modus in inc/Init.php an

bye
Thorsten

Re: LDAP SBS win2k3

Posted: Tue May 29, 2012 4:27 pm
by andi1000
Hallo Thorsten,

ja jetzt mein Monitor voll mit Meldungen rund um ldap...

phpMyFAQ warning [2]: ldap_connect() expects parameter 2 to be long, string given in C:\Program Files (x86)\web\html\phpmyfaq\inc\Ldap.php on line 100
phpMyFAQ warning [2]: ldap_error() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\web\html\phpmyfaq\inc\Ldap.php on line 104
phpMyFAQ warning [2]: ldap_errno() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\web\html\phpmyfaq\inc\Ldap.php on line 106
phpMyFAQ warning [2]: ldap_set_option(): supplied argument is not a valid ldap link resource in C:\Program Files (x86)\web\html\phpmyfaq\inc\Ldap.php on line 112
phpMyFAQ warning [2]: ldap_errno() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\web\html\phpmyfaq\inc\Ldap.php on line 113
phpMyFAQ warning [2]: ldap_error() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\web\html\phpmyfaq\inc\Ldap.php on line 118
phpMyFAQ warning [2]: ldap_set_option(): supplied argument is not a valid ldap link resource in C:\Program Files (x86)\web\html\phpmyfaq\inc\Ldap.php on line 112
phpMyFAQ warning [2]: ldap_errno() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\web\html\phpmyfaq\inc\Ldap.php on line 113
phpMyFAQ warning [2]: ldap_error() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\web\html\phpmyfaq\inc\Ldap.php on line 118
phpMyFAQ warning [2]: ldap_bind() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\web\html\phpmyfaq\inc\Ldap.php on line 126
phpMyFAQ warning [2]: ldap_errno() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\web\html\phpmyfaq\inc\Ldap.php on line 130
phpMyFAQ warning [2]: ldap_error() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\web\html\phpmyfaq\inc\Ldap.php on line 133
phpMyFAQ warning [2]: ldap_search(): supplied argument is not a valid ldap link resource in C:\Program Files (x86)\web\html\phpmyfaq\inc\Ldap.php on line 214
phpMyFAQ warning [2]: ldap_errno() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\web\html\phpmyfaq\inc\Ldap.php on line 217
phpMyFAQ warning [2]: ldap_error() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\web\html\phpmyfaq\inc\Ldap.php on line 220
phpMyFAQ warning [2]: ldap_first_entry() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\web\html\phpmyfaq\inc\Ldap.php on line 223
phpMyFAQ warning [2]: ldap_errno() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\web\html\phpmyfaq\inc\Ldap.php on line 226
phpMyFAQ warning [2]: ldap_error() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\web\html\phpmyfaq\inc\Ldap.php on line 228
phpMyFAQ warning [2]: ldap_get_values() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\web\html\phpmyfaq\inc\Ldap.php on line 231

Re: LDAP SBS win2k3

Posted: Tue May 29, 2012 4:32 pm
by Thorsten
Hi,

mach mal bitte in die config/ldap.php das rein:

Code: Select all

$PMF_LDAP['ldap_port'] = 389;
bye
Thorsten

Re: LDAP SBS win2k3

Posted: Tue May 29, 2012 4:39 pm
by andi1000
Hallo Thorsten,

jetzt klappt es.
Die Fehlermedlung besagte ja, dass der Port als Long erwartet wird und nicht als String wie das leere Template glauben machte (durch die '').
Nachdem ich das geändert habe, hat sich das Script noch an den beiden optional zusätzlichen LDAP Servern gestört. Egal ob ich NULL oder 0 oder nichts als Port eingetragen habe - es hieß immer "so kann ich kein Arry bilden". Also habe ich die beiden Einträge für die optionalen LDAP Server einfach ersatzlos gestrichen (in ...config\ldap.php.

In der ..config\constant_ldap steht die ganze Zeit "multiple LDAP" auf "false", trotzdem wollt er ein Array aufbauen.... Das Arrys scheint ein String Array zu sein, die Funktion erwartet jedoch ein long als Port - das ist der Haken!

Jetzt klappts.

Danke für den Debug-Tip, sowas hatte ich gesucht.
Grüße
Andreas

Re: LDAP SBS win2k3

Posted: Tue May 29, 2012 4:42 pm
by Thorsten
Hi,

ist aber interessant... bei vielen anderen funktioniert das so...

bye
Thorsten

Re: LDAP SBS win2k3

Posted: Tue May 29, 2012 4:48 pm
by andi1000
Hmm,

dann verstehe das wer will. Ich kenn mich in php leider nicht so aus....

Hier noch die Fehlermeldungen die im Debug kommen, wenn der Port im ersten Eintrag numerisch ist und die anderen beiden in der ...config\ldap.php einfach leer drin stehen und "multiple LDAPs auf "false" ist:

phpMyFAQ warning [2]: Cannot use a scalar value as an array in C:\Program Files (x86)\IceWarp\html\phpmyfaq\config\ldap.php on line 12
phpMyFAQ warning [2]: Cannot use a scalar value as an array in C:\Program Files (x86)\IceWarp\html\phpmyfaq\config\ldap.php on line 18

Zeile 12 und 18 sind die Port Angaben für die beiden weiteren LDAP Server.
Aber danke für den Support! Jetzt kann ich weiter "spielen" und die FAQ Inhalte aufbauen.
Andreas

PS: Vielleicht als Hilfe: die FAQ läuft auf win2k8 R2(64-bit) mit php 5.3.5. Bei Win 64-bit ist manches anders...

Re: LDAP SBS win2k3

Posted: Tue May 29, 2012 4:50 pm
by Thorsten
Hi,

ich gucks mir an!

bye
Thorsten

Re: LDAP SBS win2k3

Posted: Thu Nov 29, 2012 8:36 pm
by Mumanor
andi1000 wrote:
Update:
Ich habe jetzt von http://www.serverhowto.de ein Beispielscript in den faq Ordner kopiert und mit denselben Infos gefüttert wie die faq. Das Beispielscript hat fehlerfrei funktioniert. Also muss es wohl doch irgendwo innerhalb der faq oder dem Setup der faq bei mir ein Problem geben.
Angehängt mal das Beispielscript, ich sehe da auch keinen Unterschied zu den Einträgen/Funktionen in der faq, außer dass dort kein Port übergeben wird und das "ldap://" habe ich mal weggelassen - klappte auch.
In dem ldap.php der faq habe ich gesehen, dass dorch irgendwo ein Fehlerlog angelegt wird/werden kann - aber ich finde es nicht.

Code: Select all

<?php

echo "<html><head>";
echo "<title>LDAP-Zugriff auf ein Active Directory</title>";
echo "</head><body>";

// *** Parameter für den LDAP-Zugriff ***
// Adresse des Domänencontrollers:
$ldap_server = "ldap://192.168.200.100";
// Konto für den Zugriff:
$auth_user = "Administrator@test.local";
$auth_pass = "admin";

// Mit Server verbinden:
if (!($connect=@ldap_connect($ldap_server))) {
	die("Keine Verbindung zum Verzeichnis-Server möglich.");
}
// Diese Parameter sind nötig für den Zugriff auf ein Active Directory:
ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($connect, LDAP_OPT_REFERRALS, 0);

// An Server binden:
if (!($bind=@ldap_bind($connect, $auth_user, $auth_pass))) {
   die("Bind fehlgeschlagen.");
}

// BaseDN festlegen:
$base_dn = "OU=Benutzer,DC=test,DC=local";
// LDAP filter setzen: Nur Kontakt- und Benutzer-Objekte sollen zurückgegeben werden
$filter = "(|(objectClass=contact)(objectClass=user))";

// Suche starten:
if (!($search=@ldap_search($connect,$base_dn,$filter))) {
     die("Durchsuchen des LDAP-Servers fehlgeschlagen.");
}
$anzahl = ldap_count_entries($connect,$search);
// Ergebnis der Suche in der Variablen $info ablegen:
$info = ldap_get_entries($connect, $search);

// Nur die relevanten Teile des $info-Arrays in ein $ergebnis-Array übernehmen:
// (Verbessert die Übersichtlichkeit)
// Hinweis: utf8_decode dekodiert Umlaute richtig.
for ($i=0; $i<$anzahl; $i++) {
    $ergebnis[$i]["objectclass"]    = $info[$i]["objectclass"][3];
    $ergebnis[$i]["displayname"]    = utf8_decode($info[$i]["displayname"][0]);
    $ergebnis[$i]["givenname"]      = utf8_decode($info[$i]["givenname"][0]);
    $ergebnis[$i]["sn"]             = utf8_decode($info[$i]["sn"][0]);
    $ergebnis[$i]["mail"]           = $info[$i]["mail"][0];
    $ergebnis[$i]["telephonenumber"]= $info[$i]["telephonenumber"][0];
    // Der distinguishedName, also z.B. CN=blub,OU=...,DC=test,DC=local
    // soll dazu verwendet werden, aus den OU-Angaben die Abteilung
    // zu erzeugen:
    $ergebnis[$i]["abteilung"]		= erzeuge_abteilung($info[$i][dn]);
}

// Array alphabetisch sortieren, usort erwartet dazu eine Vergleichsfunktion:
usort($ergebnis, 'vergleich');

// Array $ergebnis in einer Tabelle ausgeben:
echo "<table border=0>";
for ($i=0; $i<$anzahl; $i++) {
    echo "<tr>";
    echo "<td width=200>" . $ergebnis[$i]["displayname"] . "</td>";
    echo "<td width=200>" . $ergebnis[$i]["abteilung"] . "</td>";
    /*
    if (empty($ergebnis[$i]["mail"]))
        echo "<td width=200> - </td>";
    else
        echo "<td width=200>	" . $ergebnis[$i]["mail"] . "</td>";
    */
    if (empty($ergebnis[$i]["telephonenumber"]))
        echo "<td width=100> - </td>";
    else
        echo "<td width=100>" . $ergebnis[$i]["telephonenumber"] . "</td>";
    echo "</tr>";
}
echo "</table>";

echo "</body></html>";




function erzeuge_abteilung ($dn) {
	// $dn ist z.B.: CN=blub,OU=Nord,OU=Verkauf,OU=Benutzer,DC=test,DC=local
    $pos = strpos($dn, ',DC=');
    $dn = substr($dn, 0, $pos);
    // -> $dn: CN=blub,OU=Nord,OU=Verkauf,OU=Benutzer
    $pos = strpos($dn, ',OU=');
    $dn = substr($dn, $pos);
    // -> $dn: ,OU=Nord,OU=Verkauf,OU=Benutzer

    $abteilung = "";
    $abteilungen = explode(',OU=', $dn);
	// -> $abteilungen: Nord, Verkauf, Benutzer
    for ($j = count($abteilungen)-1; $j > 0; $j--) {
    	$abteilung = $abteilung . "-" . $abteilungen[$j];
    }
    // -> $abteilung: - Benutzer - Verkauf - Nord
	$abteilung = substr($abteilung, 1);
    // -> $abteilung: Benutzer - Verkauf - Nord
    return $abteilung;
}

function vergleich($wert_a, $wert_b)
{
  // Sortierung nach dem displayname
  $a = $wert_a["displayname"];
  $b = $wert_b["displayname"];
  if ($a == $b) {
      return 0;
  }
 return ($a < $b) ? -1 : +1;
}

?>
Bist du dir sicher, dass alle Rechte richtig gesetzt sind? Ich hatte ein ähnliches Problem (erinnere mich nur nicht genau) und habe es durch das Umstrukturieren der Rechte wieder ins Lot gebracht. Versuch mal damit rumzuspielen.

LG