a95ec07a1cdd4046c055ffffabe31e41087b8bc8
bernd webinterface => /webinterface

bernd authored 17 years ago

1) <?php
2) 
bernd Logging aktiviert

bernd authored 16 years ago

3) require_once('inc/base.php');
bernd webinterface => /webinterface

bernd authored 17 years ago

4) require_once('inc/debug.php');
5) require_once('inc/error.php');
6) 
7) require_once('inc/db_connect.php');
8) 
9) define('ROLE_ANONYMOUS', 0);
bernd Auch mailaccounts können si...

bernd authored 16 years ago

10) define('ROLE_MAILACCOUNT', 1);
bernd VMail-accounts können sich...

bernd authored 16 years ago

11) define('ROLE_VMAIL_ACCOUNT', 2);
12) define('ROLE_SYSTEMUSER', 4);
13) define('ROLE_CUSTOMER', 8);
14) define('ROLE_SYSADMIN', 16);
bernd Erlaube subusers, die nur Z...

bernd authored 13 years ago

15) define('ROLE_SUBUSER', 32);
bernd webinterface => /webinterface

bernd authored 17 years ago

16) 
17) 
18) // Gibt die Rolle aus, wenn das Passwort stimmt
19) 
bernd * Initialisierung der Sessi...

bernd authored 16 years ago

20) function find_role($login, $password, $i_am_admin = False)
bernd webinterface => /webinterface

bernd authored 17 years ago

21) {
22)   $login = mysql_real_escape_string($login);
23)   // Domain-Admin?  <not implemented>
24)   // System-User?
25)   $uid = (int) $login;
26)   if ($uid == 0)
27)     $uid = 'NULL';
bernd Sperre Login für gesperrte...

bernd authored 12 years ago

28)   $result = db_query("SELECT passwort AS password, kundenaccount AS `primary`, status, ((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;");
bernd webinterface => /webinterface

bernd authored 17 years ago

29)   if (@mysql_num_rows($result) > 0)
30)   {
bernd * Initialisierung der Sessi...

bernd authored 16 years ago

31)     $entry = mysql_fetch_object($result);
32)     $db_password = $entry->password;
bernd webinterface => /webinterface

bernd authored 17 years ago

33)     $hash = crypt($password, $db_password);
bernd Sperre Login für gesperrte...

bernd authored 12 years ago

34)     if (($entry->status == 0 && $hash == $db_password) || $i_am_admin)
bernd * Initialisierung der Sessi...

bernd authored 16 years ago

35)     {
36)       $role = ROLE_SYSTEMUSER;
37)       if ($entry->primary)
38)         $role = $role | ROLE_CUSTOMER;
39)       if ($entry->admin)
40)         $role = $role | ROLE_SYSADMIN;
bernd Logger mit Logleveln

bernd authored 14 years ago

41)       logger(LOG_INFO, "session/checkuser", "login", "logged in systemuser »{$login}«.");
bernd * Initialisierung der Sessi...

bernd authored 16 years ago

42)       return $role;
43)     }
bernd Logger mit Logleveln

bernd authored 14 years ago

44)     logger(LOG_WARNING, "session/checkuser", "login", "wrong password for existing useraccount »{$login}«.");
bernd Mehr logging

bernd authored 15 years ago

45)   } else {
bernd Logger mit Logleveln

bernd authored 14 years ago

46)     logger(LOG_WARNING, "session/checkuser", "login", "did not find useraccount »{$login}«. trying other roles...");
bernd webinterface => /webinterface

bernd authored 17 years ago

47)   }
48) 
49)   // Customer?
50)   $customerno = (int) $login;
51)   $pass = sha1($password);
bernd sql-abfragen abstrahiert

bernd authored 16 years ago

52)   $result = db_query("SELECT passwort AS password FROM kundendaten.kunden WHERE status=0 AND id={$customerno} AND passwort='{$pass}';");
bernd * Initialisierung der Sessi...

bernd authored 16 years ago

53)   if ($i_am_admin)
54)     $result = db_query("SELECT passwort AS password FROM kundendaten.kunden WHERE status=0 AND id={$customerno}");
bernd webinterface => /webinterface

bernd authored 17 years ago

55)   if (@mysql_num_rows($result) > 0)
56)   {
57)     return ROLE_CUSTOMER;
58)   }
59) 
bernd Auch mailaccounts können si...

bernd authored 16 years ago

60)   // Mail-Account
61)   $account = $login;
62)   if (! strstr($account, '@')) {
bernd Mehr config-optionen und co...

bernd authored 14 years ago

63)     $account .= '@'.config('masterdomain');
bernd Auch mailaccounts können si...

bernd authored 16 years ago

64)   }
65)   $result = db_query("SELECT cryptpass FROM mail.courier_mailaccounts WHERE account='{$account}' LIMIT 1;");
66)   if (@mysql_num_rows($result) > 0)
67)   {
68)     $entry = mysql_fetch_object($result);
69)     $db_password = $entry->cryptpass;
70)     $hash = crypt($password, $db_password);
71)     if ($hash == $db_password || $i_am_admin)
72)     {
bernd Logger mit Logleveln

bernd authored 14 years ago

73)       logger(LOG_INFO, "session/checkuser", "login", "logged in e-mail-account »{$account}«.");
bernd Auch mailaccounts können si...

bernd authored 16 years ago

74)       return ROLE_MAILACCOUNT;
75)     }
bernd Logger mit Logleveln

bernd authored 14 years ago

76)     logger(LOG_WARNING, "session/checkuser", "login", "wrong password for existing e-mail-account »{$account}«.");
bernd Auch mailaccounts können si...

bernd authored 16 years ago

77)   }
78)   
bernd VMail-accounts können sich...

bernd authored 16 years ago

79)   // virtueller Mail-Account
80)   $account = $login;
81)   $result = db_query("SELECT cryptpass FROM mail.courier_virtual_accounts WHERE account='{$account}' LIMIT 1;");
82)   if (@mysql_num_rows($result) > 0)
83)   {
84)     $entry = mysql_fetch_object($result);
85)     $db_password = $entry->cryptpass;
86)     $hash = crypt($password, $db_password);
87)     if ($hash == $db_password || $i_am_admin)
88)     {
bernd Logger mit Logleveln

bernd authored 14 years ago

89)       logger(LOG_INFO, "session/checkuser", "login", "logged in virtual e-mail-account »{$account}«.");
bernd VMail-accounts können sich...

bernd authored 16 years ago

90)       return ROLE_VMAIL_ACCOUNT;
91)     }
bernd Logger mit Logleveln

bernd authored 14 years ago

92)     logger(LOG_WARNING, "session/checkuser", "login", "wrong password for existing virtual e-mail-account »{$account}«.");
bernd VMail-accounts können sich...

bernd authored 16 years ago

93)   }
94)   
bernd Auch mailaccounts können si...

bernd authored 16 years ago

95) 
bernd Erlaube subusers, die nur Z...

bernd authored 13 years ago

96)   // Sub-User
97) 
bernd Cert-Login geht jetztauch m...

bernd authored 13 years ago

98)   $result = db_query("SELECT password FROM system.subusers WHERE username='{$login}'");
bernd Erlaube subusers, die nur Z...

bernd authored 13 years ago

99)   if (@mysql_num_rows($result) > 0)
100)   {
bernd Cert-Login geht jetztauch m...

bernd authored 13 years ago

101)     $entry = mysql_fetch_object($result);
102)     $db_password = $entry->password;
Bernd Wurst Subusers-Modul in einer ers...

Bernd Wurst authored 12 years ago

103)     // SHA1 für alte Subuser (kaylee), SHA256 für neue Subuser
104)     if (hash("sha1", $password) == $db_password || hash("sha256", $password) == $db_password || $i_am_admin)
bernd Cert-Login geht jetztauch m...

bernd authored 13 years ago

105)     {
106)       logger(LOG_INFO, "session/checkuser", "login", "logged in virtual subuser »{$login}«.");
107)       return ROLE_SUBUSER;
108)     }
109)     logger(LOG_WARNING, "session/checkuser", "login", "wrong password for existing subuser »{$login}«.");
bernd Erlaube subusers, die nur Z...

bernd authored 13 years ago

110)   }
111) 
bernd Auch mailaccounts können si...

bernd authored 16 years ago

112) 
bernd webinterface => /webinterface

bernd authored 17 years ago

113)   // Nothing?
114)   return NULL;
115) }
116) 
117) 
bernd * Initialisierung der Sessi...

bernd authored 16 years ago

118) function get_customer_info($customer)
bernd webinterface => /webinterface

bernd authored 17 years ago

119) {
bernd * Initialisierung der Sessi...

bernd authored 16 years ago

120)   if (! $_SESSION['role'] & ROLE_CUSTOMER)
121)     return array();
bernd webinterface => /webinterface

bernd authored 17 years ago

122)   $ret = array();
bernd * Initialisierung der Sessi...

bernd authored 16 years ago

123)   $customerno = (int) $customer;
124)   if ($customerno != 0)
125)   {
126)     DEBUG('Looking up customerinfo for customer no. '.$customerno);
bernd Warnung gefixed

bernd authored 14 years ago

127)     $result = db_query("SELECT id, anrede, firma, CONCAT_WS(' ', vorname, nachname) AS name, COALESCE(email,email_rechnung,email_extern) AS email FROM kundendaten.kunden WHERE id={$customerno} LIMIT 1;");
bernd * Initialisierung der Sessi...

bernd authored 16 years ago

128)   }
129)   else
130)   {
131)     $username = mysql_real_escape_string($customer);
132)     DEBUG('looking up customer info for username '.$username);
bernd Warnung gefixed

bernd authored 14 years ago

133)     $result = db_query("SELECT id, anrede, firma, CONCAT_WS(' ', vorname, nachname) AS name, COALESCE(email,email_rechnung,email_extern) AS email FROM kundendaten.kunden AS k JOIN system.v_useraccounts AS u ON (u.kunde=k.id) WHERE u.username='{$username}'");
bernd * Initialisierung der Sessi...

bernd authored 16 years ago

134)   }
bernd webinterface => /webinterface

bernd authored 17 years ago

135)   if (@mysql_num_rows($result) == 0)
136)     system_failure("Konnte Kundendaten nicht auslesen!");
bernd Warnung gefixed

bernd authored 14 years ago

137)   $data = mysql_fetch_assoc($result);
138)   DEBUG($data);
139)   $ret['customerno'] = $data['id'];
140)   $ret['title'] = $data['anrede'];
141)   $ret['company'] = $data['firma'];
142)   $ret['name'] = $data['name'];
143)   $ret['email'] = $data['email'];
bernd webinterface => /webinterface

bernd authored 17 years ago

144)   
145)   return $ret;
146) }
147) 
148) 
bernd Erlaube subusers, die nur Z...

bernd authored 13 years ago

149) function get_subuser_info($username)
150) {
151)   $result = db_query("SELECT uid, modules FROM system.subusers WHERE username='{$username}'");
152)   if (mysql_num_rows($result) < 1)
153)   {
154)     logger(LOG_ERR, "session/checkuser", "login", "error reading subuser's data: »{$username}«");
155)     system_failure('Das Auslesen Ihrer Benutzerdaten ist fehlgeschlagen. Bitte melden Sie dies einem Administrator');
156)   }
157)   $data = mysql_fetch_assoc($result);
158)   $userinfo = get_user_info($data['uid']);
159)   $userinfo['modules'] = $data['modules'];
160)   return $userinfo;
161) }
162) 
163) 
bernd webinterface => /webinterface

bernd authored 17 years ago

164) function get_user_info($username)
165) {
166)   $username = mysql_real_escape_string($username);
bernd IPv6-Option nur anzeigen we...

bernd authored 13 years ago

167)   $result = db_query("SELECT kunde AS customerno, username, uid, homedir, name, server
bernd sql-abfragen abstrahiert

bernd authored 16 years ago

168)                       FROM system.v_useraccounts WHERE username='{$username}' OR uid='{$username}' LIMIT 1");
bernd webinterface => /webinterface

bernd authored 17 years ago

169)   if (mysql_num_rows($result) < 1)
bernd Kunden-Status wird benutzt...

bernd authored 16 years ago

170)   {
bernd Logger mit Logleveln

bernd authored 14 years ago

171)     logger(LOG_ERR, "session/checkuser", "login", "error reading user's data: »{$username}«");
bernd webinterface => /webinterface

bernd authored 17 years ago

172)     system_failure('Das Auslesen Ihrer Benutzerdaten ist fehlgeschlagen. Bitte melden Sie dies einem Administrator');
bernd Kunden-Status wird benutzt...

bernd authored 16 years ago

173)   }
bernd webinterface => /webinterface

bernd authored 17 years ago

174)   $val = @mysql_fetch_object($result);
175)   return array(
176)           'username'      => $val->username,
177)           'customerno'    => $val->customerno,
178)           'uid'           => $val->uid,
179)           'homedir'       => $val->homedir,
bernd IPv6-Option nur anzeigen we...

bernd authored 13 years ago

180)           'server'        => $val->server,
bernd webinterface => /webinterface

bernd authored 17 years ago

181)           'name'          => $val->name,
182)           );
183) }
184) 
bernd Kunden-Status wird benutzt...

bernd authored 16 years ago

185) function set_customer_verified($customerno)
186) {
187)   $customerno = (int) $customerno;
188)   db_query("UPDATE kundendaten.kunden SET status=0 WHERE id={$customerno};");
bernd Logger mit Logleveln

bernd authored 14 years ago

189)   logger(LOG_INFO, "session/checkuser", "register", "set customer's status to 0.");
bernd Kunden-Status wird benutzt...

bernd authored 16 years ago

190) }
191) 
192) function set_customer_lastlogin($customerno)
193) {
194)   $customerno = (int) $customerno;
195)   db_query("UPDATE kundendaten.kunden SET lastlogin=NOW() WHERE id={$customerno};");
196) }
197) 
bernd webinterface => /webinterface

bernd authored 17 years ago

198) function set_customer_password($customerno, $newpass)
199) {
200)   $customerno = (int) $customerno;
201)   $newpass = sha1($newpass);
bernd sql-abfragen abstrahiert

bernd authored 16 years ago

202)   db_query("UPDATE kundendaten.kunden SET passwort='$newpass' WHERE id='".$customerno."' LIMIT 1");
bernd Logger mit Logleveln

bernd authored 14 years ago

203)   logger(LOG_INFO, "session/checkuser", "pwchange", "changed customer's password.");
bernd Passwort-Ändern geht jetzt...

bernd authored 13 years ago

204) }
205) 
206) function set_subuser_password($subuser, $newpass)
207) {
208)   $subuser = mysql_real_escape_string($subuser);
209)   $uid = (int) $_SESSION['userinfo']['uid'];
210)   $newpass = sha1($newpass);
211)   db_query("UPDATE system.subusers SET password='$newpass' WHERE username='{$subuser}' AND uid={$uid}");
212)   logger(LOG_INFO, "session/checkuser", "pwchange", "changed subuser's password.");
bernd webinterface => /webinterface

bernd authored 17 years ago

213) }
214) 
215) function set_systemuser_password($uid, $newpass)
216) {
217)   $uid = (int) $uid;
218)   require_once('inc/base.php');
bernd Benutzer SHA512 wenn möglich

bernd authored 14 years ago

219)   if (defined("CRYPT_SHA512") && CRYPT_SHA512 == 1)
220)   {
221)     $rounds = rand(1000, 5000);
222)     $salt = "rounds=".$rounds."$".random_string(8);
223)     $newpass = crypt($newpass, "\$6\${$salt}\$");
224)   }
225)   else
226)   {
227)     $salt = random_string(8);
228)     $newpass = crypt($newpass, "\$1\${$salt}\$");
229)   }
bernd sql-abfragen abstrahiert

bernd authored 16 years ago

230)   db_query("UPDATE system.passwoerter SET passwort='$newpass' WHERE uid='".$uid."' LIMIT 1");
bernd Logger mit Logleveln

bernd authored 14 years ago

231)   logger(LOG_INFO, "session/checkuser", "pwchange", "changed user's password.");
bernd webinterface => /webinterface

bernd authored 17 years ago

232) }
233) 
bernd * Initialisierung der Sessi...

bernd authored 16 years ago

234) 
235) function setup_session($role, $useridentity)
236) {
237)   session_regenerate_id();
238)   $_SESSION['role'] = $role;
bernd Erlaube subusers, die nur Z...

bernd authored 13 years ago

239)   if ($role & ROLE_SUBUSER)
240)   {
241)     DEBUG("We are a sub-user");
242)     $info = get_subuser_info($useridentity);
243)     $_SESSION['userinfo'] = $info;
244)     $_SESSION['subuser'] = $useridentity;
bernd Berechtigungen für Subuser...

bernd authored 12 years ago

245)     $customer = get_customer_info($_SESSION['userinfo']['username']);
246)     $_SESSION['customerinfo'] = $customer;
247)     $_SESSION['role'] = ROLE_SYSTEMUSER | ROLE_CUSTOMER | ROLE_SUBUSER;
bernd Erlaube subusers, die nur Z...

bernd authored 13 years ago

248)     $_SESSION['restrict_modules'] = explode(',', $info['modules']);
249)     logger(LOG_INFO, "session/start", "login", "logged in user »{$info['username']}«");
250)   }
bernd * Initialisierung der Sessi...

bernd authored 16 years ago

251)   if ($role & ROLE_SYSTEMUSER)
252)   {
253)     DEBUG("We are system user");
254)     $info = get_user_info($useridentity);
255)     $_SESSION['userinfo'] = $info;
bernd Logger mit Logleveln

bernd authored 14 years ago

256)     logger(LOG_INFO, "session/start", "login", "logged in user »{$info['username']}«");
bernd * Initialisierung der Sessi...

bernd authored 16 years ago

257)     $useridentity = $info['customerno'];
258)   }
259)   if ($role & ROLE_CUSTOMER)
260)   {
261)     $info = get_customer_info($useridentity);
262)     $_SESSION['customerinfo'] = $info;
bernd Setze lastlogin nur bei Nic...

bernd authored 13 years ago

263)     if (!isset($_SESSION['admin_user'])) {
264)       set_customer_lastlogin($info['customerno']);
265)     }
bernd Logger mit Logleveln

bernd authored 14 years ago

266)     logger(LOG_INFO, "session/start", "login", "logged in customer no »{$info['customerno']}«");
bernd * Initialisierung der Sessi...

bernd authored 16 years ago

267)   }
bernd Auch mailaccounts können si...

bernd authored 16 years ago

268)   if ($role & ROLE_MAILACCOUNT)
269)   {
270)     $id = $useridentity;
271)     if (! strstr($id, '@'))
bernd Mehr config-optionen und co...

bernd authored 14 years ago

272)       $id .= '@'.config('masterdomain');
bernd Auch mailaccounts können si...

bernd authored 16 years ago

273)     $_SESSION['mailaccount'] = $id;
274)     DEBUG("We are mailaccount: {$_SESSION['mailaccount']}");
275)   }
bernd VMail-accounts können sich...

bernd authored 16 years ago

276)   if ($role & ROLE_VMAIL_ACCOUNT)
277)   {
278)     $id = $useridentity;
279)     $_SESSION['mailaccount'] = $id;
280)     DEBUG("We are virtual mailaccount: {$_SESSION['mailaccount']}");
281)   }
bernd Auch mailaccounts können si...

bernd authored 16 years ago

282) 
bernd * Initialisierung der Sessi...

bernd authored 16 years ago

283) }
284)