]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm-server: Moved common client code back from client-connection-tcp.c to client...
authorStephan Bosch <stephan.bosch@dovecot.fi>
Sat, 7 Oct 2017 14:48:14 +0000 (16:48 +0200)
committerStephan Bosch <stephan.bosch@dovecot.fi>
Tue, 24 Oct 2017 20:29:19 +0000 (22:29 +0200)
src/doveadm/Makefile.am
src/doveadm/client-connection-private.h
src/doveadm/client-connection-tcp.c
src/doveadm/client-connection.c [new file with mode: 0644]

index 374dc2490309a728741b537e0087c0ba90da470d..f9e9ad4ad96f1ab9cc297483bba967d843fd5a1a 100644 (file)
@@ -145,6 +145,7 @@ doveadm_SOURCES = \
 doveadm_server_SOURCES = \
        $(common) \
        doveadm-auth-server.c \
+       client-connection.c \
        client-connection-tcp.c \
        client-connection-http.c \
        doveadm-print-server.c \
index e90b1e586a51d44542135ec8d574398de5765849..4effdf806d1d5dd1ea5dfba98adc614e8bed5edc 100644 (file)
@@ -8,6 +8,7 @@ bool doveadm_client_is_allowed_command(const struct doveadm_settings *set,
 
 int client_connection_init(struct client_connection *conn,
        enum client_connection_type type, int fd);
+void client_connection_deinit(struct client_connection *conn ATTR_UNUSED);
 
 void client_connection_set_proctitle(struct client_connection *conn,
                                     const char *text);
index e7eb1a7e951cd2daddfc33b8ba95c1b594e4ad03..f0e7070afb468dd0ef74d50369c99d613fb35806 100644 (file)
@@ -8,19 +8,15 @@
 #include "istream.h"
 #include "ostream.h"
 #include "strescape.h"
-#include "process-title.h"
-#include "settings-parser.h"
 #include "iostream-ssl.h"
 #include "ostream-multiplex.h"
 #include "master-service.h"
 #include "master-service-ssl.h"
-#include "master-service-settings.h"
 #include "mail-storage-service.h"
 #include "doveadm-util.h"
 #include "doveadm-server.h"
 #include "doveadm-mail.h"
 #include "doveadm-print.h"
-#include "doveadm-settings.h"
 #include "client-connection-private.h"
 
 #include <unistd.h>
@@ -263,27 +259,6 @@ doveadm_mail_cmd_server_run(struct client_connection *conn,
        pool_unref(&mctx->pool);
 }
 
-bool doveadm_client_is_allowed_command(const struct doveadm_settings *set,
-                                      const char *cmd_name)
-{
-       bool ret = FALSE;
-
-       if (*set->doveadm_allowed_commands == '\0')
-               return TRUE;
-
-       T_BEGIN {
-               const char *const *cmds =
-                       t_strsplit(set->doveadm_allowed_commands, ",");
-               for (; *cmds != NULL; cmds++) {
-                       if (strcmp(*cmds, cmd_name) == 0) {
-                               ret = TRUE;
-                               break;
-                       }
-               }
-       } T_END;
-       return ret;
-}
-
 static int doveadm_cmd_handle(struct client_connection *conn,
                              const char *cmd_name,
                              int argc, const char *const argv[],
@@ -538,33 +513,6 @@ static void client_connection_input(struct client_connection *conn)
                client_connection_destroy(&conn);
 }
 
-static int client_connection_read_settings(struct client_connection *conn)
-{
-       const struct setting_parser_info *set_roots[] = {
-               &doveadm_setting_parser_info,
-               NULL
-       };
-       struct master_service_settings_input input;
-       struct master_service_settings_output output;
-       const char *error;
-       void *set;
-
-       i_zero(&input);
-       input.roots = set_roots;
-       input.service = "doveadm";
-       input.local_ip = conn->local_ip;
-       input.remote_ip = conn->remote_ip;
-
-       if (master_service_settings_read(master_service, &input,
-                                        &output, &error) < 0) {
-               i_error("Error reading configuration: %s", error);
-               return -1;
-       }
-       set = master_service_settings_get_others(master_service)[0];
-       conn->set = settings_dup(&doveadm_setting_parser_info, set, conn->pool);
-       return 0;
-}
-
 static int client_connection_init_ssl(struct client_connection *conn)
 {
        const char *error;
@@ -603,30 +551,6 @@ client_connection_send_auth_handshake(struct client_connection *
        }
 }
 
-int client_connection_init(struct client_connection *conn,
-       enum client_connection_type type, int fd)
-{
-       const char *ip;
-
-       i_assert(type != CLIENT_CONNECTION_TYPE_CLI);
-
-       conn->fd = fd;
-       conn->type = type;
-
-       (void)net_getsockname(fd, &conn->local_ip, &conn->local_port);
-       (void)net_getpeername(fd, &conn->remote_ip, &conn->remote_port);
-
-       ip = net_ip2addr(&conn->remote_ip);
-       if (ip[0] != '\0')
-               i_set_failure_prefix("doveadm(%s): ", ip);
-
-       if (client_connection_read_settings(conn) < 0) {
-               client_connection_destroy(&conn);
-               return -1;
-       }
-       return 0;
-}
-
 struct client_connection *
 client_connection_create(int fd, int listen_fd, bool ssl)
 {
@@ -692,24 +616,6 @@ void client_connection_destroy(struct client_connection **_conn)
        pool_unref(&conn->pool);
 
        doveadm_print_ostream = NULL;
-       doveadm_client = NULL;
-       master_service_client_connection_destroyed(master_service);
-
-       if (doveadm_verbose_proctitle)
-               process_title_set("[idling]");
-}
-
-void client_connection_set_proctitle(struct client_connection *conn,
-                                    const char *text)
-{
-       const char *str;
-
-       if (!doveadm_verbose_proctitle)
-               return;
 
-       if (text[0] == '\0')
-               str = t_strdup_printf("[%s]", conn->name);
-       else
-               str = t_strdup_printf("[%s %s]", conn->name, text);
-       process_title_set(str);
+       client_connection_deinit(conn);
 }
diff --git a/src/doveadm/client-connection.c b/src/doveadm/client-connection.c
new file mode 100644 (file)
index 0000000..2c56022
--- /dev/null
@@ -0,0 +1,109 @@
+/* Copyright (c) 2010-2017 Dovecot authors, see the included COPYING file */
+
+#include "lib.h"
+#include "process-title.h"
+#include "settings-parser.h"
+#include "master-service.h"
+#include "master-service-settings.h"
+#include "doveadm.h"
+#include "doveadm-settings.h"
+#include "doveadm-server.h"
+#include "client-connection-private.h"
+
+bool doveadm_client_is_allowed_command(const struct doveadm_settings *set,
+                                      const char *cmd_name)
+{
+       bool ret = FALSE;
+
+       if (*set->doveadm_allowed_commands == '\0')
+               return TRUE;
+
+       T_BEGIN {
+               const char *const *cmds =
+                       t_strsplit(set->doveadm_allowed_commands, ",");
+               for (; *cmds != NULL; cmds++) {
+                       if (strcmp(*cmds, cmd_name) == 0) {
+                               ret = TRUE;
+                               break;
+                       }
+               }
+       } T_END;
+       return ret;
+}
+
+static int client_connection_read_settings(struct client_connection *conn)
+{
+       const struct setting_parser_info *set_roots[] = {
+               &doveadm_setting_parser_info,
+               NULL
+       };
+       struct master_service_settings_input input;
+       struct master_service_settings_output output;
+       const char *error;
+       void *set;
+
+       i_zero(&input);
+       input.roots = set_roots;
+       input.service = "doveadm";
+       input.local_ip = conn->local_ip;
+       input.remote_ip = conn->remote_ip;
+
+       if (master_service_settings_read(master_service, &input,
+                                        &output, &error) < 0) {
+               i_error("Error reading configuration: %s", error);
+               return -1;
+       }
+       set = master_service_settings_get_others(master_service)[0];
+       conn->set = settings_dup(&doveadm_setting_parser_info, set, conn->pool);
+       return 0;
+}
+
+int client_connection_init(struct client_connection *conn,
+       enum client_connection_type type, int fd)
+{
+       const char *ip;
+
+       i_assert(type != CLIENT_CONNECTION_TYPE_CLI);
+
+       conn->fd = fd;
+       conn->type = type;
+
+       (void)net_getsockname(fd, &conn->local_ip, &conn->local_port);
+       (void)net_getpeername(fd, &conn->remote_ip, &conn->remote_port);
+
+       ip = net_ip2addr(&conn->remote_ip);
+       if (ip[0] != '\0')
+               i_set_failure_prefix("doveadm(%s): ", ip);
+
+       if (client_connection_read_settings(conn) < 0) {
+               client_connection_destroy(&conn);
+               return -1;
+       }
+       return 0;
+}
+
+void client_connection_deinit(struct client_connection *conn ATTR_UNUSED)
+{
+       doveadm_client = NULL;
+       master_service_client_connection_destroyed(master_service);
+
+       if (doveadm_verbose_proctitle)
+               process_title_set("[idling]");
+}
+
+void client_connection_set_proctitle(struct client_connection *conn,
+                                    const char *text)
+{
+       const char *str;
+
+       if (!doveadm_verbose_proctitle)
+               return;
+
+       if (text[0] == '\0')
+               str = t_strdup_printf("[%s]", conn->name);
+       else
+               str = t_strdup_printf("[%s %s]", conn->name, text);
+       process_title_set(str);
+}
+
+