Mercurial > hg > rc1
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 } |
