Show explicit error message when provided hostname is invalid (#1488550)

This commit is contained in:
Aleksander Machniak
2012-06-30 18:41:18 +02:00
parent f69eb5fd68
commit 7c8fd80310
4 changed files with 63 additions and 12 deletions

View File

@@ -58,6 +58,12 @@ class rcmail extends rcube
const JS_OBJECT_NAME = 'rcmail';
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
*
@@ -366,15 +372,23 @@ class rcmail extends rcube
* @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)
@@ -391,11 +405,18 @@ class rcmail extends rcube
break;
}
}
if (!$allowed)
return false;
if (!$allowed) {
$host = null;
}
else if (!empty($config['default_host']) && $host != rcube_utils::parse_host($config['default_host']))
}
else if (!empty($config['default_host']) && $host != rcube_utils::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);
@@ -534,6 +555,23 @@ class rcmail extends rcube
}
/**
* 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;
}
}
/**
* Auto-select IMAP host based on the posted login information
*