From: Timo Sirainen Date: Wed, 9 Jun 2021 22:14:14 +0000 (+0300) Subject: doveadm: Remove struct doveadm_cmd and related code X-Git-Tag: 2.3.17~300 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1e48423c17f8dfcc960683f339390af9ba637416;p=thirdparty%2Fdovecot%2Fcore.git doveadm: Remove struct doveadm_cmd and related code --- diff --git a/src/doveadm/client-connection-tcp.c b/src/doveadm/client-connection-tcp.c index 5e0be2e439..f5da7b4d22 100644 --- a/src/doveadm/client-connection-tcp.c +++ b/src/doveadm/client-connection-tcp.c @@ -189,16 +189,6 @@ doveadm_cmd_server_run_ver2(struct client_connection_tcp *conn, doveadm_cmd_server_post(conn, cctx->cmd->name); } -static void -doveadm_cmd_server_run(struct client_connection_tcp *conn, - int argc, const char *const argv[], - const struct doveadm_cmd *cmd) -{ - i_getopt_reset(); - cmd->cmd(argc, (char **)argv); - doveadm_cmd_server_post(conn, cmd->name); -} - static int doveadm_mail_cmd_server_parse(const struct doveadm_mail_cmd *cmd, const struct doveadm_settings *set, @@ -318,7 +308,6 @@ static int doveadm_cmd_handle(struct client_connection_tcp *conn, struct doveadm_cmd_context *cctx) { struct ioloop *prev_ioloop = current_ioloop; - const struct doveadm_cmd *cmd = NULL; const struct doveadm_mail_cmd *mail_cmd; struct doveadm_mail_cmd_context *mctx = NULL; const struct doveadm_cmd_ver2 *cmd_ver2; @@ -326,11 +315,8 @@ static int doveadm_cmd_handle(struct client_connection_tcp *conn, if ((cmd_ver2 = doveadm_cmd_find_with_args_ver2(cmd_name, &argc, &argv)) == NULL) { mail_cmd = doveadm_mail_cmd_find(cmd_name); if (mail_cmd == NULL) { - cmd = doveadm_cmd_find_with_args(cmd_name, &argc, &argv); - if (cmd == NULL) { - i_error("doveadm: Client sent unknown command: %s", cmd_name); - return -1; - } + i_error("doveadm: Client sent unknown command: %s", cmd_name); + return -1; } else { if (doveadm_mail_cmd_server_parse(mail_cmd, conn->conn.set, argc, argv, @@ -351,8 +337,6 @@ static int doveadm_cmd_handle(struct client_connection_tcp *conn, if (cmd_ver2 != NULL) doveadm_cmd_server_run_ver2(conn, argc, argv, cctx); - else if (cmd != NULL) - doveadm_cmd_server_run(conn, argc, argv, cmd); else { i_assert(mctx != NULL); doveadm_mail_cmd_server_run(conn, mctx); diff --git a/src/doveadm/doveadm-cmd.c b/src/doveadm/doveadm-cmd.c index 08c9651563..2cfc2220ea 100644 --- a/src/doveadm/doveadm-cmd.c +++ b/src/doveadm/doveadm-cmd.c @@ -44,7 +44,6 @@ static const struct exit_code_str { { DOVEADM_EX_NOTFOUND, "NOTFOUND" } }; -ARRAY_TYPE(doveadm_cmd) doveadm_cmds; ARRAY_TYPE(doveadm_cmd_ver2) doveadm_cmds_ver2; ARRAY_DEFINE_TYPE(getopt_option_array, struct option); @@ -68,11 +67,6 @@ int doveadm_str_to_exit_code(const char *reason) return DOVEADM_EX_UNKNOWN; } -void doveadm_register_cmd(const struct doveadm_cmd *cmd) -{ - array_push_back(&doveadm_cmds, cmd); -} - void doveadm_cmd_register_ver2(struct doveadm_cmd_ver2 *cmd) { if (cmd->cmd == NULL) { @@ -141,69 +135,10 @@ doveadm_cmd_find_with_args_ver2(const char *cmd_name, int *argc, return NULL; } -static bool -doveadm_cmd_find_multi_word(const char *cmdname, int *_argc, - const char *const *_argv[]) -{ - int argc = *_argc; - const char *const *argv = *_argv; - size_t len; - - if (argc < 2) - return FALSE; - - len = strlen(argv[1]); - if (!str_begins(cmdname, argv[1])) - return FALSE; - - argc--; argv++; - if (cmdname[len] == ' ') { - /* more args */ - if (!doveadm_cmd_find_multi_word(cmdname + len + 1, - &argc, &argv)) - return FALSE; - } else { - if (cmdname[len] != '\0') - return FALSE; - } - - *_argc = argc; - *_argv = argv; - return TRUE; -} - -const struct doveadm_cmd * -doveadm_cmd_find_with_args(const char *cmd_name, int *argc, - const char *const *argv[]) -{ - const struct doveadm_cmd *cmd; - size_t cmd_name_len; - - i_assert(*argc > 0); - - cmd_name_len = strlen(cmd_name); - array_foreach(&doveadm_cmds, cmd) { - if (strcmp(cmd->name, cmd_name) == 0) - return cmd; - - /* see if it matches a multi-word command */ - if (strncmp(cmd->name, cmd_name, cmd_name_len) == 0 && - cmd->name[cmd_name_len] == ' ') { - const char *subcmd_name = cmd->name + cmd_name_len + 1; - - if (doveadm_cmd_find_multi_word(subcmd_name, - argc, argv)) - return cmd; - } - } - return NULL; -} - void doveadm_cmds_init(void) { unsigned int i; - i_array_init(&doveadm_cmds, 32); i_array_init(&doveadm_cmds_ver2, 2); for (i = 0; i < N_ELEMENTS(doveadm_commands_ver2); i++) @@ -220,7 +155,6 @@ void doveadm_cmds_init(void) void doveadm_cmds_deinit(void) { - array_free(&doveadm_cmds); array_free(&doveadm_cmds_ver2); } diff --git a/src/doveadm/doveadm-cmd.h b/src/doveadm/doveadm-cmd.h index cc3ad45d4e..a53d340d5a 100644 --- a/src/doveadm/doveadm-cmd.h +++ b/src/doveadm/doveadm-cmd.h @@ -59,12 +59,6 @@ ARRAY_DEFINE_TYPE(doveadm_cmd_param_arr_t, struct doveadm_cmd_param); typedef void doveadm_command_ver2_t(struct doveadm_cmd_context *cctx); -struct doveadm_cmd { - doveadm_command_t *cmd; - const char *name; - const char *short_usage; -}; - struct doveadm_cmd_ver2 { doveadm_command_ver2_t *cmd; struct doveadm_mail_cmd_context *(*mail_cmd)(void); @@ -89,18 +83,9 @@ struct doveadm_cmd_context { struct ostream *output; }; -ARRAY_DEFINE_TYPE(doveadm_cmd, struct doveadm_cmd); -extern ARRAY_TYPE(doveadm_cmd) doveadm_cmds; - ARRAY_DEFINE_TYPE(doveadm_cmd_ver2, struct doveadm_cmd_ver2); extern ARRAY_TYPE(doveadm_cmd_ver2) doveadm_cmds_ver2; -void doveadm_register_cmd(const struct doveadm_cmd *cmd); - -const struct doveadm_cmd * -doveadm_cmd_find_with_args(const char *cmd_name, int *argc, - const char *const *argv[]); - void doveadm_register_auth_commands(void); void doveadm_register_auth_server_commands(void); void doveadm_register_director_commands(void); diff --git a/src/doveadm/doveadm.c b/src/doveadm/doveadm.c index 2f4408afd1..581ce4b7eb 100644 --- a/src/doveadm/doveadm.c +++ b/src/doveadm/doveadm.c @@ -114,7 +114,6 @@ static void ATTR_NORETURN usage_to(FILE *out, const char *prefix) { const struct doveadm_cmd_ver2 *cmd2; - const struct doveadm_cmd *cmd; string_t *str = t_str_new(1024); fprintf(out, "usage: doveadm [-Dv] [-f ] "); @@ -122,8 +121,6 @@ usage_to(FILE *out, const char *prefix) fprintf(out, "%s ", prefix); fprintf(out, " []\n"); - array_foreach(&doveadm_cmds, cmd) - str_printfa(str, "%s\t%s\n", cmd->name, cmd->short_usage); array_foreach(&doveadm_cmds_ver2, cmd2) str_printfa(str, "%s\t%s\n", cmd2->name, cmd2->usage); @@ -138,18 +135,6 @@ void usage(void) usage_to(stderr, ""); } -static void ATTR_NORETURN -help_to(const struct doveadm_cmd *cmd, FILE *out) -{ - fprintf(out, "doveadm %s %s\n", cmd->name, cmd->short_usage); - lib_exit(EX_USAGE); -} - -void help(const struct doveadm_cmd *cmd) -{ - help_to(cmd, stdout); -} - static void ATTR_NORETURN help_to_ver2(const struct doveadm_cmd_ver2 *cmd, FILE *out) { @@ -242,29 +227,11 @@ static void cmd_exec(struct doveadm_cmd_context *cctx) execv_const(argv[0], argv); } -static bool doveadm_try_run(const char *cmd_name, int argc, - const char *const argv[]) -{ - const struct doveadm_cmd *cmd; - - cmd = doveadm_cmd_find_with_args(cmd_name, &argc, &argv); - if (cmd == NULL) - return FALSE; - cmd->cmd(argc, (char **)argv); - return TRUE; -} - static bool doveadm_has_subcommands(const char *cmd_name) { const struct doveadm_cmd_ver2 *cmd2; - const struct doveadm_cmd *cmd; size_t len = strlen(cmd_name); - array_foreach(&doveadm_cmds, cmd) { - if (strncmp(cmd->name, cmd_name, len) == 0 && - cmd->name[len] == ' ') - return TRUE; - } array_foreach(&doveadm_cmds_ver2, cmd2) { if (strncmp(cmd2->name, cmd_name, len) == 0 && cmd2->name[len] == ' ') @@ -394,7 +361,6 @@ int main(int argc, char *argv[]) cctx.username = getenv("USER"); if (!doveadm_cmd_try_run_ver2(cmd_name, argc, (const char**)argv, &cctx) && - !doveadm_try_run(cmd_name, argc, (const char **)argv) && !doveadm_mail_try_run(cmd_name, argc, argv)) { if (doveadm_has_subcommands(cmd_name)) usage_to(stdout, cmd_name); diff --git a/src/doveadm/doveadm.h b/src/doveadm/doveadm.h index 428a291bc3..d4f74e555f 100644 --- a/src/doveadm/doveadm.h +++ b/src/doveadm/doveadm.h @@ -25,7 +25,6 @@ extern bool doveadm_verbose_proctitle; extern int doveadm_exit_code; void usage(void) ATTR_NORETURN; -void help(const struct doveadm_cmd *cmd) ATTR_NORETURN; void help_ver2(const struct doveadm_cmd_ver2 *cmd) ATTR_NORETURN; void doveadm_master_send_signal(int signo); diff --git a/src/doveadm/main.c b/src/doveadm/main.c index b35dccc545..b5641f1056 100644 --- a/src/doveadm/main.c +++ b/src/doveadm/main.c @@ -46,12 +46,6 @@ static void client_connected(struct master_service_connection *conn) } } -void help(const struct doveadm_cmd *cmd) -{ - i_fatal("Client sent invalid command. Usage: %s %s", - cmd->name, cmd->short_usage); -} - void help_ver2(const struct doveadm_cmd_ver2 *cmd) { i_fatal("Client sent invalid command. Usage: %s %s",