";
#echo "pw: "; print_r($userPassword); echo " ";
checkLogin($uid,$userPassword);
/**
* checkLogin($uid, $userPassword) - Authentifizierung am RZ-LDAP und Gruppe1-LDAP
*
* Wenn RZ-LDAP-Login UND Gruppe1-LDAP-Login erfolgreich sind, dann ist der User
* bereits im Gruppe1-LDAP eingetragen.
* -> Mache Datenabgleich und anschlie�enden Login am Gruppe1-LDAP
* Wenn RZ-LDAP-Login erfolgreich, Gruppe1-LDAP-Login jedoch nicht erfolgreich ist,
* dann unterscheide zwischen zwei M�glichkeiten:
* 1. Der User ist im Gruppe1-LDAP nicht angelegt,
* 2. Der User ist im Gruppe1-LDAP zwar angelegt, aber das Passwort wurde auf dem RZ-LDAP inzwischen ge�ndert.
* -> Login als Dummy und Check, ob UID vorhanden
* Wenn RZ-LDAP-Login nicht erfolgreich, Gruppe1-LDAP-Login jedoch erfolgreich ist,
* dann ist der User auf dem RZ-LDAP nicht gespeichert.
* -> Login am Gruppe1-LDAP
* In anderen F�llen waren die Zugangsdaten nicht korrekt.
* -> Redirect auf index.php.
*
* Schema siehe auch /home/gruppe1/Praesentation/Login und Personen.pps
*
* @param string UID
* @param string Password
*
* @see userLogin()
* @see datenabgleich()
* @see dummyUidCheck()
* @see userAnlegen()
*
* @author Timothy Burk
*/
function checkLogin($uid = "", $userPassword = "") {
global $userDn_rz, $userDN, $suffix, $suffix_rz, $ldapError, $standardPassword;
# Abfrage, ob das Loginformular Daten enth�lt
if(!(($uid == "") || ($userPassword == ""))) {
# UID und Passwort wurden eingegeben
# Fallunterscheidung welche Logins m�glich sind
/* if(($ds_rz = rzLdapConnect($uid,$userPassword)) && ($ds = uniLdapConnect($uid, $standardPassword))) {
# Wenn RZ-LDAP-Login UND Gruppe1-LDAP-Login erfolgreich sind, dann ist der User
# bereits im Gruppe1-LDAP eingetragen.
# -> Mache Datenabgleich und anschlie�enden Login am Gruppe1-LDAP
datenabgleich($uid, $userPassword, $ds_rz, $ds);
ldap_unbind($ds);
ldap_unbind($ds_rz);
$userPassword = $standardPassword;
userLogin($uid, $userPassword);
} else if(($ds_rz = rzLdapConnect($uid,$userPassword)) && !($ds = uniLdapConnect($uid, $standardPassword))) {
# Wenn RZ-LDAP-Login erfolgreich, Gruppe1-LDAP-Login jedoch nicht erfolgreich ist,
# dann unterscheide zwischen zwei M�glichkeiten:
# 1. Der User ist im Gruppe1-LDAP nicht angelegt,
# 2. Der User ist im Gruppe1-LDAP zwar angelegt, aber das Passwort wurde auf dem RZ-LDAP
# inzwischen ge�ndert.
# -> Login als Dummy und Check, ob UID vorhanden
if(dummyUidCheck($uid)) {
#changePassword($uid,$userPassword);
$userPassword = $standardPassword;
} else {
userAnlegen($uid,$userPassword,$ds_rz);
}
ldap_unbind($ds_rz);
$userPassword = $standardPassword;
checkLogin($uid, $userPassword);
} else if(!($ds_rz = rzLdapConnect($uid,$userPassword)) && */ if ($ds = uniLdapConnect($uid,$userPassword)) {
# Wenn RZ-LDAP-Login nicht erfolgreich, Gruppe1-LDAP-Login jedoch erfolgreich ist,
# dann ist der User auf dem RZ-LDAP nicht gespeichert.
# -> Login am Gruppe1-LDAP
ldap_unbind($ds);
userLogin($uid, $userPassword);
} else {
# In anderen F�llen waren die Zugangsdaten nicht korrekt.
# -> Redirect auf index.php.
redirect(3, "index.php", "
Bitte geben Sie korrekte Zugangsdaten ein.
".$ldapError, FALSE);
die;
}
} else {
# UID und/oder Passwort wurden NICHT eingegeben
redirect(3, "index.php", "
Bitte geben Sie User-Id und Passwort ein.
".$ldapError, FALSE);
die;
}
}
/**
* dummyUidCheck($uid) - �berpr�ft, ob UID im Gruppe1-LPAD vorhanden ist.
*
* �ber den Dummyuser wird eine Verbindung zum Gruppe1-LDAP aufgebaut und die angegebene
* UID wird gesucht.
*
* @param string UID
*
* @return boolean TRUE = UID vorhanden, FALSE = UID nicht gefunden
*
* @author Timothy Burk
*/
function dummyUidCheck($uid) {
global $userDn, $suffix, $suffix_rz, $ldapError, $dummyUid, $dummyPassword;
# Bei Erfolg stellen wir eine Verbindung mit unserem LDAP her. Dazu nutzen wir den Dummy:
if(!($ds_dummy = uniLdapConnect($dummyUid, $dummyPassword))) {
redirect(5, "index.php", "Dummy-Login fehlgeschlagen! ".$ldapError, FALSE);
die;
}
# Im n�chsten Schritt wird �berpr�ft, ob ein Eintrag mit der UID $uid schon vorliegt:
if(!($person_daten = uniLdapSearch($ds_dummy, "ou=people,".$suffix, "uid=$uid", array("*"), "", "list", 0, 0))) {
redirect(5, "index.php", $ldapError, FALSE);
die;
}
if($person_daten['count'] == 0) {
# Eintrag ist nicht vorhanden. -> Anlegen
ldap_unbind($ds_dummy);
return FALSE;
} else {
ldap_unbind($ds_dummy);
return TRUE;
}
}
/**
* userAnlegen($uid,$userPassword,$ds_rz)
*
* Legt mithilfe des Dummyusers einen noch nicht bei uns gef�hrten User im Gruppe1-LDAP
* mit den Daten des Rechenzentrums an. Das Passwort ist dabei f�r alle User in der config.inc.php festgelegt.
*
* @param string UID
* @param string Password
* @param resource RZ-LDAP Directory Handle
*
* @author Timothy Burk
*/
function userAnlegen($uid,$userPassword,$ds_rz) {
global $userDn_rz, $userDn, $suffix, $suffix_rz, $ldapError, $dummyUid, $dummyPassword, $standardPassword;
# Bei Erfolg stellen wir eine Verbindung mit unserem LDAP her. Dazu nutzen wir den Dummy:
if(!($ds_dummy = uniLdapConnect($dummyUid, $dummyPassword))) {
redirect(5, "index.php", "Dummy-Login fehlgeschlagen! ".$ldapError, FALSE);
die;
}
# Im n�chsten Schritt wird �berpr�ft, ob ein Eintrag mit der UID $uid schon vorliegt:
$ruffelder = array("uid", "sn", "givenname", "uidnumber", "gidnumber", "homedirectory", "loginshell", "rufnutzernummer", "rufanrede", "rufeinrichtung", "rufmatnr", "rufaccounttype", "ruffakultaet", "mail", "rufdienst");
if(!($person_daten = uniLdapSearch($ds_rz, "ou=people,".$suffix_rz, "uid=$uid", $ruffelder, "", "list", 0, 0))) {
redirect(5, "index.php", $ldapError, FALSE);
die;
}
$person_daten = ldapArraySauber($person_daten);
$person_daten = $person_daten[0];
foreach($ruffelder as $ruffeld) {
$ruffeld = str_replace("ruf","",$ruffeld);
if($ruffeld == "accounttype") {
$gruppe1felder[] = "employeetype";
} else if($ruffeld == "anrede") {
$gruppe1felder[] = "title";
} else {
$gruppe1felder[] = $ruffeld;
}
}
$i = 0;
$neuerEintrag = array();
foreach($gruppe1felder as $gruppe1feld) {
if (isset($person_daten[$ruffelder[$i]])) {
$neuerEintrag[$gruppe1feld] = $person_daten[$ruffelder[$i]];
} else {
$neuerEintrag[$gruppe1feld] = '';
}
$i++;
}
if($neuerEintrag['employeetype'] != "student") {
unset($neuerEintrag['employeetype']);
} else {
$neuerEintrag['employeetype'] = ucfirst($neuerEintrag['employeetype']);
}
$neuerEintrag['userPassword'] = $userPassword;
# Ermitteln der Initialen: Erster Buchstabe des Vornamens und erster Buchstabe des Nachnamens
$neuerEintrag['initials'] = substr($neuerEintrag['givenname'],0,1).".".substr($neuerEintrag['sn'],0,1).".";
# CN erstellen
$neuerEintrag['cn'] = $neuerEintrag['givenname']." ".$neuerEintrag['sn'];
# Aktiv setzen
$neuerEintrag['aktiv'] = "yes";
$neuerEintrag = inputArraySauber($neuerEintrag);
# Festes Sicherungspasswort setzen
$neuerEintrag['userPassword'] = $standardPassword;
if(!($add = uniLdapAdd($ds_dummy, $userDn, $neuerEintrag, "personen"))) {
redirect(5, "index.php", "Eintrag nicht erfolgreich ".$ldapError, FALSE);
die;
}
}
/**
* datenabgleich($uid, $userPassword, $ds_rz, $ds) - �berschreibt bei jedem Login die Daten des
* Gruppe1-LDAP mit denen des RZ-LDAP mithilfe des Dummyusers.
*
* @param string UID
* @param string Password
* @param resource ds_rz RZ-LDAP Directory Handle
* @param resource ds Gruppe1-LDAP Directory Handle nach Bind mit Dummyuser
*
* @author Timothy Burk
*/
function datenabgleich($uid, $userPassword, $ds_rz, $ds) {
global $userDn_rz, $userDn, $suffix, $suffix_rz, $ldapError, $dummyUid, $dummyPassword, $standardPassword;
# Bei Erfolg stellen wir eine Verbindung mit unserem LDAP her. Dazu nutzen wir den Dummy:
if(!($ds_dummy = uniLdapConnect($dummyUid, $dummyPassword))) {
redirect(5, "index.php", "Dummy-Login fehlgeschlagen! ".$ldapError, FALSE);
die;
}
# Im n�chsten Schritt wird �berpr�ft, ob ein Eintrag mit der UID $uid schon vorliegt:
$ruffelder = array("uid", "sn", "givenname", "uidnumber", "gidnumber", "homedirectory", "loginshell", "rufnutzernummer", "rufanrede", "rufeinrichtung", "rufmatnr", "rufaccounttype", "ruffakultaet", "mail", "rufdienst");
if(!($person_daten = uniLdapSearch($ds_rz, "ou=people,".$suffix_rz, "uid=$uid", $ruffelder, "", "list", 0, 0))) {
redirect(5, "index.php", $ldapError, FALSE);
die;
}
$person_daten = ldapArraySauber($person_daten);
$person_daten = $person_daten[0];
foreach($ruffelder as $ruffeld) {
$ruffeld = str_replace("ruf","",$ruffeld);
if($ruffeld == "accounttype") {
$gruppe1felder[] = "employeetype";
} else if($ruffeld == "anrede") {
$gruppe1felder[] = "title";
} else {
$gruppe1felder[] = $ruffeld;
}
}
$i = 0;
$neuerEintrag = array();
foreach($gruppe1felder as $gruppe1feld) {
if (isset($person_daten[$ruffelder[$i]])) {
$eintrag = $person_daten[$ruffelder[$i]];
} else {
$eintrag = '';
}
$neuerEintrag[$gruppe1feld] = $eintrag; //$person_daten[$ruffelder[$i]];
$i++;
}
if($neuerEintrag['employeetype'] != "student") {
unset($neuerEintrag['employeetype']);
} else {
$neuerEintrag['employeetype'] = ucfirst($neuerEintrag['employeetype']);
}
$neuerEintrag['userPassword'] = $userPassword;
# Ermitteln der Initialen: Erster Buchstabe des Vornamens und erster Buchstabe des Nachnamens
$neuerEintrag['initials'] = substr($neuerEintrag['givenname'],0,1).".".substr($neuerEintrag['sn'],0,1).".";
# CN erstellen
$neuerEintrag['cn'] = $neuerEintrag['givenname']." ".$neuerEintrag['sn'];
# Aktiv setzen
$neuerEintrag['aktiv'] = "yes";
$neuerEintrag = inputArraySauber($neuerEintrag);
# Festes Sicherungspasswort setzen
$neuerEintrag['userPassword'] = $standardPassword;
if(!($alteDaten = uniLdapSearch($ds_dummy, "ou=people,".$suffix, "uid=$uid", array("*"), "", "list", 0, 0))) {
redirect(5, "index.php", $ldapError, FALSE);
die;
}
if(uniLdapModify($ds_dummy, $userDn, $alteDaten, $neuerEintrag, 0)) {
$meldung = "Daten abgeglichen";
}
}
/**
* userLogin($uid, $userPassword) - F�hrt den Login am Gruppe1-LDAP durch.
*
* Nach erfolgreicher Identifikation und ggf. neuem Anlegen oder Datenabgleich wird
* mit userLogin() der Bind am Gruppe1-LDAP durchgef�hrt.
* Die Rechte und der CN des Users werden ausgelesen und in der Session gespeichert.
* Anschlie�end leitet das Skript auf die Startseite der Verwaltung (person_daten_show.php) weiter.
*
* @param string UID
* @param string Password
*
* @author Timothy Burk
*/
function userLogin($uid, $userPassword) {
global $userDN, $suffix, $ldapError;
# Verbindung mit der Datenbank herstellen
if(($uid == "") || ($userPassword == "") || !($ds = uniLdapConnect($uid,$userPassword))) {
redirect(3, "index.php", "Falscher Login ".$ldapError, FALSE);
die;
}
# cn abfragen
$cn = "Gast";
if(!($person_daten = uniLdapSearch($ds, "ou=people,".$suffix, "uid=$uid", array("cn"), "", "list", 0, 0))) {
redirect(3, "index.php", $ldapError, FALSE);
die;
} else {
$cn = str_replace('\"', '', $person_daten[0]['cn'][0]);
}
# Speichern der Sessionvariablen
$_SESSION['uid'] = $uid;
$_SESSION['userPassword'] = $userPassword;
$_SESSION['dn'] = $userDN;
$_SESSION['cn'] = $cn;
$_SESSION['audn'] = "";
$_SESSION['status'] = "in";
$_SESSION['error'];
# LDAP-Bind aufheben
ldap_unbind($ds);
$mesg = "
AdminUnit Management
Bitte einen Moment Geduld, die Seite wird geladen ...
Falls nicht, klicken Sie bitte hier.
";
# Aufruf der Startseite:
redirect(0, "start.php", $mesg, TRUE);
# nichtmehr ben�tigte CSV-Dateien im tmp-Verzeichnis l�schen
# listen_sauber();
}
?>