diff options
author | Tarik Gasmi | 2007-05-14 09:46:29 +0200 |
---|---|---|
committer | Tarik Gasmi | 2007-05-14 09:46:29 +0200 |
commit | b192e30ee65a420e12b71cbc0b410754983c052e (patch) | |
tree | 7e1b63e5c932d15d33943e7bab1cba8fe394c7fb /ldap-site-mngmt/webinterface/login_sicher.php | |
parent | * fixed incorrect execution of chroot with respect to setting up the (diff) | |
download | core-b192e30ee65a420e12b71cbc0b410754983c052e.tar.gz core-b192e30ee65a420e12b71cbc0b410754983c052e.tar.xz core-b192e30ee65a420e12b71cbc0b410754983c052e.zip |
Some webinterface data.
git-svn-id: http://svn.openslx.org/svn/openslx/trunk@1076 95ad53e4-c205-0410-b2fa-d234c58c8868
Diffstat (limited to 'ldap-site-mngmt/webinterface/login_sicher.php')
-rw-r--r-- | ldap-site-mngmt/webinterface/login_sicher.php | 362 |
1 files changed, 362 insertions, 0 deletions
diff --git a/ldap-site-mngmt/webinterface/login_sicher.php b/ldap-site-mngmt/webinterface/login_sicher.php new file mode 100644 index 00000000..3dd2af46 --- /dev/null +++ b/ldap-site-mngmt/webinterface/login_sicher.php @@ -0,0 +1,362 @@ +<?php +/** +* login_sicher.php führt einen Bind mit den eingegebenen Benutzerdaten durch. +* Dabei erfolgt die Authetifizierung entsprechend der Ausführung bei der Präsentation des Projektes +* am RZ-LDAP. Das Passwort des Users wird aber nun nicht mehr auf dem Gruppe1 LDAP gespeichert. Dort +* legt das Skript ein Standardpasswort an. +* Im Fehlerfall wird eine Meldung ausgegeben und anschließend auf index.php weitergeleitet. +* Bei erfolgreichem nicht anonymem Bind werden die Benutzerrechte ausgelesen und davon abhängig +* die entsprechende Startseite aufgerufen. dn, uid, userPassword, cn und die Rechte werden in +* einer Session gespeichert. +* +* DIESE VERSION IST AKTUELL IM EINSATZ!!!! +* +* @version V3.2 +* @author Timothy Burk +*/ +session_cache_expire(30); +session_start(); + +# LDAP-Bibliothek einbinden +include("lib/ldap.inc.php"); +# Standard-Bibliothek einbinden +include("lib/commonlib.inc.php"); + +$uid = $_POST['uid']; +$userPassword = $_POST['userPassword']; +# $userDn_rz = "uid=".$uid.",ou=people,".$suffix_rz; +$userDN = "uid=".$uid.",ou=people,".$suffix; + +#echo "uid: "; print_r($uid); echo "<br>"; +#echo "pw: "; print_r($userPassword); echo "<br>"; + +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(5, "index.php", "Bitte geben Sie korrekte Zugangsdaten ein.<br>".$ldapError, FALSE); + die; + } + + } else { + # UID und/oder Passwort wurden NICHT eingegeben + redirect(5, "index.php", "Bitte geben Sie User-Id und Passwort ein.<br>".$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!<br>".$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!<br>".$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", "<b>Eintrag nicht erfolgreich</b><br>".$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!<br>".$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(5, "index.php", "Falscher Login<br>".$ldapError, FALSE); + die; + } + + # cn abfragen + $cn = "Gast"; + if(!($person_daten = uniLdapSearch($ds, "ou=people,".$suffix, "uid=$uid", array("cn"), "", "list", 0, 0))) { + redirect(5, "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'] = ""; + + # LDAP-Bind aufheben + ldap_unbind($ds); + + $mesg = "<html> + <head> + <title>AU Management</title> + <link rel='stylesheet' href='styles.css' type='text/css'> + </head> + <body> + <table border='0' cellpadding='30' cellspacing='0'> + <tr><td> + Bitte haben Sie einen Moment Geduld, die Seite wird geladen... <br> + Falls nicht, klicken Sie bitte <a href='start.php'>hier</a>. + </td></tr> + </table> + </body> + </html>"; + # Aufruf der Startseite: + redirect(0, "start.php", $mesg, TRUE); + + # nichtmehr benötigte CSV-Dateien im tmp-Verzeichnis löschen + # listen_sauber(); +} + + +?> |