65750591a348e3ee9ea32da463f629e8a737b646
bernd Login vial Client-Cert über...

bernd authored 15 years ago

1) <?php
2) 
3) require_once('../config.php');
4) global $config;
5) global $prefix;
6) $prefix = '../';
7) 
8) // Das Parent-Verzeichnis in den Include-Pfad, da wir uns jetzt in einem anderen Verzeichnis befinden.
9) ini_set('include_path', ini_get('include_path').':../');
10) 
11) require_once('session/start.php');
12) require_once('inc/base.php');
13) require_once('inc/debug.php');
14) require_once('inc/error.php');
15) 
16) 
bernd Login via Client-Zertifikat...

bernd authored 15 years ago

17) function prepare_cert($cert)
18) {
19) 	return str_replace(array('-----BEGIN CERTIFICATE-----', '-----END CERTIFICATE-----', ' ', "\n"), array(), $cert);
20) }
bernd Login vial Client-Cert über...

bernd authored 15 years ago

21) 
22) 
23) function get_logins_by_cert($cert) 
24) {
bernd Login via Client-Zertifikat...

bernd authored 15 years ago

25) 	$cert = mysql_real_escape_string(prepare_cert($cert));
bernd Login vial Client-Cert über...

bernd authored 15 years ago

26) 	$query = "SELECT type,username,startpage FROM system.clientcert WHERE cert='{$cert}'";
27) 	$result = db_query($query);
28) 	if (mysql_num_rows($result) < 1)
29) 		return NULL;
30) 	else {
31) 		$ret = array();
32) 		while ($row = mysql_fetch_assoc($result)) {
33) 			$ret[] = $row;
34) 		}
35) 		return $ret;
36) 	}
37) }
38) 
bernd Login via Client-Zertifikat...

bernd authored 15 years ago

39) DEBUG($_ENV);
bernd Login vial Client-Cert über...

bernd authored 15 years ago

40) 
bernd Ermögliche Angabe einer Red...

bernd authored 15 years ago

41) if ($_SESSION['role'] != ROLE_ANONYMOUS && isset($_REQUEST['record']) && isset($_REQUEST['backto']) && check_path($_REQUEST['backto']))
bernd Login via Client-Zertifikat...

bernd authored 15 years ago

42) {
43)   DEBUG('recording client-cert');
44)   if (isset($_ENV['REDIRECT_SSL_CLIENT_CERT']))
45)   {
46)     $_SESSION['clientcert_cert'] = prepare_cert($_ENV['REDIRECT_SSL_CLIENT_CERT']);
47)     $_SESSION['clientcert_dn'] = $_ENV['REDIRECT_SSL_CLIENT_S_DN'];
48)     $_SESSION['clientcert_issuer'] = $_ENV['REDIRECT_SSL_CLIENT_I_DN'];
bernd Bug im Client-Zertfikat-Man...

bernd authored 15 years ago

49)     header('Location: '.$prefix.$_REQUEST['backto'].encode_querystring(''));
bernd Login via Client-Zertifikat...

bernd authored 15 years ago

50)     die();
51)   }
52)   else
53)   {
54)     system_failure('Ihr Browser hat kein Client-Zertifikat gesendet');
55)   }
56) }
57) elseif (isset($_REQUEST['type']) && isset($_REQUEST['username'])) {
bernd Login vial Client-Cert über...

bernd authored 15 years ago

58)   if (!isset($_ENV['REDIRECT_SSL_CLIENT_CERT'])) 
59)     system_failure('Ihr Browser hat kein Client-Zertifikat gesendet');
60) 
61)   $ret = get_logins_by_cert($_ENV['REDIRECT_SSL_CLIENT_CERT']);
62)   foreach ($ret as $account) {
63)     if (($account['type'] == $_REQUEST['type']) && ($account['username'] == $_REQUEST['username'])) {
64)       $uid = $account['username'];
65)       $role = find_role($uid, '', True);
66)       setup_session($role, $uid);
67)       $destination = 'go/index/index';
68)       if (check_path($account['startpage']))
69)         $destination = $account['startpage'];
bernd Ermögliche Angabe einer Red...

bernd authored 15 years ago

70)       if (isset($_REQUEST['destination']) && check_path($_REQUEST['destination']))
71)         $destination = $_REQUEST['destination'];
bernd Login vial Client-Cert über...

bernd authored 15 years ago

72)       header('Location: ../'.$destination);
73)       die();
74)     }
75)   }
76)   system_failure('Der angegebene Account kann mit diesem Client-Zertifikat nicht eingeloggt werden.');
77) }
78) else
79) {
80)   if (isset($_ENV['REDIRECT_SSL_CLIENT_CERT'])) {
81)     $ret = get_logins_by_cert($_ENV['REDIRECT_SSL_CLIENT_CERT']);
82)     if ($ret === NULL) {
83)       system_failure('Ihr Browser hat ein Client-Zertifikat gesendet, dieses ist aber noch nicht für den Zugang hinterlegt. Gehen Sie bitte zurück und melden Sie sich bitte per Benutzername und Passwort an.');
84)     }
85)     if (count($ret) == 1) {
86)       $uid = $ret[0]['username'];
87)       $role = find_role($uid, '', True);
88)       setup_session($role, $uid);
89)       $destination = 'go/index/index';
90)       if (check_path($ret[0]['startpage']))
91)         $destination = $ret[0]['startpage'];
bernd Ermögliche Angabe einer Red...

bernd authored 15 years ago

92)       if (isset($_REQUEST['destination']) && check_path($_REQUEST['destination']))
93)         $destination = $_REQUEST['destination'];
bernd Login vial Client-Cert über...

bernd authored 15 years ago

94)       header('Location: ../'.$destination);
95)       die();
96)     }
97)     output('<p>Ihr Browser hat ein gültiges SSL-Client-Zertifikat gesendet, mit dem Sie sich auf dieser Seite einloggen können. Allerdings haben Sie dieses Client-Zertifikat für mehrere Zugänge hinterlegt. Wählen Sie bitte den Zugang aus, mit dem Sie sich anmelden möchten.</p>
98)       <ul>');
99)     foreach ($ret as $account) {
100)       $type = 'System-Account';
101)       if ($account['type'] == 'email') {
102)         $type = 'E-Mail-Konto';
103)       }
104)       elseif ($account['type'] == 'customer') {
105)         $type = 'Kundenaccount';
106)       }
bernd Ermögliche Angabe einer Red...

bernd authored 15 years ago

107)       output('<li>'.internal_link('', $type.': <strong>'.$account['username'].'</strong>', 'type='.$account['type'].'&username='.urlencode($account['username']).'&destination='.urlencode($destination)).'</li>');