]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: Change "proxy list/kick" to be aliases to "who/kick" commands
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Sun, 10 Oct 2021 00:21:10 +0000 (03:21 +0300)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 8 Feb 2022 09:48:24 +0000 (10:48 +0100)
src/doveadm/Makefile.am
src/doveadm/doveadm-cmd.c
src/doveadm/doveadm-cmd.h
src/doveadm/doveadm-kick.c
src/doveadm/doveadm-proxy.c [deleted file]
src/doveadm/doveadm-who.c

index 77312d2069fd1fc94b41e8d37d591274583e91a7..464835c37ef276ff93db1e80b64a8cb060cefd61 100644 (file)
@@ -83,7 +83,6 @@ doveadm_common_cmds = \
        doveadm-master.c \
        doveadm-mutf7.c \
        doveadm-penalty.c \
-       doveadm-proxy.c \
        doveadm-replicator.c \
        doveadm-sis.c \
        doveadm-stats.c \
index 23df49f5e0122df5426ed4f94ac76ae80659396a..3fd9bc83b97adac5c4508cd2ba8fa4a392c47105 100644 (file)
@@ -28,7 +28,9 @@ static struct doveadm_cmd_ver2 *doveadm_commands_ver2[] = {
        &doveadm_cmd_oldstats_reset_ver2,
        &doveadm_cmd_penalty_ver2,
        &doveadm_cmd_kick_ver2,
-       &doveadm_cmd_who_ver2
+       &doveadm_cmd_proxy_kick_ver2,
+       &doveadm_cmd_who_ver2,
+       &doveadm_cmd_proxy_list_ver2,
 };
 
 ARRAY_TYPE(doveadm_cmd_ver2) doveadm_cmds_ver2;
@@ -113,7 +115,6 @@ void doveadm_cmds_init(void)
 
        doveadm_register_director_commands();
        doveadm_register_instance_commands();
-       doveadm_register_proxy_commands();
        doveadm_register_log_commands();
        doveadm_register_replicator_commands();
        doveadm_register_dict_commands();
index 5f66ee65bd1692b2f07f26e215d97e445ba59161..cbb1e50b824a5adaa6e6a9e11b09ef5ba7448182 100644 (file)
@@ -96,7 +96,6 @@ extern ARRAY_TYPE(doveadm_cmd_ver2) doveadm_cmds_ver2;
 void doveadm_register_auth_commands(void);
 void doveadm_register_auth_server_commands(void);
 void doveadm_register_director_commands(void);
-void doveadm_register_proxy_commands(void);
 void doveadm_register_log_commands(void);
 void doveadm_register_instance_commands(void);
 void doveadm_register_mount_commands(void);
@@ -154,7 +153,9 @@ extern struct doveadm_cmd_ver2 doveadm_cmd_oldstats_top_ver2;
 extern struct doveadm_cmd_ver2 doveadm_cmd_penalty_ver2;
 extern struct doveadm_cmd_ver2 doveadm_cmd_pw;
 extern struct doveadm_cmd_ver2 doveadm_cmd_kick_ver2;
+extern struct doveadm_cmd_ver2 doveadm_cmd_proxy_kick_ver2;
 extern struct doveadm_cmd_ver2 doveadm_cmd_who_ver2;
+extern struct doveadm_cmd_ver2 doveadm_cmd_proxy_list_ver2;
 extern struct doveadm_cmd_ver2 doveadm_cmd_sis_deduplicate;
 extern struct doveadm_cmd_ver2 doveadm_cmd_sis_find;
 extern struct doveadm_cmd_ver2 doveadm_cmd_zlibconnect;
index 2f23e03403dee762dd7cd00d0a55832c90b7fd2e..0ebb83dc6edcce129fbe68299a5e90ba43e96cca 100644 (file)
@@ -150,14 +150,21 @@ static void cmd_kick(struct doveadm_cmd_context *cctx)
        pool_unref(&ctx.who.pool);
 }
 
+#define DOVEADM_CMD_KICK_FIELDS \
+       .cmd = cmd_kick, \
+       .usage = "[-a <anvil socket path>] [-f <passdb field>] [-h <dest host>] <user mask>[|]<ip/bits>", \
+DOVEADM_CMD_PARAMS_START \
+DOVEADM_CMD_PARAM('a',"socket-path",CMD_PARAM_STR,0) \
+DOVEADM_CMD_PARAM('f',"passdb-field",CMD_PARAM_STR,0) \
+DOVEADM_CMD_PARAM('h',"dest-host",CMD_PARAM_STR,0) \
+DOVEADM_CMD_PARAM('\0',"mask",CMD_PARAM_ARRAY,CMD_PARAM_FLAG_POSITIONAL) \
+DOVEADM_CMD_PARAMS_END
+
 struct doveadm_cmd_ver2 doveadm_cmd_kick_ver2 = {
        .name = "kick",
-       .cmd = cmd_kick,
-       .usage = "[-a <anvil socket path>] [-f <passdb field>] [-h <dest host>] <user mask>[|]<ip/bits>",
-DOVEADM_CMD_PARAMS_START
-DOVEADM_CMD_PARAM('a',"socket-path",CMD_PARAM_STR,0)
-DOVEADM_CMD_PARAM('f',"passdb-field",CMD_PARAM_STR,0)
-DOVEADM_CMD_PARAM('h',"dest-host",CMD_PARAM_STR,0)
-DOVEADM_CMD_PARAM('\0',"mask",CMD_PARAM_ARRAY,CMD_PARAM_FLAG_POSITIONAL)
-DOVEADM_CMD_PARAMS_END
+       DOVEADM_CMD_KICK_FIELDS
+};
+struct doveadm_cmd_ver2 doveadm_cmd_proxy_kick_ver2 = {
+       .name = "proxy kick",
+       DOVEADM_CMD_KICK_FIELDS
 };
diff --git a/src/doveadm/doveadm-proxy.c b/src/doveadm/doveadm-proxy.c
deleted file mode 100644 (file)
index 5063885..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-/* Copyright (c) 2011-2018 Dovecot authors, see the included COPYING file */
-
-#include "lib.h"
-#include "ioloop.h"
-#include "str.h"
-#include "strescape.h"
-#include "ipc-client.h"
-#include "doveadm.h"
-#include "doveadm-print.h"
-
-#include <stdio.h>
-#include <unistd.h>
-
-struct proxy_context {
-       struct ipc_client *ipc;
-       const char *username_field;
-       const char *kick_hosts;
-};
-
-extern struct doveadm_cmd_ver2 doveadm_cmd_proxy[];
-
-static void proxy_cmd_help(struct doveadm_cmd_context *cctx) ATTR_NORETURN;
-
-static struct proxy_context *
-cmd_proxy_init(struct doveadm_cmd_context *cctx)
-{
-       struct proxy_context *ctx;
-       const char *socket_path;
-
-       ctx = t_new(struct proxy_context, 1);
-       if (!doveadm_cmd_param_str(cctx, "socket-path", &socket_path)) {
-               socket_path = t_strconcat(doveadm_settings->base_dir,
-                                         "/ipc", NULL);
-       }
-       (void)doveadm_cmd_param_str(cctx, "passdb-field", &ctx->username_field);
-       (void)doveadm_cmd_param_str(cctx, "host", &ctx->kick_hosts);
-       ctx->ipc = ipc_client_init(socket_path);
-       return ctx;
-}
-
-static void cmd_proxy_list_header(const char *const *args)
-{
-       struct {
-               const char *key;
-               const char *title;
-       } header_map[] = {
-               { "service", "proto" },
-               { "src-ip", "src ip" },
-               { "dest-ip", "dest ip" },
-               { "dest-port", "port" },
-       };
-       for (unsigned int i = 0; args[i] != NULL; i++) {
-               const char *arg = args[i];
-
-               if (strcmp(arg, "username") == 0 ||
-                   str_begins(arg, "user_")) {
-                       doveadm_print_header(arg, arg,
-                                            DOVEADM_PRINT_HEADER_FLAG_EXPAND);
-                       continue;
-               }
-               const char *title = arg;
-               for (unsigned int j = 0; j < N_ELEMENTS(header_map); j++) {
-                       if (strcmp(header_map[j].key, arg) == 0) {
-                               title = header_map[j].title;
-                               break;
-                       }
-               }
-               doveadm_print_header(arg, title, 0);
-       }
-}
-
-static void cmd_proxy_list_callback(enum ipc_client_cmd_state state,
-                                   const char *data, void *context)
-{
-       bool *seen_header = context;
-
-       switch (state) {
-       case IPC_CLIENT_CMD_STATE_REPLY: {
-               const char *const *args = t_strsplit_tabescaped(data);
-
-               if (!*seen_header) {
-                       cmd_proxy_list_header(args);
-                       *seen_header = TRUE;
-               } else {
-                       for (; *args != NULL; args++)
-                               doveadm_print(*args);
-               }
-               return;
-       }
-       case IPC_CLIENT_CMD_STATE_OK:
-               break;
-       case IPC_CLIENT_CMD_STATE_ERROR:
-               i_error("LIST-FULL failed: %s", data);
-               break;
-       }
-       io_loop_stop(current_ioloop);
-}
-
-static void cmd_proxy_list(struct doveadm_cmd_context *cctx)
-{
-       struct proxy_context *ctx;
-       bool seen_header = FALSE;
-
-       ctx = cmd_proxy_init(cctx);
-
-       doveadm_print_init(DOVEADM_PRINT_TYPE_TABLE);
-
-       io_loop_set_running(current_ioloop);
-       ipc_client_cmd(ctx->ipc, "proxy\t*\tLIST-FULL",
-                      cmd_proxy_list_callback, &seen_header);
-       if (io_loop_is_running(current_ioloop))
-               io_loop_run(current_ioloop);
-       ipc_client_deinit(&ctx->ipc);
-}
-
-static void cmd_proxy_kick_callback(enum ipc_client_cmd_state state,
-                                   const char *data, void *context ATTR_UNUSED)
-{
-       switch (state) {
-       case IPC_CLIENT_CMD_STATE_REPLY:
-               return;
-       case IPC_CLIENT_CMD_STATE_OK:
-               if (data[0] == '\0')
-                       data = "0";
-               doveadm_print(data);
-               break;
-       case IPC_CLIENT_CMD_STATE_ERROR:
-               i_error("KICK failed: %s", data);
-               doveadm_exit_code = EX_TEMPFAIL;
-               break;
-       }
-       io_loop_stop(current_ioloop);
-}
-
-static void cmd_proxy_kick(struct doveadm_cmd_context *cctx)
-{
-       struct proxy_context *ctx;
-       const char *const *users = NULL;
-       string_t *cmd;
-
-       ctx = cmd_proxy_init(cctx);
-       (void)doveadm_cmd_param_array(cctx, "user", &users);
-       if (users == NULL && ctx->kick_hosts == NULL)
-               proxy_cmd_help(cctx);
-
-       doveadm_print_init(DOVEADM_PRINT_TYPE_FORMATTED);
-       doveadm_print_formatted_set_format("%{count} connections kicked\n");
-       doveadm_print_header_simple("count");
-
-       cmd = t_str_new(128);
-       str_append(cmd, "proxy\t*\t");
-       if (ctx->kick_hosts != NULL) {
-               str_append(cmd, "KICK-HOST\t");
-               str_append(cmd, ctx->kick_hosts);
-       }
-       else if (ctx->username_field == NULL)
-               str_append(cmd, "KICK");
-       else {
-               str_append(cmd, "KICK-ALT\t");
-               str_append_tabescaped(cmd, ctx->username_field);
-       }
-       if (users != NULL) {
-               for (unsigned int i = 0; users[i] != NULL; i++) {
-                       str_append_c(cmd, '\t');
-                       str_append_tabescaped(cmd, users[i]);
-               }
-       }
-       ipc_client_cmd(ctx->ipc, str_c(cmd), cmd_proxy_kick_callback, NULL);
-       io_loop_run(current_ioloop);
-       ipc_client_deinit(&ctx->ipc);
-}
-
-struct doveadm_cmd_ver2 doveadm_cmd_proxy[] = {
-{
-       .name = "proxy list",
-       .usage = "[-a <ipc socket path>]",
-       .cmd = cmd_proxy_list,
-DOVEADM_CMD_PARAMS_START
-DOVEADM_CMD_PARAM('a', "socket-path", CMD_PARAM_STR, 0)
-DOVEADM_CMD_PARAMS_END
-},
-{
-       .name = "proxy kick",
-       .usage = "[-a <ipc socket path>] [-f <passdb field>] [-h <host> [...] | <user> [...]]",
-       .cmd = cmd_proxy_kick,
-DOVEADM_CMD_PARAMS_START
-DOVEADM_CMD_PARAM('a', "socket-path", CMD_PARAM_STR, 0)
-DOVEADM_CMD_PARAM('f', "passdb-field", CMD_PARAM_STR, 0)
-DOVEADM_CMD_PARAM('h', "host", CMD_PARAM_STR, 0)
-DOVEADM_CMD_PARAM('\0', "user", CMD_PARAM_ARRAY, CMD_PARAM_FLAG_POSITIONAL)
-DOVEADM_CMD_PARAMS_END
-}
-};
-
-static void proxy_cmd_help(struct doveadm_cmd_context *cctx)
-{
-       unsigned int i;
-
-       for (i = 0; i < N_ELEMENTS(doveadm_cmd_proxy); i++) {
-               if (doveadm_cmd_proxy[i].cmd == cctx->cmd->cmd)
-                       help_ver2(&doveadm_cmd_proxy[i]);
-       }
-       i_unreached();
-}
-
-void doveadm_register_proxy_commands(void)
-{
-       unsigned int i;
-
-       for (i = 0; i < N_ELEMENTS(doveadm_cmd_proxy); i++)
-               doveadm_cmd_register_ver2(&doveadm_cmd_proxy[i]);
-}
index 657bd5c16808b2c1fce5d5b9c771d166bee988a8..83f7c21d0101ebd91f71d92a61350df11c86815b 100644 (file)
@@ -490,14 +490,22 @@ static void cmd_who(struct doveadm_cmd_context *cctx)
        pool_unref(&ctx.pool);
 }
 
+#define DOVEADM_CMD_WHO_FIELDS \
+       .cmd = cmd_who, \
+       .usage = "[-a <anvil socket path>] [-1] [-f <passdb field>] [<user mask>] [<ip/bits>]", \
+DOVEADM_CMD_PARAMS_START \
+DOVEADM_CMD_PARAM('a',"socket-path", CMD_PARAM_STR, 0) \
+DOVEADM_CMD_PARAM('1',"separate-connections", CMD_PARAM_BOOL, 0) \
+DOVEADM_CMD_PARAM('f',"passdb-field", CMD_PARAM_STR, 0) \
+DOVEADM_CMD_PARAM('\0',"mask", CMD_PARAM_ARRAY, CMD_PARAM_FLAG_POSITIONAL) \
+DOVEADM_CMD_PARAMS_END
+
 struct doveadm_cmd_ver2 doveadm_cmd_who_ver2 = {
        .name = "who",
-       .cmd = cmd_who,
-       .usage = "[-a <anvil socket path>] [-1] [-f <passdb field>] [<user mask>] [<ip/bits>]",
-DOVEADM_CMD_PARAMS_START
-DOVEADM_CMD_PARAM('a',"socket-path", CMD_PARAM_STR, 0)
-DOVEADM_CMD_PARAM('1',"separate-connections", CMD_PARAM_BOOL, 0)
-DOVEADM_CMD_PARAM('f',"passdb-field", CMD_PARAM_STR, 0)
-DOVEADM_CMD_PARAM('\0',"mask", CMD_PARAM_ARRAY, CMD_PARAM_FLAG_POSITIONAL)
-DOVEADM_CMD_PARAMS_END
+       DOVEADM_CMD_WHO_FIELDS
+};
+
+struct doveadm_cmd_ver2 doveadm_cmd_proxy_list_ver2 = {
+       .name = "proxy list",
+       DOVEADM_CMD_WHO_FIELDS
 };