Okay, mich hat es etwas genervt, dass die alten Gruppen nicht wieder hergestellt werden… War auch ein Feature, dass ich dringend brauchte. Deshalb folgender Workaround:
1) Aus dem LDAP importierte Backend-Gruppen (BEG's) müssen irgendwie markiert werden. Also bin ich mittels phpMyAdmin in die Tabelle 'be_groups' gewandert und habe eine neue Spalte 'from_euldap' hinzugefügt. Hier das Alter-Skript:
<?php
// […]
$sql = "ALTER TABLE `be_groups` ADD `from_euldap` TINYINT(1) UNSIGNED DEFAULT '0' NOT NULL";
// […]
?>
2) Um das nutzen zu können, muss beim Import von BEG's aus LDAP der Wert dieser Spalte auf '1' gesetzt werden. Das geschieht in der Datei '/typo3conf/ext/eu_ldap/mod1/class.tx_euldap_div.php' in der Funktion 'insert_newgrps()'. Dort macht ihr in der ersten foreach-Schleife folgende Änderung (hier nur Anfang der Schleife):
<?php
// […]
foreach ($grps as $grp) {
$qry = Array('pid' => $pid,
'tstamp' => time(),
'title' => $grp,
'description' => 'Inserted by eu_ldap '.time(),
### hack -- { ###
// Komma zwei Zeilen weiter oben nicht vergessen!
'from_euldap' => '1'
### hack -- } ###
);
// […]
?>
3) Der Wert 'from_euldap' muss nun noch ausgewertet werden. Dabei berufe ich mich auf die Idee von KaeptnOvi und mach noch was eigenes: Ich will alle Gruppenbeziehungen wieder herstellen, die nicht aus LDAP kommen, weil ich immer nur eine Gruppe aus LDAP bekomme und weitere von Hand zuweise. Wer das nicht braucht, kann sich Punkt 1) und 2) sowie die ganze Überprüfung auf den Wert 'from_euldap' im folgenden Code-Snippet sparen und gleich die ausgelesene $row['usergroup'] mit einem Komma an $gid ranhängen. Ansonsten werden alte Gruppen wieder hergestellt, die nicht aus LDAP stammen. Ich mache also einen kleinen Hack in die Funktion 'update_singleuser()' (jeweils noch eine Zeile davor und danach zur besseren Übersicht mitgenommen):
<?php
// […]
tx_euldap_div::assign_groups($Server, $arrGroups, $user, $gid, $gname, $user_table, $pid);
### hack -- { ###
// 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']);
// jede Gruppe auf den Import durch die Extension 'eu_ldap' untersuchen
foreach($arrBeGroups as $intGroup)
{
// Spalte `from_euldap` abfragen
$where = "uid = $intGroup";
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery("from_euldap", "be_groups", $where);
$row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
// Integer-Wert aus Array separieren
$from_euldap = (int)array_shift($row);
// wenn nicht importiert, dann anhängen
if($from_euldap != 1)
{
$userGid .= ",$intGroup";
} # if
} # foreach
// alte Gruppen anhängen
$gid .= $userGid;
### hack -- } ###
if ($user_table == 'fe_users') {
// […]
?>