From b76f8e5e26f638ecbe5bdcb58b6792ce05dabd86 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Mon, 16 Jun 2014 09:12:27 -0400
Subject: [PATCH] Added option to specify connection socket parameters - managesieve_conn_options

---
 plugins/managesieve/config.inc.php.dist                  |   12 ++++++++++++
 plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php |    4 +++-
 plugins/managesieve/Changelog                            |    1 +
 plugins/managesieve/lib/Roundcube/rcube_sieve.php        |    5 +++--
 4 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/plugins/managesieve/Changelog b/plugins/managesieve/Changelog
index 856b8ac..3755084 100644
--- a/plugins/managesieve/Changelog
+++ b/plugins/managesieve/Changelog
@@ -2,6 +2,7 @@
 - Fix disabled "create filter" action
 - Fix enotify/notify extension handling
 - Improved UI accessibility
+- Added option to specify connection socket parameters - managesieve_conn_options
 
 * version 7.2 [2014-02-14]
 -----------------------------------------------------------
diff --git a/plugins/managesieve/config.inc.php.dist b/plugins/managesieve/config.inc.php.dist
index 14123c1..1f20b5a 100644
--- a/plugins/managesieve/config.inc.php.dist
+++ b/plugins/managesieve/config.inc.php.dist
@@ -28,6 +28,18 @@
 // Note: tls:// prefix in managesieve_host is also supported
 $config['managesieve_usetls'] = false;
 
+// Connection scket context options
+// See http://php.net/manual/en/context.ssl.php
+// The example below enables server certificate validation
+//$config['imap_conn_options'] = array(
+//  'ssl'         => array(
+//     'verify_peer'  => true,
+//     'verify_depth' => 3,
+//     'cafile'       => '/etc/openssl/certs/ca.crt',
+//   ),
+// );
+$config['managesieve_conn_options'] = null;
+
 // default contents of filters script (eg. default spam filter)
 $config['managesieve_default'] = '/etc/dovecot/sieve/global';
 
diff --git a/plugins/managesieve/lib/Roundcube/rcube_sieve.php b/plugins/managesieve/lib/Roundcube/rcube_sieve.php
index 3bd2978..a8e29d7 100644
--- a/plugins/managesieve/lib/Roundcube/rcube_sieve.php
+++ b/plugins/managesieve/lib/Roundcube/rcube_sieve.php
@@ -57,10 +57,11 @@
      * @param boolean Enable/disable debugging
      * @param string  Proxy authentication identifier
      * @param string  Proxy authentication password
+     * @param array   List of options to pass to stream_context_create().
      */
     public function __construct($username, $password='', $host='localhost', $port=2000,
         $auth_type=null, $usetls=true, $disabled=array(), $debug=false,
-        $auth_cid=null, $auth_pw=null)
+        $auth_cid=null, $auth_pw=null, $options=array())
     {
         $this->sieve = new Net_Sieve();
 
@@ -68,7 +69,7 @@
             $this->sieve->setDebug(true, array($this, 'debug_handler'));
         }
 
-        if (PEAR::isError($this->sieve->connect($host, $port, null, $usetls))) {
+        if (PEAR::isError($this->sieve->connect($host, $port, $options, $usetls))) {
             return $this->_set_error(SIEVE_ERROR_CONNECTION);
         }
 
diff --git a/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php b/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php
index 9900f16..3e3b9be 100644
--- a/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php
+++ b/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php
@@ -122,6 +122,7 @@
             'debug'     => $this->rc->config->get('managesieve_debug', false),
             'auth_cid'  => $this->rc->config->get('managesieve_auth_cid'),
             'auth_pw'   => $this->rc->config->get('managesieve_auth_pw'),
+            'socket_options' => $this->rc->config->get('managesieve_conn_options'),
         ));
 
         // try to connect to managesieve server and to fetch the script
@@ -135,7 +136,8 @@
             $plugin['disabled'],
             $plugin['debug'],
             $plugin['auth_cid'],
-            $plugin['auth_pw']
+            $plugin['auth_pw'],
+            $plugin['socket_options']
         );
 
         if (!($error = $this->sieve->error())) {

--
Gitblit v1.9.1