]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: Add error_r to server_connection_create()
authorMartti Rannanjärvi <martti.rannanjarvi@open-xchange.com>
Mon, 13 May 2019 13:16:43 +0000 (16:16 +0300)
committerMartti Rannanjärvi <martti.rannanjarvi@open-xchange.com>
Mon, 13 May 2019 23:27:36 +0000 (02:27 +0300)
src/doveadm/doveadm-dsync.c
src/doveadm/doveadm-mail-server.c
src/doveadm/server-connection.c
src/doveadm/server-connection.h

index 720e6a67937f7541aff22f777fbdd770d26b214f..dbb337852af61f76bad6466b65266600e6faf3b8 100644 (file)
@@ -856,8 +856,9 @@ dsync_connect_tcp(struct dsync_cmd_context *ctx,
                process_title_set(t_strdup_printf(
                        "[dsync - connecting to %s]", server->name));
        }
-       if (server_connection_create(server, &conn) < 0) {
-               ctx->error = "Couldn't create server connection";
+       if (server_connection_create(server, &conn, &error) < 0) {
+               ctx->error = p_strdup_printf(ctx->ctx.pool,
+                       "Couldn't create server connection: %s", error);
        } else {
                if (doveadm_verbose_proctitle) {
                        process_title_set(t_strdup_printf(
index 2ee8a19f6c3701a509d0bda1a162cd0df67ae737..3a640e8b1829bf8d9754e25f9d20d9638d7d03ec 100644 (file)
@@ -293,10 +293,12 @@ int doveadm_mail_server_user(struct doveadm_mail_cmd_context *ctx,
                doveadm_mail_server_handle(conn, user);
        else if (array_count(&server->connections) <
                        I_MAX(ctx->set->doveadm_worker_count, 1)) {
-               if (server_connection_create(server, &conn) < 0)
+               if (server_connection_create(server, &conn, error_r) < 0) {
                        internal_failure = TRUE;
-               else
+                       return -1;
+               } else {
                        doveadm_mail_server_handle(conn, user);
+               }
        } else {
                if (array_count(&server->queue) >= DOVEADM_SERVER_QUEUE_MAX)
                        doveadm_server_flush_one(server);
index 5f53a5e544739f62eb25c8fd370cad0d940bb501..5e0629628052b32dc9d6fcf0aca3195cd8f16bad 100644 (file)
@@ -459,7 +459,8 @@ static bool server_connection_input_one(struct server_connection *conn)
        i_unreached();
 }
 
-static int server_connection_read_settings(struct server_connection *conn)
+static int server_connection_read_settings(struct server_connection *conn,
+                                          const char **error_r)
 {
        const struct setting_parser_info *set_roots[] = {
                &doveadm_setting_parser_info,
@@ -480,7 +481,8 @@ static int server_connection_read_settings(struct server_connection *conn)
 
        if (master_service_settings_read(master_service, &input,
                                         &output, &error) < 0) {
-               i_error("Error reading configuration: %s", error);
+               *error_r = t_strdup_printf(
+                       "Error reading configuration: %s", error);
                return -1;
        }
        set = master_service_settings_get_others(master_service)[0];
@@ -488,7 +490,8 @@ static int server_connection_read_settings(struct server_connection *conn)
        return 0;
 }
 
-static int server_connection_init_ssl(struct server_connection *conn)
+static int server_connection_init_ssl(struct server_connection *conn,
+                                     const char **error_r)
 {
        struct ssl_iostream_settings ssl_set;
        const char *error;
@@ -504,11 +507,13 @@ static int server_connection_init_ssl(struct server_connection *conn)
                                        conn->server->hostname, &ssl_set,
                                        &conn->input, &conn->output,
                                        &conn->ssl_iostream, &error) < 0) {
-               i_error("Couldn't initialize SSL client: %s", error);
+               *error_r = t_strdup_printf(
+                       "Couldn't initialize SSL client: %s", error);
                return -1;
        }
        if (ssl_iostream_handshake(conn->ssl_iostream) < 0) {
-               i_error("SSL handshake failed: %s",
+               *error_r = t_strdup_printf(
+                       "SSL handshake failed: %s",
                        ssl_iostream_get_last_error(conn->ssl_iostream));
                return -1;
        }
@@ -516,7 +521,8 @@ static int server_connection_init_ssl(struct server_connection *conn)
 }
 
 int server_connection_create(struct doveadm_server *server,
-                            struct server_connection **conn_r)
+                            struct server_connection **conn_r,
+                            const char **error_r)
 {
        struct server_connection *conn;
        pool_t pool;
@@ -538,8 +544,8 @@ int server_connection_create(struct doveadm_server *server,
 
        array_push_back(&conn->server->connections, &conn);
 
-       if (server_connection_read_settings(conn) < 0 ||
-           server_connection_init_ssl(conn) < 0) {
+       if (server_connection_read_settings(conn, error_r) < 0 ||
+           server_connection_init_ssl(conn, error_r) < 0) {
                server_connection_destroy(&conn);
                return -1;
        }
index 7f88db6696163a6ae7ec55962a9f4c9d0e0e9957..1db30b950afac24a071a7322944aac54b7e42228 100644 (file)
@@ -11,7 +11,8 @@ typedef void server_cmd_callback_t(int exit_code, const char *error,
                                   void *context);
 
 int server_connection_create(struct doveadm_server *server,
-                            struct server_connection **conn_r);
+                            struct server_connection **conn_r,
+                            const char **error_r);
 void server_connection_destroy(struct server_connection **conn);
 
 /* Return the server given to create() */