From cc20940626bb4563de37feec958a2c5037946e63 Mon Sep 17 00:00:00 2001 From: Marco Bettini <marco.bettini@open-xchange.com> Date: Mon, 16 May 2022 13:35:16 +0000 Subject: [PATCH] plugins: Remove doveadm_mail_cmd_context::getopt_args --- .../doveadm-sieve-cmd-activate.c | 12 +++---- .../doveadm-sieve/doveadm-sieve-cmd-delete.c | 35 ++++--------------- .../doveadm-sieve/doveadm-sieve-cmd-get.c | 11 +++--- .../doveadm-sieve/doveadm-sieve-cmd-list.c | 4 +-- .../doveadm-sieve/doveadm-sieve-cmd-put.c | 34 ++++-------------- .../doveadm-sieve/doveadm-sieve-cmd-rename.c | 14 ++++---- src/plugins/doveadm-sieve/doveadm-sieve-cmd.c | 34 +++++++----------- src/plugins/doveadm-sieve/doveadm-sieve-cmd.h | 3 +- 8 files changed, 44 insertions(+), 103 deletions(-) diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-activate.c b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-activate.c index e729b8f5c..2246d0ef6 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-activate.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-activate.c @@ -88,18 +88,16 @@ static int cmd_sieve_deactivate_run(struct doveadm_sieve_cmd_context *_ctx) return 0; } -static void -cmd_sieve_activate_init(struct doveadm_mail_cmd_context *_ctx, - const char *const args[]) + +static void cmd_sieve_activate_init(struct doveadm_mail_cmd_context *_ctx) { struct doveadm_sieve_activate_cmd_context *ctx = (struct doveadm_sieve_activate_cmd_context *)_ctx; + struct doveadm_cmd_context *cctx = _ctx->cctx; - if (str_array_length(args) != 1) + if (!doveadm_cmd_param_str(cctx, "scriptname", &ctx->scriptname)) doveadm_mail_help_name("sieve activate"); - doveadm_sieve_cmd_scriptnames_check(args); - - ctx->scriptname = p_strdup(ctx->ctx.ctx.pool, args[0]); + doveadm_sieve_cmd_scriptname_check(ctx->scriptname); } static struct doveadm_mail_cmd_context *cmd_sieve_activate_alloc(void) diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-delete.c b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-delete.c index 1dd058e6f..96ccada5b 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-delete.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-delete.c @@ -55,39 +55,18 @@ static int cmd_sieve_delete_run(struct doveadm_sieve_cmd_context *_ctx) return ret; } -static void -cmd_sieve_delete_init(struct doveadm_mail_cmd_context *_ctx, - const char *const args[]) +static void cmd_sieve_delete_init(struct doveadm_mail_cmd_context *_ctx) { struct doveadm_sieve_delete_cmd_context *ctx = (struct doveadm_sieve_delete_cmd_context *)_ctx; - const char *name; - unsigned int i; + struct doveadm_cmd_context *cctx = _ctx->cctx; - if (args[0] == NULL) - doveadm_mail_help_name("sieve delete"); - doveadm_sieve_cmd_scriptnames_check(args); + ctx->ignore_active = doveadm_cmd_param_flag(cctx, "ignore-active"); - for (i = 0; args[i] != NULL; i++) { - name = p_strdup(ctx->ctx.ctx.pool, args[i]); - array_append(&ctx->scriptnames, &name, 1); - } -} - -static bool -cmd_sieve_delete_parse_arg(struct doveadm_mail_cmd_context *_ctx, int c) -{ - struct doveadm_sieve_delete_cmd_context *ctx = - (struct doveadm_sieve_delete_cmd_context *)_ctx; + if (!doveadm_cmd_param_array_append(cctx, "scriptname", &ctx->scriptnames)) + doveadm_mail_help_name("sieve delete"); - switch (c) { - case 'a': - ctx->ignore_active = TRUE; - break; - default: - return FALSE; - } - return TRUE; + doveadm_sieve_cmd_scriptnames_check(&ctx->scriptnames); } static struct doveadm_mail_cmd_context *cmd_sieve_delete_alloc(void) @@ -95,8 +74,6 @@ static struct doveadm_mail_cmd_context *cmd_sieve_delete_alloc(void) struct doveadm_sieve_delete_cmd_context *ctx; ctx = doveadm_sieve_cmd_alloc(struct doveadm_sieve_delete_cmd_context); - ctx->ctx.ctx.getopt_args = "a"; - ctx->ctx.ctx.v.parse_arg = cmd_sieve_delete_parse_arg; ctx->ctx.ctx.v.init = cmd_sieve_delete_init; ctx->ctx.v.run = cmd_sieve_delete_run; p_array_init(&ctx->scriptnames, ctx->ctx.ctx.pool, 16); diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-get.c b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-get.c index 2ccdba1fd..b7f7eac90 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-get.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-get.c @@ -43,19 +43,16 @@ static int cmd_sieve_get_run(struct doveadm_sieve_cmd_context *_ctx) return ret; } -static void -cmd_sieve_get_init(struct doveadm_mail_cmd_context *_ctx, - const char *const args[]) +static void cmd_sieve_get_init(struct doveadm_mail_cmd_context *_ctx) { struct doveadm_sieve_get_cmd_context *ctx = (struct doveadm_sieve_get_cmd_context *)_ctx; + struct doveadm_cmd_context *cctx = _ctx->cctx; - if (str_array_length(args) != 1) + if (!doveadm_cmd_param_str(cctx, "scriptname", &ctx->scriptname)) doveadm_mail_help_name("sieve get"); - doveadm_sieve_cmd_scriptnames_check(args); - - ctx->scriptname = p_strdup(ctx->ctx.ctx.pool, args[0]); + doveadm_sieve_cmd_scriptname_check(ctx->scriptname); doveadm_print_header_simple("sieve script"); } diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-list.c b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-list.c index 0071270ca..1b2224aa9 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-list.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-list.c @@ -44,8 +44,7 @@ static int cmd_sieve_list_run(struct doveadm_sieve_cmd_context *_ctx) } static void -cmd_sieve_list_init(struct doveadm_mail_cmd_context *_ctx ATTR_UNUSED, - const char *const args[] ATTR_UNUSED) +cmd_sieve_list_init(struct doveadm_mail_cmd_context *_ctx ATTR_UNUSED) { doveadm_print_header("script", "script", DOVEADM_PRINT_HEADER_FLAG_HIDE_TITLE); @@ -59,7 +58,6 @@ static struct doveadm_mail_cmd_context *cmd_sieve_list_alloc(void) ctx = doveadm_sieve_cmd_alloc(struct doveadm_sieve_cmd_context); ctx->ctx.v.init = cmd_sieve_list_init; - ctx->ctx.getopt_args = "s"; ctx->v.run = cmd_sieve_list_run; doveadm_print_init(DOVEADM_PRINT_TYPE_FLOW); return &ctx->ctx; diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-put.c b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-put.c index d8cdb531f..0d43e6930 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-put.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-put.c @@ -139,45 +139,25 @@ static int cmd_sieve_put_run(struct doveadm_sieve_cmd_context *_ctx) return ret < 0 ? -1 : 0; } -static void -cmd_sieve_put_init(struct doveadm_mail_cmd_context *_ctx, - const char *const args[]) +static void cmd_sieve_put_init(struct doveadm_mail_cmd_context *_ctx) { struct doveadm_sieve_put_cmd_context *ctx = (struct doveadm_sieve_put_cmd_context *)_ctx; + struct doveadm_cmd_context *cctx = _ctx->cctx; - if (str_array_length(args) != 1) + ctx->activate = doveadm_cmd_param_flag(cctx, "activate"); + if (!doveadm_cmd_param_str(cctx, "scriptname", &ctx->scriptname)) doveadm_mail_help_name("sieve put"); - doveadm_sieve_cmd_scriptnames_check(args); - - ctx->scriptname = p_strdup(ctx->ctx.ctx.pool, args[0]); - + doveadm_sieve_cmd_scriptname_check(ctx->scriptname); doveadm_mail_get_input(_ctx); } -static bool -cmd_sieve_put_parse_arg(struct doveadm_mail_cmd_context *_ctx, int c) -{ - struct doveadm_sieve_put_cmd_context *ctx = - (struct doveadm_sieve_put_cmd_context *)_ctx; - - switch (c) { - case 'a': - ctx->activate = TRUE; - break; - default: - return FALSE; - } - return TRUE; -} - -static struct doveadm_mail_cmd_context *cmd_sieve_put_alloc(void) +static struct doveadm_mail_cmd_context * +cmd_sieve_put_alloc(void) { struct doveadm_sieve_put_cmd_context *ctx; ctx = doveadm_sieve_cmd_alloc(struct doveadm_sieve_put_cmd_context); - ctx->ctx.ctx.getopt_args = "a"; - ctx->ctx.ctx.v.parse_arg = cmd_sieve_put_parse_arg; ctx->ctx.ctx.v.init = cmd_sieve_put_init; ctx->ctx.v.run = cmd_sieve_put_run; return &ctx->ctx.ctx; diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-rename.c b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-rename.c index ba127f28f..4ec9c0222 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-rename.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-rename.c @@ -43,19 +43,17 @@ static int cmd_sieve_rename_run(struct doveadm_sieve_cmd_context *_ctx) return ret; } -static void -cmd_sieve_rename_init(struct doveadm_mail_cmd_context *_ctx, - const char *const args[]) +static void cmd_sieve_rename_init(struct doveadm_mail_cmd_context *_ctx) { struct doveadm_sieve_rename_cmd_context *ctx = (struct doveadm_sieve_rename_cmd_context *)_ctx; + struct doveadm_cmd_context *cctx = _ctx->cctx; - if (str_array_length(args) != 2) + if (!doveadm_cmd_param_str(cctx, "oldname", &ctx->oldname) || + !doveadm_cmd_param_str(cctx, "newname", &ctx->newname)) doveadm_mail_help_name("sieve rename"); - doveadm_sieve_cmd_scriptnames_check(args); - - ctx->oldname = p_strdup(ctx->ctx.ctx.pool, args[0]); - ctx->newname = p_strdup(ctx->ctx.ctx.pool, args[1]); + doveadm_sieve_cmd_scriptname_check(ctx->oldname); + doveadm_sieve_cmd_scriptname_check(ctx->newname); } static struct doveadm_mail_cmd_context *cmd_sieve_rename_alloc(void) diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd.c b/src/plugins/doveadm-sieve/doveadm-sieve-cmd.c index 5190fd034..e0c36fd78 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd.c @@ -75,29 +75,23 @@ static const struct sieve_callbacks sieve_callbacks = { doveadm_sieve_cmd_get_setting, }; -static bool -doveadm_sieve_cmd_parse_arg(struct doveadm_mail_cmd_context *_ctx ATTR_UNUSED, - int c ATTR_UNUSED) +void doveadm_sieve_cmd_scriptname_check(const char *arg) { - return FALSE; + if (!uni_utf8_str_is_valid(arg)) + i_fatal_status(EX_DATAERR, + "Sieve script name not valid UTF-8: %s", arg); + + if (!sieve_script_name_is_valid(arg) ) + i_fatal_status(EX_DATAERR, + "Sieve script name not valid: %s", arg); + } -void doveadm_sieve_cmd_scriptnames_check(const char *const args[]) +void doveadm_sieve_cmd_scriptnames_check(ARRAY_TYPE(const_string) *args) { - unsigned int i; - - for (i = 0; args[i] != NULL; i++) { - if (!uni_utf8_str_is_valid(args[i])) { - i_fatal_status(EX_DATAERR, - "Sieve script name not valid UTF-8: %s", - args[i]); - } - if (!sieve_script_name_is_valid(args[i])) { - i_fatal_status(EX_DATAERR, - "Sieve script name not valid: %s", - args[i]); - } - } + const char *const *arg; + array_foreach(args, arg) + doveadm_sieve_cmd_scriptname_check(*arg); } static int @@ -153,8 +147,6 @@ struct doveadm_sieve_cmd_context *doveadm_sieve_cmd_alloc_size(size_t size) ctx = (struct doveadm_sieve_cmd_context *) doveadm_mail_cmd_alloc_size(size); - ctx->ctx.getopt_args = "s"; - ctx->ctx.v.parse_arg = doveadm_sieve_cmd_parse_arg; ctx->ctx.v.run = doveadm_sieve_cmd_run; return ctx; } diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd.h b/src/plugins/doveadm-sieve/doveadm-sieve-cmd.h index ef8b757bc..3aa2dd446 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd.h +++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd.h @@ -27,7 +27,8 @@ void doveadm_sieve_cmd_failed_storage(struct doveadm_sieve_cmd_context *ctx, (type *)doveadm_sieve_cmd_alloc_size(sizeof(type)) struct doveadm_sieve_cmd_context *doveadm_sieve_cmd_alloc_size(size_t size); -void doveadm_sieve_cmd_scriptnames_check(const char *const args[]); +void doveadm_sieve_cmd_scriptname_check(const char *arg); +void doveadm_sieve_cmd_scriptnames_check(ARRAY_TYPE(const_string) *args); extern struct doveadm_cmd_ver2 doveadm_sieve_cmd_list; extern struct doveadm_cmd_ver2 doveadm_sieve_cmd_get; -- GitLab