comparison plugins/krb_authentication/krb_authentication.php @ 0:1e000243b222

vanilla 1.3.3 distro, I hope
author Charlie Root
date Thu, 04 Jan 2018 15:50:29 -0500
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:1e000243b222
1 <?php
2
3 /**
4 * Kerberos Authentication
5 *
6 * Make use of an existing Kerberos authentication and perform login
7 * with the existing user credentials
8 *
9 * For other configuration options, see config.inc.php.dist!
10 *
11 * @license GNU GPLv3+
12 * @author Jeroen van Meeuwen
13 */
14 class krb_authentication extends rcube_plugin
15 {
16 private $redirect_query;
17
18 /**
19 * Plugin initialization
20 */
21 function init()
22 {
23 $this->add_hook('startup', array($this, 'startup'));
24 $this->add_hook('authenticate', array($this, 'authenticate'));
25 $this->add_hook('login_after', array($this, 'login'));
26 $this->add_hook('storage_connect', array($this, 'storage_connect'));
27 }
28
29 /**
30 * Startup hook handler
31 */
32 function startup($args)
33 {
34 if (!empty($_SERVER['REMOTE_USER']) && !empty($_SERVER['KRB5CCNAME'])) {
35 // handle login action
36 if (empty($_SESSION['user_id'])) {
37 $args['action'] = 'login';
38 $this->redirect_query = $_SERVER['QUERY_STRING'];
39 }
40 else {
41 $_SESSION['password'] = null;
42 }
43 }
44
45 return $args;
46 }
47
48 /**
49 * Authenticate hook handler
50 */
51 function authenticate($args)
52 {
53 if (!empty($_SERVER['REMOTE_USER']) && !empty($_SERVER['KRB5CCNAME'])) {
54 // Load plugin's config file
55 $this->load_config();
56
57 $rcmail = rcmail::get_instance();
58 $host = $rcmail->config->get('krb_authentication_host');
59
60 if (is_string($host) && trim($host) !== '' && empty($args['host'])) {
61 $args['host'] = rcube_utils::idn_to_ascii(rcube_utils::parse_host($host));
62 }
63
64 if (!empty($_SERVER['REMOTE_USER'])) {
65 $args['user'] = $_SERVER['REMOTE_USER'];
66 $args['pass'] = null;
67 }
68
69 $args['cookiecheck'] = false;
70 $args['valid'] = true;
71 }
72
73 return $args;
74 }
75
76 /**
77 * Storage_connect hook handler
78 */
79 function storage_connect($args)
80 {
81 if (!empty($_SERVER['REMOTE_USER']) && !empty($_SERVER['KRB5CCNAME'])) {
82 // Load plugin's config file
83 $this->load_config();
84
85 $rcmail = rcmail::get_instance();
86 $context = $rcmail->config->get('krb_authentication_context');
87
88 $args['gssapi_context'] = $context ?: 'imap/kolab.example.org@EXAMPLE.ORG';
89 $args['gssapi_cn'] = $_SERVER['KRB5CCNAME'];
90 $args['auth_type'] = 'GSSAPI';
91 }
92
93 return $args;
94 }
95
96 /**
97 * login_after hook handler
98 */
99 function login($args)
100 {
101 // Redirect to the previous QUERY_STRING
102 if ($this->redirect_query) {
103 header('Location: ./?' . $this->redirect_query);
104 exit;
105 }
106
107 return $args;
108 }
109 }