summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG1
-rw-r--r--config/main.inc.php.dist5
-rw-r--r--program/include/rcmail.php1
-rw-r--r--program/lib/imap.inc38
4 files changed, 24 insertions, 21 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 0f91b9388..bbd0a881e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
CHANGELOG RoundCube Webmail
===========================
+- Added 'imap_force_caps' option for after-login CAPABILITY checking (#1485750)
- Password: Support dovecotpw encryption
- TinyMCE 3.3.1
- Implemented messages copying using drag&drop + SHIFT (#1484086)
diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist
index 2679631b6..75110e45a 100644
--- a/config/main.inc.php.dist
+++ b/config/main.inc.php.dist
@@ -75,6 +75,11 @@ $rcmail_config['imap_auth_type'] = null;
$rcmail_config['imap_root'] = null;
$rcmail_config['imap_delimiter'] = null;
+// By default IMAP capabilities are readed after connection to IMAP server
+// In some cases, e.g. when using IMAP proxy, there's a need to refresh the list
+// after login. Set to True if you've got this case.
+$rcmail_config['imap_force_caps'] = false;
+
// ----------------------------------
// SMTP
// ----------------------------------
diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index 3ea418046..548ca6b12 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -426,6 +426,7 @@ class rcmail
'delimiter' => isset($_SESSION['imap_delimiter']) ? $_SESSION['imap_delimiter'] : $this->config->get('imap_delimiter'),
'rootdir' => isset($_SESSION['imap_root']) ? $_SESSION['imap_root'] : $this->config->get('imap_root'),
'debug_mode' => (bool) $this->config->get('imap_debug', 0),
+ 'force_caps' => (bool) $this->config->get('imap_force_caps'),
);
$this->imap->set_options($options);
diff --git a/program/lib/imap.inc b/program/lib/imap.inc
index d87747038..a8f318c20 100644
--- a/program/lib/imap.inc
+++ b/program/lib/imap.inc
@@ -389,7 +389,7 @@ function iil_C_GetCapability(&$conn, $name)
return false;
}
-function iil_ClearCapability()
+function iil_C_ClearCapability($conn)
{
$conn->capability = array();
$conn->capability_readed = false;
@@ -550,26 +550,19 @@ function iil_Connect($host, $user, $password, $options=null) {
$iil_error = '';
$iil_errornum = 0;
- // set some imap options
+ // set options
if (is_array($options)) {
- foreach($options as $optkey => $optval) {
- if ($optkey == 'auth_method') {
- $auth_method = strtoupper($optval);
- } else if ($optkey == 'rootdir') {
- $my_prefs['rootdir'] = $optval;
- } else if ($optkey == 'delimiter') {
- $my_prefs['delimiter'] = $optval;
- } else if ($optkey == 'debug_mode') {
- $my_prefs['debug_mode'] = $optval;
- }
- }
- }
-
- if (empty($auth_method))
+ $my_prefs = $options;
+ }
+ // set auth method
+ if (!empty($my_prefs['auth_method'])) {
+ $auth_method = strtoupper($my_prefs['auth_method']);
+ } else {
$auth_method = 'CHECK';
-
+ }
+
$message = "INITIAL: $auth_method\n";
-
+
$result = false;
// initialize connection
@@ -579,13 +572,13 @@ function iil_Connect($host, $user, $password, $options=null) {
$conn->selected = '';
$conn->user = $user;
$conn->host = $host;
-
+
if ($my_prefs['sort_field'] == 'INTERNALDATE') {
$IMAP_USE_INTERNAL_DATE = true;
} else if ($my_prefs['sort_field'] == 'DATE') {
$IMAP_USE_INTERNAL_DATE = false;
}
-
+
//check input
if (empty($host)) {
$iil_error = "Empty host";
@@ -660,7 +653,7 @@ function iil_Connect($host, $user, $password, $options=null) {
}
// Now we're authenticated, capabilities need to be reread
- iil_ClearCapability();
+ iil_C_ClearCapability($conn);
}
}
@@ -705,6 +698,9 @@ function iil_Connect($host, $user, $password, $options=null) {
}
if (is_resource($result)) {
+ if ($my_prefs['force_caps']) {
+ iil_C_ClearCapability($conn);
+ }
iil_C_Namespace($conn);
return $conn;
} else {