first commit
This commit is contained in:
330
index.php
Executable file
330
index.php
Executable file
@ -0,0 +1,330 @@
|
||||
<?php
|
||||
## INDEX gegen LDAP
|
||||
session_start();
|
||||
|
||||
include_once 'classes/TestProjektSmarty.class.php';
|
||||
require_once("config.inc.php");
|
||||
$smarty = new Smarty();
|
||||
$templatename = substr(basename($_SERVER['PHP_SELF']), 0, -3) . "html";
|
||||
require_once "language/german.inc.php";
|
||||
|
||||
|
||||
$action = $_GET['action'];
|
||||
if ($action == '') {
|
||||
if (isset($_GET['error'])) {
|
||||
|
||||
$errorno = $_GET['error'];
|
||||
|
||||
$smarty->assign('index_error', 1);
|
||||
|
||||
if ($errorno == 1) {
|
||||
$smarty->assign('index_error_text', "Es müssen alle Felder ausgefüllt werden");
|
||||
}
|
||||
|
||||
if ($errorno == 3) {
|
||||
$smarty->assign('index_error_text', "Der Benutzername oder das Passwort ist nicht korrekt<br>Stellen Sie sicher, dass Ihr Benutzerkonto in der Hochschule aktiv ist.");
|
||||
}
|
||||
|
||||
if ($errorno == 4) {
|
||||
$smarty->assign('index_error_text', "Der Benutzer ist nicht für das System freigegeben!<br>Bitte wenden Sie sich an den Administrator (<a href=\"mailto:$global_service_mail\">$global_service_admin</a>)");
|
||||
}
|
||||
|
||||
if ($errorno == 5) {
|
||||
$smarty->assign('index_error_text', "Der Benutzer ist im System nicht vorhanden!<br>Bitte wenden Sie sich an den Administrator.");
|
||||
}
|
||||
|
||||
# Daten aufbereiten bei Fehler
|
||||
if (isset($_SESSION["global_username"])) {
|
||||
$smarty->assign('index_user', $_SESSION["global_username"]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
if ($action == 'anmeld') {
|
||||
// Variablen setzen, damit sie nicht mit ISSET geprüft werden müssen. Standardeinstellungen sind so, dass kein Login möglich wäre
|
||||
$anzahl = 0;
|
||||
$anzahl_db = 0;
|
||||
$login = 1;
|
||||
$login_db = 1;
|
||||
|
||||
$username = strtolower($_POST["user"]); //remove case sensitivity on the username
|
||||
|
||||
# AcitveDirectory oder OPEN LDAP
|
||||
if($global_ldap_art == 1){
|
||||
$password=utf8_decode($_POST["password"]);
|
||||
}
|
||||
if($global_ldap_art == 2){
|
||||
$password=$_POST["password"];
|
||||
}
|
||||
|
||||
if ($_POST["user"] != "") {
|
||||
$_SESSION["global_username"] = $username;
|
||||
}
|
||||
|
||||
if ($username == "" OR $password == "") {
|
||||
echo "<meta http-equiv=\"refresh\" content=\"0; URL=" . $_SERVER['PHP_SELF'] . "?error=1\">";
|
||||
} else {
|
||||
|
||||
$db = dbconnect();
|
||||
$query_server = $db->query("SELECT wert1 ip, wert2 port FROM dep_parameter WHERE pid='3'");
|
||||
$row_server = $query_server->fetch_array();
|
||||
|
||||
/*
|
||||
|
||||
################################
|
||||
## Prüfe studnet ob Treffer
|
||||
################################
|
||||
# bind wird benötigt, sonst werden die Umlaute bei Namen nicht richtig angezeigt ?!!?
|
||||
|
||||
$ds=@ldap_connect("141.10.144.37", "389");
|
||||
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
|
||||
$r=@ldap_bind($ds, $row_ldapuser['wert1'], $row_ldapuser['wert2']);
|
||||
$_ldap_dn = "ou=ouStudnet,dc=studnet,dc=hs-ludwigsburg,dc=de";
|
||||
$sr=@ldap_search($ds, $_ldap_dn, "samaccountname=$username");
|
||||
$info = @ldap_get_entries($ds, $sr);
|
||||
$anzahl = ldap_count_entries($ds,$sr);
|
||||
$vorname = $info[0]['givenname'][0];
|
||||
$nachname = $info[0]['sn'][0];
|
||||
$mail = $info[0]['mail'][0];
|
||||
$first = ldap_first_entry($ds,$sr);
|
||||
$distinguishedName = ldap_get_dn($ds,$first);
|
||||
$result_jg = $db->query("SELECT ag, jahrgang FROM kurs.stud WHERE lower(uid)='$username'");
|
||||
$row_jg = $result_jg->fetch_array();
|
||||
################################
|
||||
|
||||
|
||||
### Wenn binden fehlschlägt, also Passwort falsch
|
||||
##!!!!! IM STUDNET MIT DEM USERNAMEN BINDEN, IM HSNET MIT DEM DISTINGUISHEDNAME !!!!!!#################
|
||||
#if ($bind = @ldap_bind($ds, $username, $password) AND $anzahl > 0){
|
||||
if ($bind = ldap_bind($ds, $distinguishedName, $password) AND $anzahl > 0){
|
||||
# Bind funktioniert
|
||||
#echo "studnet: Bind funktioniert: $anzahl <br>";
|
||||
$login = "0";
|
||||
$login_ad = "studnet";
|
||||
}else{
|
||||
# Bind funktioniert nicht
|
||||
#echo "studnet: Bind funktioniert nicht: $anzahl <br>";
|
||||
$login = "1";
|
||||
ldap_close($ds);
|
||||
}
|
||||
#exit;
|
||||
|
||||
########
|
||||
# INFO hsnet: Würde man nur $_ldap_dn = "dc=hsnet,dc=hs-ludwigsburg,dc=de"; angeben ohne OU=OUHochschunetzwerk oä., würde php beim search nichts mehr finden und alle Passwörter akzeptieren
|
||||
########
|
||||
|
||||
*/
|
||||
################################
|
||||
## Prüfe OUHochschulnetzwerk ob Treffer, wenn studnet nicht funktioniert
|
||||
################################
|
||||
// if($login == "1" and $anzahl == "0"){
|
||||
|
||||
$ds = @ldap_connect($global_ldap_serverhsnet, $global_ldap_porthsnet);
|
||||
if ($ds) {
|
||||
# bind wird benötigt, sonst werden die Umlaute bei Namen nicht richtig angezeigt ?!!?
|
||||
$r = @ldap_bind($ds, $global_ldap_user, $global_ldap_pwd);
|
||||
$_ldap_dn = "ou=OUHochschulnetzwerk,dc=hsnet,dc=hs-ludwigsburg,dc=de";
|
||||
$sr = @ldap_search($ds, $_ldap_dn, "samaccountname=$username");
|
||||
|
||||
$info = @ldap_get_entries($ds, $sr);
|
||||
|
||||
$anzahl = ldap_count_entries($ds, $sr);
|
||||
$vorname = $info[0]['givenname'][0];
|
||||
$nachname = $info[0]['sn'][0];
|
||||
$mail = $info[0]['mail'][0];
|
||||
$first = ldap_first_entry($ds, $sr);
|
||||
$distinguishedName = @ldap_get_dn($ds, $first);
|
||||
################################
|
||||
|
||||
# Bind geht im hsnet nur über den DN "CN=Schwarz\, Alexander, OU=Externe Benutzer, ou=OUHochschulnetzwerk,dc=hsnet,dc=hs-ludwigsburg,dc=de"
|
||||
##!!!!! IM STUDNET MIT DEM USERNAMEN BINDEN, IM HSNET MIT DEM DISTINGUISHEDNAME !!!!!!#################
|
||||
if ($bind = @ldap_bind($ds, $distinguishedName, $password) AND $anzahl > 0) {
|
||||
#echo "hsnet: Bind funktioniert: $anzahl |$distinguishedName|<br>";
|
||||
$login = "0";
|
||||
$login_ad = "hsnet";
|
||||
} else {
|
||||
# Bind funktioniert nicht
|
||||
$login = "1";
|
||||
ldap_close($ds);
|
||||
#echo "hsnet: Bind funktioniert nicht: $anzahl <br>";
|
||||
}
|
||||
}
|
||||
// }
|
||||
|
||||
|
||||
################################
|
||||
## Prüfe OURechenzentrum ob Treffer, wenn OUHochschulnetzwerk nicht funktioniert
|
||||
################################
|
||||
if ($login == "1" and $anzahl == 0) {
|
||||
|
||||
$ds = @ldap_connect($global_ldap_serverhsnet, $global_ldap_porthsnet);
|
||||
if ($ds) {
|
||||
# bind wird benötigt, sonst werden die Umlaute bei Namen nicht richtig angezeigt ?!!?
|
||||
$r = @ldap_bind($ds, $global_ldap_user, $global_ldap_pwd);
|
||||
$_ldap_dn = "ou=OURechenzentrum,dc=hsnet,dc=hs-ludwigsburg,dc=de";
|
||||
$sr = @ldap_search($ds, $_ldap_dn, "samaccountname=$username");
|
||||
$info = @ldap_get_entries($ds, $sr);
|
||||
$anzahl = ldap_count_entries($ds, $sr);
|
||||
$vorname = $info[0]['givenname'][0];
|
||||
$nachname = $info[0]['sn'][0];
|
||||
$mail = $info[0]['mail'][0];
|
||||
$first = ldap_first_entry($ds, $sr);
|
||||
$distinguishedName = @ldap_get_dn($ds, $first);
|
||||
################################
|
||||
|
||||
# Bind geht im hsnet nur über den DN "CN=Schwarz\, Alexander, OU=Externe Benutzer, ou=OUHochschulnetzwerk,dc=hsnet,dc=hs-ludwigsburg,dc=de"
|
||||
##!!!!! IM STUDNET MIT DEM USERNAMEN BINDEN, IM HSNET MIT DEM DISTINGUISHEDNAME !!!!!!#################
|
||||
if ($bind = @ldap_bind($ds, $distinguishedName, $password) AND $anzahl > 0) {
|
||||
#echo "RZ: Bind funktioniert: $anzahl <br>";
|
||||
$login = "0";
|
||||
$login_ad = "hsnet";
|
||||
} else {
|
||||
# Bind funktioniert nicht
|
||||
#echo "RZ: Bind funktioniert nicht: $anzahl <br>";
|
||||
$login = "1";
|
||||
ldap_close($ds);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
echo "<br>
|
||||
distinguishedName = $distinguishedName<br>
|
||||
anzahl_hs $anzahl <br>
|
||||
Username $username, $vorname, $nachname, $mail<br>
|
||||
account: $username, $password<br>
|
||||
login $login<br>
|
||||
exit;
|
||||
*/
|
||||
|
||||
$db = dbconnect();
|
||||
$result = $db->query("SELECT imtuid, uid, passwort FROM dep_user WHERE lower(uid)='$username'");
|
||||
$row = $result->fetch_array();
|
||||
|
||||
$resultanz = $db->query("SELECT count(*) Anz FROM dep_user WHERE lower(uid)='$username'");
|
||||
$rowanz = $resultanz->fetch_array();
|
||||
$anzahl_db = $rowanz['Anz'];
|
||||
|
||||
# Login geht nicht über LDAP, aber vielleicht über DB
|
||||
if ($login == "1" and $anzahl == 0) {
|
||||
if ($anzahl_db > 0) {
|
||||
# Userkennung gibt es
|
||||
|
||||
if (md5($password) == $row['passwort']) {
|
||||
# Passwort richtig
|
||||
$login_db = "0";
|
||||
} else {
|
||||
# Passwort falsch
|
||||
$login_db = "1";
|
||||
}
|
||||
} else {
|
||||
# Userkennung gibt es nicht
|
||||
$login_db = "1";
|
||||
$anzahl_db = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Loginmatrix mit Reihenfolge
|
||||
Sort LDAP vorhanden Datenbank vorhanden PW LDAP richtig PW DB richtig Aktivität
|
||||
6 Nein Ja obs Nein Fehlermeldung PW falsch
|
||||
anzahl==0 anzahl_db>0 login == 1 login_db == 1
|
||||
|
||||
2 Nein Ja obs Ja Login
|
||||
anzahl==0 anzahl_db>0 login == 1 login_db == 0
|
||||
|
||||
4 Nein Nein obs obs Registrierung
|
||||
anzahl==0 anzahl_db==0 login == 1 -
|
||||
|
||||
5 Ja obs Nein obs Fehlermeldung PW falsch
|
||||
anzahl > 0 - login == 1 -
|
||||
|
||||
3 Ja Nein Ja obs Registrierung
|
||||
anzahl > 0 anzahl_db==0 login == 0 -
|
||||
|
||||
1 Ja Ja Ja obs Login
|
||||
anzahl > 0 anzahl_db>0 login == 0 -
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
# Sort 1
|
||||
if ($anzahl > 0 AND $anzahl_db > 0 AND $login == 0) {
|
||||
# Login über LDAP erfolgreich und Person in DB --> Login
|
||||
$db = dbconnect();
|
||||
$datum = date("Y-m-d H:i:s");
|
||||
$ip = getenv("REMOTE_ADDR");
|
||||
$agent = getenv("HTTP_USER_AGENT");
|
||||
$user_admin = $row['imtuid'];
|
||||
$_SESSION["global_uid"] = $user_admin;
|
||||
$_SESSION["global_username"] = $row['uid'];
|
||||
$result_1 = $db->query("INSERT INTO dep_userlog (Datum, IP, user_agent, imtuid) VALUES ('$datum', '$ip', '$agent', '$user_admin')");
|
||||
$sql = $db->query("UPDATE dep_user
|
||||
SET mail_inaktiv='0000-00-00 00:00:00'
|
||||
,vorname = '$vorname'
|
||||
,nachname = '$nachname'
|
||||
,mail = '$mail'
|
||||
WHERE imtuid='$user_admin'");
|
||||
echo "<meta http-equiv=\"refresh\" content=\"0; URL=indexframe.php\">";
|
||||
exit;
|
||||
}
|
||||
|
||||
# Sort 2
|
||||
if ($anzahl == 0 AND $anzahl_db > 0 AND $login == 1 AND $login_db == 0) {
|
||||
# Person in LDAP nicht vorhanden aber Login über Datenbank erfolgreich --> Login
|
||||
$user_admin = $row['imtuid'];
|
||||
$_SESSION["global_uid"] = $user_admin;
|
||||
$_SESSION["global_username"] = $row['uid'];
|
||||
$result_1 = $db->query("INSERT INTO dep_userlog (Datum, IP, user_agent, imtuid) VALUES ('$datum', '$ip', '$agent', '$user_admin')");
|
||||
echo "<meta http-equiv=\"refresh\" content=\"0; URL=indexframe.php\">";
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
# Sort 3
|
||||
if ($anzahl > 0 AND $anzahl_db == 0 AND $login == 0) {
|
||||
# Login über LDAP erfolgreich aber Person nicht in DB --> Registrierung ohne Bestätigungsmail
|
||||
|
||||
// Frage ist, ob man eine Bestätigungsmail erhält, oder ob der Admin freigibt, welcher Doz zugelassen ist. Geht nur, wenn alle im LDAP sind bzw. wenn Admin Doz manuell anlegt
|
||||
|
||||
echo "<meta http-equiv=\"refresh\" content=\"0; URL=" . $_SERVER['PHP_SELF'] . "?error=4\">";
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
# Sort 4
|
||||
if ($anzahl == 0 AND $anzahl_db == 0 AND $login == 1) {
|
||||
# Person in LDAP und DB nicht vorhanden --> Registrierung über Admin
|
||||
|
||||
// Frage ist, ob man eine Bestätigungsmail erhält, oder ob der Admin freigibt, welcher Doz zugelassen ist. Geht nur, wenn alle im LDAP sind bzw. wenn Admin Doz manuell anlegt
|
||||
|
||||
echo "<meta http-equiv=\"refresh\" content=\"0; URL=" . $_SERVER['PHP_SELF'] . "?error=5\">";
|
||||
exit;
|
||||
}
|
||||
|
||||
# Sort 5
|
||||
if ($anzahl > 0 AND $login == 1) {
|
||||
# Person in LDAP vorhanden aber Passwort falsch --> Fehlermeldung PW LDAP falsch
|
||||
echo "<meta http-equiv=\"refresh\" content=\"0; URL=" . $_SERVER['PHP_SELF'] . "?error=3\">";
|
||||
exit;
|
||||
}
|
||||
|
||||
# Sort 6
|
||||
if ($anzahl == 0 AND $anzahl_db > 0 AND $login == 1 AND $login_db == 1) {
|
||||
# Person in LDAP nicht vorhanden aber in DB, dort aber Passwort falsch --> Fehlermeldung PW DB falsch
|
||||
|
||||
echo "<meta http-equiv=\"refresh\" content=\"0; URL=" . $_SERVER['PHP_SELF'] . "?error=3\">";
|
||||
exit;
|
||||
}
|
||||
|
||||
mysqli_close($db);
|
||||
|
||||
} //if ($username == "" OR $password == "") {
|
||||
}
|
||||
|
||||
$smarty->assign('action', "$action");
|
||||
$smarty->display("$template/$templatename");
|
||||
?>
|
Reference in New Issue
Block a user