From: Stephan Bosch Date: Sat, 7 Oct 2017 14:48:14 +0000 (+0200) Subject: doveadm-server: Moved common client code back from client-connection-tcp.c to client... X-Git-Tag: 2.3.0.rc1~757 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4e08875e53e96c8af3bfcb7c4aaa9c3a132101f8;p=thirdparty%2Fdovecot%2Fcore.git doveadm-server: Moved common client code back from client-connection-tcp.c to client-connection.c. --- diff --git a/src/doveadm/Makefile.am b/src/doveadm/Makefile.am index 374dc24903..f9e9ad4ad9 100644 --- a/src/doveadm/Makefile.am +++ b/src/doveadm/Makefile.am @@ -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 \ diff --git a/src/doveadm/client-connection-private.h b/src/doveadm/client-connection-private.h index e90b1e586a..4effdf806d 100644 --- a/src/doveadm/client-connection-private.h +++ b/src/doveadm/client-connection-private.h @@ -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); diff --git a/src/doveadm/client-connection-tcp.c b/src/doveadm/client-connection-tcp.c index e7eb1a7e95..f0e7070afb 100644 --- a/src/doveadm/client-connection-tcp.c +++ b/src/doveadm/client-connection-tcp.c @@ -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 @@ -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 index 0000000000..2c560227cd --- /dev/null +++ b/src/doveadm/client-connection.c @@ -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); +} + +