|
|
@ -131,6 +131,11 @@ class rcmail |
|
|
|
private $shutdown_functions = array(); |
|
|
|
private $expunge_cache = false; |
|
|
|
|
|
|
|
const ERROR_STORAGE = -2; |
|
|
|
const ERROR_INVALID_REQUEST = 1; |
|
|
|
const ERROR_INVALID_HOST = 2; |
|
|
|
const ERROR_COOKIES_DISABLED = 3; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* This implements the 'singleton' design pattern |
|
|
@ -814,15 +819,23 @@ class rcmail |
|
|
|
* @param string Mail storage (IMAP) user name |
|
|
|
* @param string Mail storage (IMAP) password |
|
|
|
* @param string Mail storage (IMAP) host |
|
|
|
* @param bool Enables cookie check |
|
|
|
* |
|
|
|
* @return boolean True on success, False on failure |
|
|
|
*/ |
|
|
|
function login($username, $pass, $host=NULL) |
|
|
|
function login($username, $pass, $host = null, $cookiecheck = false) |
|
|
|
{ |
|
|
|
$this->login_error = null; |
|
|
|
|
|
|
|
if (empty($username)) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
if ($cookiecheck && empty($_COOKIE)) { |
|
|
|
$this->login_error = self::ERROR_COOKIES_DISABLED; |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
$config = $this->config->all(); |
|
|
|
|
|
|
|
if (!$host) |
|
|
@ -839,11 +852,18 @@ class rcmail |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
if (!$allowed) |
|
|
|
return false; |
|
|
|
if (!$allowed) { |
|
|
|
$host = null; |
|
|
|
} |
|
|
|
else if (!empty($config['default_host']) && $host != rcube_parse_host($config['default_host'])) |
|
|
|
} |
|
|
|
else if (!empty($config['default_host']) && $host != rcube_parse_host($config['default_host'])) { |
|
|
|
$host = null; |
|
|
|
} |
|
|
|
|
|
|
|
if (!$host) { |
|
|
|
$this->login_error = self::ERROR_INVALID_HOST; |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
// parse $host URL
|
|
|
|
$a_host = parse_url($host); |
|
|
@ -983,6 +1003,23 @@ class rcmail |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* Returns error code of last login operation |
|
|
|
* |
|
|
|
* @return int Error code |
|
|
|
*/ |
|
|
|
public function login_error() |
|
|
|
{ |
|
|
|
if ($this->login_error) { |
|
|
|
return $this->login_error; |
|
|
|
} |
|
|
|
|
|
|
|
if ($this->storage && $this->storage->get_error_code() < -1) { |
|
|
|
return self::ERROR_STORAGE; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* Set storage parameters. |
|
|
|
* This must be done AFTER connecting to the server! |
|
|
|