From: Timo Sirainen Date: Wed, 9 Jun 2021 20:02:36 +0000 (+0300) Subject: doveadm pw: Convert to v2 command X-Git-Tag: 2.3.17~320 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ced5df32b550d9df2f7e4e48ec389708d633a0d7;p=thirdparty%2Fdovecot%2Fcore.git doveadm pw: Convert to v2 command --- diff --git a/src/doveadm/doveadm-cmd.h b/src/doveadm/doveadm-cmd.h index 08ec554059..1308f9b0f4 100644 --- a/src/doveadm/doveadm-cmd.h +++ b/src/doveadm/doveadm-cmd.h @@ -91,7 +91,6 @@ ARRAY_DEFINE_TYPE(doveadm_cmd_ver2, struct doveadm_cmd_ver2); extern ARRAY_TYPE(doveadm_cmd_ver2) doveadm_cmds_ver2; extern struct doveadm_cmd doveadm_cmd_dump; -extern struct doveadm_cmd doveadm_cmd_pw; void doveadm_register_cmd(const struct doveadm_cmd *cmd); @@ -156,6 +155,7 @@ extern struct doveadm_cmd_ver2 doveadm_cmd_oldstats_reset_ver2; extern struct doveadm_cmd_ver2 doveadm_cmd_oldstats_dump_ver2; 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_who_ver2; extern struct doveadm_cmd_ver2 doveadm_cmd_sis_deduplicate; diff --git a/src/doveadm/doveadm-pw.c b/src/doveadm/doveadm-pw.c index a2f770dea5..4f46a9de3e 100644 --- a/src/doveadm/doveadm-pw.c +++ b/src/doveadm/doveadm-pw.c @@ -17,14 +17,14 @@ static struct module *modules = NULL; -static void cmd_pw(int argc, char *argv[]) +static void cmd_pw(struct doveadm_cmd_context *cctx) { const char *hash = NULL; const char *scheme = NULL; const char *plaintext = NULL; const char *test_hash = NULL; bool list_schemes = FALSE, reverse_verify = FALSE; - int c; + int64_t rounds_int64; struct module_dir_load_settings mod_set; struct password_generate_params gen_params; i_zero(&gen_params); @@ -40,36 +40,18 @@ static void cmd_pw(int argc, char *argv[]) modules = module_dir_load_missing(modules, AUTH_MODULE_DIR, NULL, &mod_set); module_dir_init(modules); - while ((c = getopt(argc, argv, "lp:r:s:t:u:V")) > 0) { - switch (c) { - case 'l': - list_schemes = 1; - break; - case 'p': - plaintext = optarg; - break; - case 'r': - if (str_to_uint(optarg, &gen_params.rounds) < 0) - i_fatal("Invalid number of rounds: %s", optarg); - break; - case 's': - scheme = optarg; - break; - case 't': - test_hash = optarg; - reverse_verify = TRUE; - break; - case 'u': - gen_params.user = optarg; - break; - case 'V': - reverse_verify = TRUE; - break; - case '?': - default: - help(&doveadm_cmd_pw); - } + (void)doveadm_cmd_param_bool(cctx, "list", &list_schemes); + (void)doveadm_cmd_param_str(cctx, "plaintext", &plaintext); + if (doveadm_cmd_param_int64(cctx, "rounds", &rounds_int64)) { + if (rounds_int64 > UINT_MAX) + i_fatal("Invalid number of rounds: %"PRId64, rounds_int64); + gen_params.rounds = rounds_int64; } + (void)doveadm_cmd_param_str(cctx, "scheme", &scheme); + if (doveadm_cmd_param_str(cctx, "test-hash", &test_hash)) + reverse_verify = TRUE; + (void)doveadm_cmd_param_str(cctx, "user", &gen_params.user); + (void)doveadm_cmd_param_bool(cctx, "reverse-verify", &reverse_verify); if (list_schemes) { ARRAY_TYPE(password_scheme_p) arr; @@ -84,9 +66,6 @@ static void cmd_pw(int argc, char *argv[]) lib_exit(0); } - if (argc != optind) - help(&doveadm_cmd_pw); - scheme = scheme == NULL ? DEFAULT_SCHEME : t_str_ucase(scheme); if (test_hash != NULL && plaintext == NULL) @@ -138,7 +117,17 @@ static void cmd_pw(int argc, char *argv[]) password_schemes_deinit(); } -struct doveadm_cmd doveadm_cmd_pw = { - cmd_pw, "pw", - "[-l] [-p plaintext] [-r rounds] [-s scheme] [-t hash] [-u user] [-V]" +struct doveadm_cmd_ver2 doveadm_cmd_pw = { + .name = "pw", + .cmd = cmd_pw, + .usage = "[-l] [-p plaintext] [-r rounds] [-s scheme] [-t hash] [-u user] [-V]", +DOVEADM_CMD_PARAMS_START +DOVEADM_CMD_PARAM('l', "list", CMD_PARAM_BOOL, 0) +DOVEADM_CMD_PARAM('p', "plaintext", CMD_PARAM_STR, 0) +DOVEADM_CMD_PARAM('r', "rounds", CMD_PARAM_INT64, 0) +DOVEADM_CMD_PARAM('s', "scheme", CMD_PARAM_STR, 0) +DOVEADM_CMD_PARAM('t', "test-hash", CMD_PARAM_STR, 0) +DOVEADM_CMD_PARAM('u', "user", CMD_PARAM_STR, 0) +DOVEADM_CMD_PARAM('V', "reverse-verify", CMD_PARAM_BOOL, 0) +DOVEADM_CMD_PARAMS_END }; diff --git a/src/doveadm/doveadm.c b/src/doveadm/doveadm.c index 17f8b5b19c..6116752416 100644 --- a/src/doveadm/doveadm.c +++ b/src/doveadm/doveadm.c @@ -248,11 +248,11 @@ static struct doveadm_cmd *doveadm_cmdline_commands[] = { &doveadm_cmd_config, &doveadm_cmd_exec, &doveadm_cmd_dump, - &doveadm_cmd_pw, }; static struct doveadm_cmd_ver2 *doveadm_cmdline_commands_ver2[] = { &doveadm_cmd_oldstats_top_ver2, + &doveadm_cmd_pw, &doveadm_cmd_zlibconnect, };