]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm pw: Convert to v2 command
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Wed, 9 Jun 2021 20:02:36 +0000 (23:02 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Wed, 21 Jul 2021 09:03:09 +0000 (09:03 +0000)
src/doveadm/doveadm-cmd.h
src/doveadm/doveadm-pw.c
src/doveadm/doveadm.c

index 08ec55405975050cd27b1c43d09c1c5782c187f7..1308f9b0f4298374a36173db3c199c660c698353 100644 (file)
@@ -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;
index a2f770dea5071db4930555bf49153e48ef5b325f..4f46a9de3e98cbfcfc29c5b43337b3625f29bfed 100644 (file)
 
 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
 };
index 17f8b5b19cafac95d259e4ab63fa452229e5c29e..6116752416baca053d7495b69dfa23dc7a37c23f 100644 (file)
@@ -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,
 };