| // +----------------------------------------------------------------------+ // // $Id: IMAP.php,v 1.7 2003/10/20 09:38:29 yavo Exp $ // require_once "Auth/Container.php"; require_once "PEAR.php"; /** * Storage driver for fetching login data from an IMAP server * * This class is based on LDAP containers, but it very simple. * By default it connects to localhost:143 * The constructor will first check if the host:port combination is * actually reachable. This behaviour can be disabled. * It then tries to create an IMAP stream (without opening a mailbox) * If you wish to pass extended options to the connections, you may * do so by specifying protocol options. * * To use this storage containers, you have to use the * following syntax: * * 'mail.example.com', * 'port' => 143, * ); * $myAuth = new Auth('IMAP', $params); * .... * * By default we connect without any protocol options set. However, some * servers require you to connect with the notls or norsh options set. * To do this you need to add the following value to the params array: * 'baseDSN' => '/imap/notls/norsh' * * To connect to an SSL IMAP server: * 'baseDSN' => '/imap/ssl' * * To connect to an SSL IMAP server with a self-signed certificate: * 'baseDSN' => '/imap/ssl/novalidate-cert' * * Further options may be available and can be found on the php site at * http://www.php.net/manual/function.imap-open.php * */ /* * * @author Jeroen Houben , Cipriano Groenendal * @package Auth * @version $Revision: 1.7 $ */ class Auth_Container_IMAP extends Auth_Container { /** * Options for the class * @var array */ var $options = array(); /** * Constructor of the container class * * @param $params, associative hash with host,port,basedn and userattr key * @param $params, associative array with host, port, baseDSN, checkServer key. * @return object Returns an error object if something went wrong */ function Auth_Container_IMAP($params) { if (!extension_loaded('imap')) { return PEAR::raiseError("Cannot use IMAP authentication, IMAP extension not loaded!", 41, PEAR_ERROR_DIE); } $this->_setDefaults(); // set parameters (if any) if (is_array($params)) { $this->_parseOptions($params); } if ($this->options['checkServer']) { $this->_checkServer($this->options['timeout']); } return true; } /** * Set some default options * * @access private */ function _setDefaults() { $this->options['host'] = 'localhost'; $this->options['port'] = 143; $this->options['baseDSN'] = ''; $this->options['checkServer'] = true; $this->options['timeout'] = 20; } /** * Check if the given server and port are reachable * * @access private */ function _checkServer() { $fp = @fsockopen ($this->options['host'], $this->options['port'], $errno, $errstr, $timeout); if (is_resource($fp)) { @fclose($fp); } else { $message = "Error connecting to IMAP server " . $this->options['host'] . ":" . $this->options['port']; return PEAR::raiseError($message, 41, PEAR_ERROR_DIE); } } /** * Parse options passed to the container class * * @access private * @param array */ function _parseOptions($array) { foreach ($array as $key => $value) { $this->options[$key] = $value; } } /** * Try to open a IMAP stream using $username / $password * * @param string Username * @param string Password * @return boolean */ function fetchData($username, $password) { $dsn = '{'.$this->options['host'].':'.$this->options['port'].$this->options['baseDSN'].'}'; $conn = @imap_open ($dsn, $username, $password, OP_HALFOPEN); if (is_resource($conn)){ $this->activeUser = $username; @imap_close($conn); return true; } else { $this->activeUser = ''; return false; } } } ?>