bernd commited on 2007-07-30 13:00:58
Zeige 9 geänderte Dateien mit 75 Einfügungen und 60 Löschungen.
git-svn-id: https://svn.schokokeks.org/repos/tools/webinterface/trunk@564 87cf0b9e-d624-0410-a070-f6ee81989793
... | ... |
@@ -8,19 +8,10 @@ require_once('class/domain.php'); |
8 | 8 |
|
9 | 9 |
require_role(array(ROLE_SYSTEMUSER, ROLE_CUSTOMER)); |
10 | 10 |
|
11 |
-switch ($_SESSION['role']) |
|
12 |
-{ |
|
13 |
- case ROLE_SYSTEMUSER: |
|
14 |
- $user_domains = get_domain_list($_SESSION['userinfo']['customerno'], $_SESSION['userinfo']['uid']); |
|
15 |
- $info = 'userinfo'; |
|
16 |
- break; |
|
17 |
- case ROLE_CUSTOMER: |
|
11 |
+if ($_SESSION['role'] & ROLE_CUSTOMER) |
|
18 | 12 |
$user_domains = get_domain_list($_SESSION['customerinfo']['customerno']); |
19 |
- break; |
|
20 |
- default: |
|
21 |
- $info = NULL; |
|
22 |
- break; |
|
23 |
-} |
|
13 |
+else |
|
14 |
+ $user_domains = get_domain_list($_SESSION['userinfo']['customerno'], $_SESSION['userinfo']['uid']); |
|
24 | 15 |
|
25 | 16 |
$title = "Domainüberblick"; |
26 | 17 |
|
... | ... |
@@ -4,13 +4,10 @@ $menu = array(); |
4 | 4 |
|
5 | 5 |
$role = $_SESSION['role']; |
6 | 6 |
|
7 |
-switch ($role) |
|
7 |
+ |
|
8 |
+if (($role & ROLE_CUSTOMER) || ($role & ROLE_SYSTEMUSER)) |
|
8 | 9 |
{ |
9 |
- case ROLE_ANONYMOUS: |
|
10 |
- break; |
|
11 |
- default: |
|
12 | 10 |
$menu["domains_domains"] = array("label" => "Domains", "file" => "domains.php", "weight" => 1); |
13 |
- |
|
14 | 11 |
} |
15 | 12 |
|
16 | 13 |
if (empty($menu)) |
... | ... |
@@ -4,11 +4,9 @@ $menu = array(); |
4 | 4 |
|
5 | 5 |
$role = $_SESSION['role']; |
6 | 6 |
|
7 |
-switch ($role) |
|
7 |
+if ($role & ROLE_SYSTEMUSER) |
|
8 | 8 |
{ |
9 |
- case ROLE_SYSTEMUSER: |
|
10 | 9 |
$menu["imap_accounts"] = array("label" => "IMAP/POP3", "file" => "accounts.php", "weight" => 10); |
11 |
- |
|
12 | 10 |
} |
13 | 11 |
|
14 | 12 |
if (empty($menu)) |
... | ... |
@@ -12,15 +12,11 @@ if ($_POST['password1'] != '') |
12 | 12 |
{ |
13 | 13 |
check_form_token('index_chpass'); |
14 | 14 |
$result = NULL; |
15 |
- switch ($_SESSION['role']) |
|
16 |
- { |
|
17 |
- case ROLE_SYSTEMUSER: |
|
15 |
+ if ($_SESSION['role'] & ROLE_SYSTEMUSER) |
|
18 | 16 |
$result = find_role($_SESSION['userinfo']['uid'], $_POST['old_password']); |
19 |
- break; |
|
20 |
- case ROLE_CUSTOMER: |
|
17 |
+ else |
|
21 | 18 |
$result = find_role($_SESSION['customerinfo']['customerno'], $_POST['old_password']); |
22 |
- break; |
|
23 |
- } |
|
19 |
+ |
|
24 | 20 |
if ($result == NULL) |
25 | 21 |
input_error('Das bisherige Passwort ist nicht korrekt!'); |
26 | 22 |
elseif ($_POST['password2'] != $_POST['password1']) |
... | ... |
@@ -38,7 +34,7 @@ if ($_POST['password1'] != '') |
38 | 34 |
elseif ($result === ROLE_CUSTOMER) |
39 | 35 |
set_customer_password($_SESSION['customerinfo']['customerno'], $_POST['password1']); |
40 | 36 |
else |
41 |
- system_failure("WTF?!"); |
|
37 |
+ system_failure("WTF?! (\$result={$result})"); |
|
42 | 38 |
|
43 | 39 |
if (! $debugmode) |
44 | 40 |
header('Location: index.php'); |
... | ... |
@@ -49,7 +45,7 @@ if ($_POST['password1'] != '') |
49 | 45 |
|
50 | 46 |
|
51 | 47 |
|
52 |
-if ($_SESSION['role'] == ROLE_SYSTEMUSER) |
|
48 |
+if ($_SESSION['role'] & ROLE_SYSTEMUSER) |
|
53 | 49 |
warning('Beachten Sie: Wenn Sie hier Ihr Passwort ändern, betrifft dies auch Ihr Anmelde-Passwort am Server (SSH).'); |
54 | 50 |
|
55 | 51 |
output('<h3>Passwort ändern</h3> |
... | ... |
@@ -24,6 +24,14 @@ case ROLE_SYSTEMUSER: |
24 | 24 |
case ROLE_CUSTOMER: |
25 | 25 |
$role = "{$_SESSION['customerinfo']['name']}, angemeldet als Kunde"; |
26 | 26 |
break; |
27 |
+case ROLE_CUSTOMER | ROLE_SYSTEMUSER: |
|
28 |
+ $role = "{$_SESSION['customerinfo']['name']}, angemeldet als Kunde und Benutzer"; |
|
29 |
+ break; |
|
30 |
+case ROLE_CUSTOMER | ROLE_SYSTEMUSER | ROLE_SYSADMIN: |
|
31 |
+ $role = "{$_SESSION['customerinfo']['name']}, angemeldet als Kunde, Benutzer und Administrator"; |
|
32 |
+ break; |
|
33 |
+default: |
|
34 |
+ system_failure('Interner Fehler (»Unbekannte Rolle: '.$_SESSION['role'].'«)'); |
|
27 | 35 |
} |
28 | 36 |
|
29 | 37 |
|
... | ... |
@@ -4,11 +4,9 @@ $menu = array(); |
4 | 4 |
|
5 | 5 |
$role = $_SESSION['role']; |
6 | 6 |
|
7 |
-switch ($role) |
|
7 |
+if ($role & ROLE_CUSTOMER) |
|
8 | 8 |
{ |
9 |
- case ROLE_CUSTOMER: |
|
10 | 9 |
$menu["systemuser"] = array("label" => "Benutzeraccounts", "file" => "accounts.php", "weight" => 30); |
11 |
- |
|
12 | 10 |
} |
13 | 11 |
|
14 | 12 |
if (empty($menu)) |
... | ... |
@@ -9,13 +9,13 @@ require_once('inc/db_connect.php'); |
9 | 9 |
define('ROLE_ANONYMOUS', 0); |
10 | 10 |
define('ROLE_DOMAINADMIN', 1); |
11 | 11 |
define('ROLE_SYSTEMUSER', 2); |
12 |
-define('ROLE_CUSTOMER', 3); |
|
13 |
-define('ROLE_SYSADMIN', 4); |
|
12 |
+define('ROLE_CUSTOMER', 4); |
|
13 |
+define('ROLE_SYSADMIN', 8); |
|
14 | 14 |
|
15 | 15 |
|
16 | 16 |
// Gibt die Rolle aus, wenn das Passwort stimmt |
17 | 17 |
|
18 |
-function find_role($login, $password) |
|
18 |
+function find_role($login, $password, $i_am_admin = False) |
|
19 | 19 |
{ |
20 | 20 |
$login = mysql_real_escape_string($login); |
21 | 21 |
// Domain-Admin? <not implemented> |
... | ... |
@@ -23,19 +23,29 @@ function find_role($login, $password) |
23 | 23 |
$uid = (int) $login; |
24 | 24 |
if ($uid == 0) |
25 | 25 |
$uid = 'NULL'; |
26 |
- $result = db_query("SELECT passwort AS password FROM system.v_useraccounts LEFT JOIN system.passwoerter USING (uid) WHERE uid={$uid} OR username='{$login}' LIMIT 1;"); |
|
26 |
+ $result = db_query("SELECT passwort AS password, (u.uid = (SELECT min(uid) FROM system.v_useraccounts AS acc WHERE acc.kunde=u.kunde)) AS `primary`, ((SELECT acc.uid FROM system.v_useraccounts AS acc LEFT JOIN system.gruppenzugehoerigkeit USING (uid) LEFT JOIN system.gruppen AS g ON (g.gid=gruppenzugehoerigkeit.gid) WHERE g.name='admin' AND acc.uid=u.uid) IS NOT NULL) AS admin FROM system.v_useraccounts AS u LEFT JOIN system.passwoerter USING(uid) WHERE u.uid={$uid} OR username='{$login}' LIMIT 1;"); |
|
27 | 27 |
if (@mysql_num_rows($result) > 0) |
28 | 28 |
{ |
29 |
- $db_password = mysql_fetch_object($result)->password; |
|
29 |
+ $entry = mysql_fetch_object($result); |
|
30 |
+ $db_password = $entry->password; |
|
30 | 31 |
$hash = crypt($password, $db_password); |
31 |
- if ($hash == $db_password) |
|
32 |
- return ROLE_SYSTEMUSER; |
|
32 |
+ if ($hash == $db_password || $i_am_admin) |
|
33 |
+ { |
|
34 |
+ $role = ROLE_SYSTEMUSER; |
|
35 |
+ if ($entry->primary) |
|
36 |
+ $role = $role | ROLE_CUSTOMER; |
|
37 |
+ if ($entry->admin) |
|
38 |
+ $role = $role | ROLE_SYSADMIN; |
|
39 |
+ return $role; |
|
40 |
+ } |
|
33 | 41 |
} |
34 | 42 |
|
35 | 43 |
// Customer? |
36 | 44 |
$customerno = (int) $login; |
37 | 45 |
$pass = sha1($password); |
38 | 46 |
$result = db_query("SELECT passwort AS password FROM kundendaten.kunden WHERE status=0 AND id={$customerno} AND passwort='{$pass}';"); |
47 |
+ if ($i_am_admin) |
|
48 |
+ $result = db_query("SELECT passwort AS password FROM kundendaten.kunden WHERE status=0 AND id={$customerno}"); |
|
39 | 49 |
if (@mysql_num_rows($result) > 0) |
40 | 50 |
{ |
41 | 51 |
return ROLE_CUSTOMER; |
... | ... |
@@ -46,11 +56,23 @@ function find_role($login, $password) |
46 | 56 |
} |
47 | 57 |
|
48 | 58 |
|
49 |
-function get_customer_info($customerno) |
|
59 |
+function get_customer_info($customer) |
|
50 | 60 |
{ |
61 |
+ if (! $_SESSION['role'] & ROLE_CUSTOMER) |
|
62 |
+ return array(); |
|
51 | 63 |
$ret = array(); |
52 |
- $customerno = (int) $customerno; |
|
64 |
+ $customerno = (int) $customer; |
|
65 |
+ if ($customerno != 0) |
|
66 |
+ { |
|
67 |
+ DEBUG('Looking up customerinfo for customer no. '.$customerno); |
|
53 | 68 |
$result = db_query("SELECT id, anrede, firma, CONCAT_WS(' ', vorname, nachname) AS name FROM kundendaten.kunden WHERE id={$customerno} LIMIT 1;"); |
69 |
+ } |
|
70 |
+ else |
|
71 |
+ { |
|
72 |
+ $username = mysql_real_escape_string($customer); |
|
73 |
+ DEBUG('looking up customer info for username '.$username); |
|
74 |
+ $result = db_query("SELECT id, anrede, firma, CONCAT_WS(' ', vorname, nachname) AS name FROM kundendaten.kunden AS k JOIN system.v_useraccounts AS u ON (u.kunde=k.id) WHERE u.username='{$username}'"); |
|
75 |
+ } |
|
54 | 76 |
if (@mysql_num_rows($result) == 0) |
55 | 77 |
system_failure("Konnte Kundendaten nicht auslesen!"); |
56 | 78 |
$data = mysql_fetch_object($result); |
... | ... |
@@ -127,4 +149,26 @@ function set_systemuser_password($uid, $newpass) |
127 | 149 |
logger("session/checkuser.php", "pwchange", "changed user's password."); |
128 | 150 |
} |
129 | 151 |
|
152 |
+ |
|
153 |
+function setup_session($role, $useridentity) |
|
154 |
+{ |
|
155 |
+ session_regenerate_id(); |
|
156 |
+ $_SESSION['role'] = $role; |
|
157 |
+ if ($role & ROLE_SYSTEMUSER) |
|
158 |
+ { |
|
159 |
+ DEBUG("We are system user"); |
|
160 |
+ $info = get_user_info($useridentity); |
|
161 |
+ $_SESSION['userinfo'] = $info; |
|
162 |
+ logger("session/start.php", "login", "logged in user »{$info['username']}«"); |
|
163 |
+ $useridentity = $info['customerno']; |
|
164 |
+ } |
|
165 |
+ if ($role & ROLE_CUSTOMER) |
|
166 |
+ { |
|
167 |
+ $info = get_customer_info($useridentity); |
|
168 |
+ $_SESSION['customerinfo'] = $info; |
|
169 |
+ set_customer_lastlogin($info['customerno']); |
|
170 |
+ logger("session/start.php", "login", "logged in customer no »{$info['customerno']}«"); |
|
171 |
+ } |
|
172 |
+} |
|
173 |
+ |
|
130 | 174 |
?> |
... | ... |
@@ -32,23 +32,7 @@ if (isset($_POST['username']) && isset($_POST['password'])) |
32 | 32 |
} |
33 | 33 |
else |
34 | 34 |
{ |
35 |
- session_regenerate_id(); |
|
36 |
- $_SESSION['role'] = $role; |
|
37 |
- |
|
38 |
- switch ($role) |
|
39 |
- { |
|
40 |
- case ROLE_SYSTEMUSER: |
|
41 |
- $info = get_user_info($_POST['username']); |
|
42 |
- $_SESSION['userinfo'] = $info; |
|
43 |
- logger("session/start.php", "login", "logged in user »{$info['username']}«"); |
|
44 |
- break; |
|
45 |
- case ROLE_CUSTOMER: |
|
46 |
- $info = get_customer_info($_POST['username']); |
|
47 |
- $_SESSION['customerinfo'] = $info; |
|
48 |
- set_customer_lastlogin($info['customerno']); |
|
49 |
- logger("session/start.php", "login", "logged in customer no »{$info['customerno']}«"); |
|
50 |
- break; |
|
51 |
- } |
|
35 |
+ setup_session($role, $_POST['username']); |
|
52 | 36 |
} |
53 | 37 |
unset($_POST['username']); |
54 | 38 |
unset($_POST['password']); |
55 | 39 |