]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
fts-solr: Fixed HTTPS support by properly propagating SSL client settings from mail_user.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Sun, 22 Jan 2017 12:41:25 +0000 (13:41 +0100)
committerGitLab <gitlab@git.dovecot.net>
Tue, 7 Feb 2017 10:52:43 +0000 (12:52 +0200)
src/plugins/fts-solr/Makefile.am
src/plugins/fts-solr/fts-backend-solr-old.c
src/plugins/fts-solr/fts-backend-solr.c
src/plugins/fts-solr/solr-connection.c
src/plugins/fts-solr/solr-connection.h

index 1b3490fb6be847a41ce790c4b9ea3e457483555d..18367f78375e3593ec1c3eb7026b022e6e22e987 100644 (file)
@@ -1,5 +1,6 @@
 AM_CPPFLAGS = \
        -I$(top_srcdir)/src/lib \
+       -I$(top_srcdir)/src/lib-ssl-iostream \
        -I$(top_srcdir)/src/lib-http \
        -I$(top_srcdir)/src/lib-mail \
        -I$(top_srcdir)/src/lib-imap \
index 2020ff471ea52ca3c981d5b3ba8ddc04cee48073..250112799acaf5820afb6a2fd3527ab7ad71451b 100644 (file)
@@ -6,6 +6,7 @@
 #include "hash.h"
 #include "strescape.h"
 #include "unichar.h"
+#include "iostream-ssl.h"
 #include "http-url.h"
 #include "imap-utf7.h"
 #include "mail-storage-private.h"
@@ -243,14 +244,20 @@ fts_backend_solr_init(struct fts_backend *_backend, const char **error_r)
 {
        struct solr_fts_backend *backend = (struct solr_fts_backend *)_backend;
        struct fts_solr_user *fuser = FTS_SOLR_USER_CONTEXT(_backend->ns->user);
+       struct ssl_iostream_settings ssl_set;
        const char *str;
 
        if (fuser == NULL) {
                *error_r = "Invalid fts_solr setting";
                return -1;
        }
-       if (solr_connection_init(fuser->set.url, fuser->set.debug,
-                                &backend->solr_conn, error_r) < 0)
+
+       i_zero(&ssl_set);
+       mail_user_init_ssl_client_settings(_backend->ns->user, &ssl_set);
+
+       if (solr_connection_init(fuser->set.url, &ssl_set,
+                                fuser->set.debug, &backend->solr_conn,
+                                error_r) < 0)
                return -1;
 
        str = solr_escape_id_str(_backend->ns->user->username);
index a1cc5adbd3fd1ad581af862134b799b3c5657d18..228705672e3ece9fcb86cba4ff271ae70cc8a2e6 100644 (file)
@@ -6,6 +6,7 @@
 #include "hash.h"
 #include "strescape.h"
 #include "unichar.h"
+#include "iostream-ssl.h"
 #include "http-url.h"
 #include "mail-storage-private.h"
 #include "mailbox-list-private.h"
@@ -181,6 +182,7 @@ fts_backend_solr_init(struct fts_backend *_backend, const char **error_r)
 {
        struct solr_fts_backend *backend = (struct solr_fts_backend *)_backend;
        struct fts_solr_user *fuser = FTS_SOLR_USER_CONTEXT(_backend->ns->user);
+       struct ssl_iostream_settings ssl_set;
 
        if (fuser == NULL) {
                *error_r = "Invalid fts_solr setting";
@@ -191,8 +193,13 @@ fts_backend_solr_init(struct fts_backend *_backend, const char **error_r)
                _backend->flags &= ~FTS_BACKEND_FLAG_FUZZY_SEARCH;
                _backend->flags |= FTS_BACKEND_FLAG_TOKENIZED_INPUT;
        }
-       return solr_connection_init(fuser->set.url, fuser->set.debug,
-                                   &backend->solr_conn, error_r);
+
+       i_zero(&ssl_set);
+       mail_user_init_ssl_client_settings(_backend->ns->user, &ssl_set);
+
+       return solr_connection_init(fuser->set.url, &ssl_set,
+                                   fuser->set.debug, &backend->solr_conn,
+                                   error_r);
 }
 
 static void fts_backend_solr_deinit(struct fts_backend *_backend)
index 7ae50017447c14144d79ce94ae0ce5ef0445b2ab..dfbdccef163107db2e64c5f5f773e9ecd3631973 100644 (file)
@@ -101,8 +101,10 @@ static int solr_xml_parse(struct solr_connection *conn,
        return 0;
 }
 
-int solr_connection_init(const char *url, bool debug,
-                        struct solr_connection **conn_r, const char **error_r)
+int solr_connection_init(const char *url,
+                        const struct ssl_iostream_settings *ssl_client_set,
+                        bool debug, struct solr_connection **conn_r,
+                        const char **error_r)
 {
        struct http_client_settings http_set;
        struct solr_connection *conn;
@@ -136,9 +138,10 @@ int solr_connection_init(const char *url, bool debug,
                http_set.max_pipelined_requests = 1;
                http_set.max_redirects = 1;
                http_set.max_attempts = 3;
-               http_set.debug = debug;
                http_set.connect_timeout_msecs = 5*1000;
                http_set.request_timeout_msecs = 60*1000;
+               http_set.ssl = ssl_client_set;
+               http_set.debug = debug;
                solr_http_client = http_client_init(&http_set);
        }
 
index 05a4d2b50079299f9d6c3354d5fb4cae8d8c618f..542194ab969466579fd7bc1c5b1a44940913cd3d 100644 (file)
@@ -13,8 +13,10 @@ struct solr_result {
        ARRAY_TYPE(fts_score_map) scores;
 };
 
-int solr_connection_init(const char *url, bool debug,
-                        struct solr_connection **conn_r, const char **error_r);
+int solr_connection_init(const char *url,
+                        const struct ssl_iostream_settings *ssl_client_set,
+                        bool debug, struct solr_connection **conn_r,
+                        const char **error_r);
 void solr_connection_deinit(struct solr_connection **conn);
 
 int solr_connection_select(struct solr_connection *conn, const char *query,