]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm user: If no user parameters are given, list all usernames.
authorTimo Sirainen <tss@iki.fi>
Thu, 27 May 2010 18:27:18 +0000 (19:27 +0100)
committerTimo Sirainen <tss@iki.fi>
Thu, 27 May 2010 18:27:18 +0000 (19:27 +0100)
--HG--
branch : HEAD

src/doveadm/doveadm-auth.c

index effe664d0fa0a26bc6e4a28bf5c2bc2d4bb2ed43..73eaecab84a465a988360c91419761e045cef412 100644 (file)
@@ -168,6 +168,28 @@ static void auth_user_info_parse(struct auth_user_info *info, const char *arg)
        }
 }
 
+static void cmd_user_list(const char *auth_socket_path)
+{
+       struct auth_master_user_list_ctx *ctx;
+       struct auth_master_connection *conn;
+       const char *username;
+
+       if (auth_socket_path == NULL) {
+               auth_socket_path = t_strconcat(doveadm_settings->base_dir,
+                                              "/auth-userdb", NULL);
+       }
+
+       conn = auth_master_init(auth_socket_path, 0);
+       ctx = auth_master_user_list_init(conn);
+       while ((username = auth_master_user_list_next(ctx)) != NULL)
+               printf("%s\n", username);
+       if (auth_master_user_list_deinit(&ctx) < 0) {
+               i_error("user listing failed");
+               exit(1);
+       }
+       auth_master_deinit(&conn);
+}
+
 static void
 auth_cmd_common(const struct doveadm_cmd *cmd, int argc, char *argv[])
 {
@@ -190,10 +212,11 @@ auth_cmd_common(const struct doveadm_cmd *cmd, int argc, char *argv[])
                        help(cmd);
                }
        }
-       if (optind == argc)
-               help(cmd);
 
        if (cmd == &doveadm_cmd_auth) {
+               if (optind == argc)
+                       help(cmd);
+
                input.username = argv[optind++];
                input.password = argv[optind] != NULL ? argv[optind++] :
                        t_askpass("Password: ");
@@ -203,9 +226,14 @@ auth_cmd_common(const struct doveadm_cmd *cmd, int argc, char *argv[])
                        exit(FATAL_DEFAULT);
                if (!input.success)
                        exit(1);
+       } else if (optind == argc) {
+               cmd_user_list(auth_socket_path);
        } else {
                bool first = TRUE;
 
+               if (optind == argc)
+                       help(cmd);
+
                while ((input.username = argv[optind++]) != NULL) {
                        if (first)
                                first = FALSE;
@@ -234,5 +262,5 @@ struct doveadm_cmd doveadm_cmd_auth = {
 
 struct doveadm_cmd doveadm_cmd_user = {
        cmd_user, "user",
-       "[-a <userdb socket path>] [-x <auth info>] <user> [<user> ...]", NULL
+       "[-a <userdb socket path>] [-x <auth info>] [<user> ...]", NULL
 };