]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-doveadm: Add and use struct doveadm_client_cmd_settings
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 14 Sep 2021 12:15:01 +0000 (15:15 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Mon, 17 Jan 2022 11:52:09 +0000 (13:52 +0200)
src/doveadm/doveadm-dsync.c
src/doveadm/doveadm-mail-server.c
src/lib-doveadm/doveadm-client.c
src/lib-doveadm/doveadm-client.h

index fe87005e8a35ccb058963618f90b379faf4064a4..93b2ea506b425a93134ebf1586b9bc74be73f59d 100644 (file)
@@ -868,8 +868,11 @@ static void dsync_server_run_command(struct dsync_cmd_context *ctx,
        str_append_c(cmd, '\n');
 
        ctx->tcp_conn = conn;
-       /* dsync command can't be proxied currently, so use TTL 1 */
-       doveadm_client_cmd(conn, 1, str_c(cmd), NULL,
+       struct doveadm_client_cmd_settings cmd_set = {
+               /* dsync command can't be proxied currently, so use TTL 1 */
+               .proxy_ttl = 1,
+       };
+       doveadm_client_cmd(conn, &cmd_set, str_c(cmd), NULL,
                           dsync_connected_callback, ctx);
        io_loop_run(current_ioloop);
        ctx->tcp_conn = NULL;
index f3d07e83ecb9c4ae5b7f5c97097d32ece76ddac8..9dbf85e2c22243ad9153b80f971550bdcce80bbf 100644 (file)
@@ -324,8 +324,11 @@ doveadm_cmd_redirect_finish(struct doveadm_mail_server_cmd *servercmd,
        servercmd->server = new_server;
        if (servercmd->input != NULL)
                i_stream_seek(servercmd->input, 0);
-       doveadm_client_cmd(conn, cmd_ctx->proxy_ttl,
-                          servercmd->cmdline, servercmd->input,
+
+       struct doveadm_client_cmd_settings cmd_set = {
+               .proxy_ttl = cmd_ctx->proxy_ttl,
+       };
+       doveadm_client_cmd(conn, &cmd_set, servercmd->cmdline, servercmd->input,
                           doveadm_cmd_callback, servercmd);
        return 0;
 }
@@ -531,8 +534,10 @@ static void doveadm_mail_server_handle(struct doveadm_server *server,
                i_stream_ref(servercmd->input);
        doveadm_client_set_print(conn, doveadm_cmd_print_callback,
                                 servercmd);
-       doveadm_client_cmd(conn, cmd_ctx->proxy_ttl,
-                          str_c(cmd), cmd_ctx->cmd_input,
+       struct doveadm_client_cmd_settings cmd_set = {
+               .proxy_ttl = cmd_ctx->proxy_ttl,
+       };
+       doveadm_client_cmd(conn, &cmd_set, str_c(cmd), cmd_ctx->cmd_input,
                           doveadm_cmd_callback, servercmd);
 }
 
index d3b27dae955ebc0ff8b27052aad6f84f18579b42..a716380ef508595386a9521081f35725eb5a1d1f 100644 (file)
@@ -38,7 +38,7 @@ struct doveadm_client {
        struct istream *cmd_input;
        struct ostream *cmd_output;
        const char *delayed_cmd;
-       int delayed_cmd_proxy_ttl;
+       struct doveadm_client_cmd_settings delayed_set;
        doveadm_client_cmd_callback_t *callback;
        void *context;
 
@@ -232,10 +232,11 @@ doveadm_client_handle_input(struct doveadm_client *conn,
 
 static void
 doveadm_client_send_cmd(struct doveadm_client *conn,
-                       const char *cmdline, int proxy_ttl)
+                       const char *cmdline,
+                       const struct doveadm_client_cmd_settings *set)
 {
        i_assert(conn->authenticated);
-       i_assert(proxy_ttl >= 1);
+       i_assert(set->proxy_ttl >= 1);
 
        if (conn->conn.minor_version < DOVEADM_PROTOCOL_MIN_VERSION_EXTRA_FIELDS) {
                o_stream_nsend_str(conn->conn.output, cmdline);
@@ -248,7 +249,7 @@ doveadm_client_send_cmd(struct doveadm_client *conn,
        size_t prefix_len = p - cmdline;
 
        const char *proxy_ttl_str = t_strdup_printf(
-               "x\tproxy-ttl=%d", proxy_ttl);
+               "x\tproxy-ttl=%d", set->proxy_ttl);
        struct const_iovec iov[] = {
                { cmdline, prefix_len },
                { proxy_ttl_str, strlen(proxy_ttl_str) },
@@ -342,7 +343,7 @@ static void doveadm_client_authenticated(struct doveadm_client *conn)
 
        if (conn->delayed_cmd != NULL) {
                doveadm_client_send_cmd(conn, conn->delayed_cmd,
-                                       conn->delayed_cmd_proxy_ttl);
+                                       &conn->delayed_set);
                conn->delayed_cmd = NULL;
                doveadm_client_send_cmd_input(conn);
        }
@@ -731,12 +732,21 @@ doveadm_client_get_settings(struct doveadm_client *conn)
        return &conn->set;
 }
 
-void doveadm_client_cmd(struct doveadm_client *conn, int proxy_ttl,
+static void
+doveadm_client_cmd_settings_dup(const struct doveadm_client_cmd_settings *src,
+                               struct doveadm_client_cmd_settings *dest_r)
+{
+       i_zero(dest_r);
+       dest_r->proxy_ttl = src->proxy_ttl;
+}
+
+void doveadm_client_cmd(struct doveadm_client *conn,
+                       const struct doveadm_client_cmd_settings *set,
                        const char *line, struct istream *cmd_input,
                        doveadm_client_cmd_callback_t *callback, void *context)
 {
        i_assert(conn->delayed_cmd == NULL);
-       i_assert(proxy_ttl >= 1);
+       i_assert(set->proxy_ttl >= 1);
 
        conn->state = DOVEADM_CLIENT_REPLY_STATE_PRINT;
        if (cmd_input != NULL) {
@@ -745,10 +755,10 @@ void doveadm_client_cmd(struct doveadm_client *conn, int proxy_ttl,
                conn->cmd_input = cmd_input;
        }
        if (!conn->authenticated) {
-               conn->delayed_cmd_proxy_ttl = proxy_ttl;
+               doveadm_client_cmd_settings_dup(set, &conn->delayed_set);
                conn->delayed_cmd = p_strdup(conn->pool, line);
        } else {
-               doveadm_client_send_cmd(conn, line, proxy_ttl);
+               doveadm_client_send_cmd(conn, line, set);
                doveadm_client_send_cmd_input(conn);
        }
        conn->callback = callback;
index dff2a437644eff8c2972db546f9221ae307b639d..aceabaa332e38c6a96861db64753b011fc473017 100644 (file)
@@ -52,6 +52,11 @@ struct doveadm_client_settings {
        bool log_passthrough;
 };
 
+struct doveadm_client_cmd_settings {
+       /* TTL for proxying */
+       int proxy_ttl;
+};
+
 /* Duplicate doveadm client settings. Note that the ssl_ctx is referenced by
    this call, so it must be unreferenced later. */
 void doveadm_client_settings_dup(const struct doveadm_client_settings *src,
@@ -76,7 +81,8 @@ void doveadm_client_set_print(struct doveadm_client *conn,
                TRUE ? context : CALLBACK_TYPECHECK(callback, \
                        void (*)(const unsigned char *, size_t, bool, typeof(context))))
 
-void doveadm_client_cmd(struct doveadm_client *conn, int proxy_ttl,
+void doveadm_client_cmd(struct doveadm_client *conn,
+                       const struct doveadm_client_cmd_settings *set,
                        const char *line, struct istream *cmd_input,
                        doveadm_client_cmd_callback_t *callback, void *context);