Zum Inhalt springen

eu_ldap: Kleine Problemchen

Erstellt am 7. April 2006 · 3 Antworten · letzte Antwort am 18. April 2006

Tags: Frage

Uwe82 ·

Hallo,

zu Testzwecken habe ich die LDAP-Integration mit eu_ldap ausprobiert. Server ist ein Win2k3 mit AD. Funktioniert eigentlich soweit zusammen mit der NewLoginBox, bis auf zwei Dinge:
1.
==
Wenn ich "Importiere/aktualisiere authentifizierte Benutzer automatisch" anhake, werden beim Login alle Gruppenmitgliedschaften gelöscht, aber ohne kann ich verschiedene Benutzer nicht unterscheiden. Wie kann ich das verhindern, aber trotzdem einen AutoImport der User beim Anmelden realisieren? Das Beste wäre dann auch, wenn ich eine Default-Benutzergruppe angeben könnte in die neue User automatisch kommen.

2.
==
Wenn ich in der Navigation auf LDAP Integration klicke und meinen SysOrdner aufrufe, wo ich den Server definiert habe, bekomme ich den Fehler: "Unable to bind to server". Verstehe ich nicht, weil ansonsten funktionierts doch einwandfrei.

Im Endeffekt wird die Typo3-Seite an einer Hochschule laufen, und die Benutzer sollten möglichst automatisch verwaltet werden. Dazu werden sie von einem LDAP-Server importiert, sobald sie sich an der Seite anmelden (das funktioniert ja schon) und sollten schon anfänglich Rechte bekommen. Ein kompletter Import ist aber weder sinnvoll noch realisierbar, da nur ein Bruchteil der User sich in diesem Portal anmelden werden (ist für einen bestimmten Fachbereich). Daher diese Fragen 😉

Ich hoffe mir kann jemand helfen und bedanke mich mal im Voraus 😉[/list]

RPW ·

zu 1.
Anpassung in der Datei „/typo3conf/ext/eu_ldap/mod1/class.tx_euldap_div.php“ vornehmen, damit die vorher zugteilten Gruppen bei einen neuen Import erhalten bleiben:

...
tx_euldap_div::assign_groups($Server, $arrGroups, $user, $gid, $gname,$user_table, $pid);
### hack group -- { ###
// Gruppen
$userGid = "";
// alte BE-Gruppen auslesen
$where = "lower(username) = '".strtolower($username)."'";
	$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery("usergroup", "be_users",$where);
	$row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
// BE-Gruppen aus Kommaliste splitten
$arrBeGroups = explode(",", $row['usergroup']);
// Array auslesen und auf String umsetzen
foreach($arrBeGroups as $intGroup)
{
	$userGid .= ",$intGroup";
} # foreach
// alte Gruppen anhaegen
$gid .= $userGid;
### hack group -- } ### 
if ($user_table == 'fe_users') {
...

Die Zuweisung einer Default-Benutzergruppe könnte mit folgenden Codeabschnitt erfolgen in der selben Datei erfolgen:

...
if ($user_table == 'fe_users') {
  $map_additional_fields = 'address='.$ldapaddress                        .',zip='.$ldapzip                     .',city='.$ldapcity            .',country='.$ldapcountry         .',address='.$ldapaddress      .',telephone='.$ldapphone   .',fax='.$ldapfax                        .',www='.$ldapwww                     .($map_additional_fields?','.$map_additional_fields:'');
 
// manual Hack, always enters Group 2
if(!$gid)
{
     $gid = 2;
}
else
{
     $gid .= ',2';
}
// end manual Hack
 
$updateArray = array('tstamp' => time(),
'name' => str_replace("'", "''", $name),
'email' => $email,
'usergroup' => $gid
);
Uwe82 ·

Also mit kleinen Änderungen läuft das erste wohl mal:

    ### hack group -- { ###
    // Gruppen
    $userGid = "";
    // alte BE-Gruppen auslesen
    $where = "lower(username) = '".strtolower($username)."'";
    $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery("usergroup", "fe_users",$where);
    $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
    // BE-Gruppen aus Kommaliste splitten
    $userGid = $row['usergroup'];
    // alte Gruppen anhaegen
    if (!$gid) 
    {
      $gid = $userGid;
    } else {
      $gid .= $userGid;
    }
    echo $gid;
    ### hack group -- } ###

Das Ganze in ein Array zu packen ist unnötig und durch die foreach-Schleife war am Anfang des Strings ein Komma zuviel.

Aber danke, das war der richtige Denkanstoß

Nur das Einloggen funktioniert nun nicht mehr ... 🙁
//EDIT: OK, einloggen geht auch wieder, alles einwandfrei nun, vielen Dank!