From 0a020cac3e62bdcb6d3912ab696d87517c871029 Mon Sep 17 00:00:00 2001 From: thomascube <thomas@roundcube.net> Date: Wed, 22 Nov 2006 06:56:22 -0500 Subject: [PATCH] Added host auto-selection and correct password encoding for IMAP login --- program/include/main.inc | 94 ++++++++++++++++++++++++++++++++++++----------- 1 files changed, 72 insertions(+), 22 deletions(-) diff --git a/program/include/main.inc b/program/include/main.inc index c6e9857..9cf1f67 100644 --- a/program/include/main.inc +++ b/program/include/main.inc @@ -365,7 +365,7 @@ // add common javascripts $javascript = "var $JS_OBJECT_NAME = new rcube_webmail();\n"; - $javascript .= "$JS_OBJECT_NAME.set_env('comm_path', '$COMM_PATH');\n"; + $javascript .= sprintf("%s.set_env('comm_path', '%s');\n", $JS_OBJECT_NAME, str_replace('&', '&', $COMM_PATH)); if (isset($CONFIG['javascript_config'] )){ foreach ($CONFIG['javascript_config'] as $js_config_var){ @@ -410,6 +410,34 @@ $MBSTRING = $s_mbstring_loaded = FALSE; $OUTPUT->set_charset(rcube_language_prop($lang, 'charset')); + } + + +// 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; } @@ -550,21 +578,28 @@ $user_name = $user!=$user_email ? $user : ''; // try to resolve the e-mail address from the virtuser table - if (!empty($CONFIG['virtuser_query'])) - { - $sql_result = $DB->query(preg_replace('/%u/', $user, $CONFIG['virtuser_query'])); - if ($sql_arr = $DB->fetch_array($sql_result)) - $user_email = $sql_arr[0]; + if (!empty($CONFIG['virtuser_query']) && + ($sql_result = $DB->query(preg_replace('/%u/', $user, $CONFIG['virtuser_query']))) && + ($DB->num_rows()>0)) + while ($sql_arr = $DB->fetch_array($sql_result)) + { + $DB->query("INSERT INTO ".get_table_name('identities')." + (user_id, del, standard, name, email) + VALUES (?, 0, 1, ?, ?)", + $user_id, + $user_name, + preg_replace('/^@/', $user . '@', $sql_arr[0])); + } + else + { + // also create new identity records + $DB->query("INSERT INTO ".get_table_name('identities')." + (user_id, del, standard, name, email) + VALUES (?, 0, 1, ?, ?)", + $user_id, + $user_name, + $user_email); } - - // also create new identity records - $DB->query("INSERT INTO ".get_table_name('identities')." - (user_id, del, standard, name, email) - VALUES (?, 0, 1, ?, ?)", - $user_id, - $user_name, - $user_email); - // get existing mailboxes $a_mailboxes = $IMAP->list_mailboxes(); @@ -958,8 +993,9 @@ } else if ($mode=='remove') $str = strip_tags($str); - - $out = strtr($str, $encode_arr); + + // avoid douple quotation of & + $out = preg_replace('/&([a-z]{2,5});/', '&\\1;', strtr($str, $encode_arr)); return $newlines ? nl2br($out) : $out; } @@ -1055,7 +1091,13 @@ return $value; } - +/** + * Remove single and double quotes from given string + */ +function strip_quotes($str) +{ + return preg_replace('/[\'"]/', '', $str); +} // ************** template parsing and gui functions ************** @@ -1718,14 +1760,22 @@ $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'; -- Gitblit v1.9.1