diff options
author | thomascube <thomas@roundcube.net> | 2006-11-22 11:56:22 +0000 |
---|---|---|
committer | thomascube <thomas@roundcube.net> | 2006-11-22 11:56:22 +0000 |
commit | 0a020cac3e62bdcb6d3912ab696d87517c871029 (patch) | |
tree | 8f5440aba65d9f645c001ded2b3afc9669b9033d /program | |
parent | d04d202234b0ba1e65b1c581acf0cbe715120dd7 (diff) |
Added host auto-selection and correct password encoding for IMAP login
Diffstat (limited to 'program')
-rw-r--r-- | program/include/main.inc | 44 | ||||
-rw-r--r-- | program/lib/imap.inc | 4 |
2 files changed, 43 insertions, 5 deletions
diff --git a/program/include/main.inc b/program/include/main.inc index 55336fd30..9cf1f6767 100644 --- a/program/include/main.inc +++ b/program/include/main.inc @@ -413,6 +413,34 @@ function rcmail_set_locale($lang) } +// auto-select IMAP host based on the posted login information +function rcmail_autoselect_host() + { + global $CONFIG; + + $host = isset($_POST['_host']) ? get_input_value('_host', RCUBE_INPUT_POST) : $CONFIG['default_host']; + if (is_array($host)) + { + list($user, $domain) = explode('@', get_input_value('_user', RCUBE_INPUT_POST)); + if (!empty($domain)) + { + foreach ($host as $imap_host => $mail_domains) + if (is_array($mail_domains) && in_array($domain, $mail_domains)) + { + $host = $imap_host; + break; + } + } + + // take the first entry if $host is still an array + if (is_array($host)) + $host = array_shift($host); + } + + return $host; + } + + // perfom login to the IMAP server and to the webmail service function rcmail_login($user, $pass, $host=NULL) { @@ -1732,14 +1760,22 @@ function rcmail_login_form($attrib) $select_host = new select(array('name' => '_host', 'id' => 'rcmloginhost')); foreach ($CONFIG['default_host'] as $key => $value) - $select_host->add($value, (is_numeric($key) ? $value : $key)); + { + if (!is_array($value)) + $select_host->add($value, (is_numeric($key) ? $value : $key)); + else + { + unset($select_host); + break; + } + } - $fields['host'] = $select_host->show($_POST['_host']); + $fields['host'] = isset($select_host) ? $select_host->show($_POST['_host']) : null; } else if (!strlen($CONFIG['default_host'])) { - $input_host = new textfield(array('name' => '_host', 'id' => 'rcmloginhost', 'size' => 30)); - $fields['host'] = $input_host->show($_POST['_host']); + $input_host = new textfield(array('name' => '_host', 'id' => 'rcmloginhost', 'size' => 30)); + $fields['host'] = $input_host->show($_POST['_host']); } $form_name = strlen($attrib['form']) ? $attrib['form'] : 'form'; diff --git a/program/lib/imap.inc b/program/lib/imap.inc index caa1d2721..6bc47a198 100644 --- a/program/lib/imap.inc +++ b/program/lib/imap.inc @@ -39,6 +39,7 @@ - Added BCC and REFERENCE to the list of headers to fetch in iil_C_FetchHeaders() - Leave messageID unchanged in iil_C_FetchHeaders() - Avoid stripslahes in iil_Connect() + - Escape quotes and backslashes in iil_C_Login() - Added patch to iil_SortHeaders() by Richard Green - Removed <br> from error messages (better for logging) - Added patch to iil_C_Sort() enabling UID SORT commands @@ -225,8 +226,9 @@ function iil_C_Authenticate(&$conn, $user, $pass, $encChallenge){ function iil_C_Login(&$conn, $user, $password){ + $password = strtr($password, array('"'=>'\\"', '\\' => '\\\\')); fputs($conn->fp, "a001 LOGIN $user \"$password\"\r\n"); - + do{ $line = iil_ReadReply($conn->fp); }while(!iil_StartsWith($line, "a001 ")); |