]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: Added search command.
authorTimo Sirainen <tss@iki.fi>
Fri, 30 Apr 2010 12:43:27 +0000 (15:43 +0300)
committerTimo Sirainen <tss@iki.fi>
Fri, 30 Apr 2010 12:43:27 +0000 (15:43 +0300)
--HG--
branch : HEAD

src/doveadm/Makefile.am
src/doveadm/doveadm-mail-search.c [new file with mode: 0644]
src/doveadm/doveadm-mail.c
src/doveadm/doveadm-mail.h

index b5e66caf4b406d0553dd9ca4226e7283e165bc3f..43a127b20168dac80072b62fd0b43ad693651f2d 100644 (file)
@@ -58,6 +58,7 @@ doveadm_SOURCES = \
        doveadm-mail-iter.c \
        doveadm-mail-list.c \
        doveadm-mail-list-iter.c \
+       doveadm-mail-search.c \
        doveadm-penalty.c \
        doveadm-pw.c \
        doveadm-settings.c \
diff --git a/src/doveadm/doveadm-mail-search.c b/src/doveadm/doveadm-mail-search.c
new file mode 100644 (file)
index 0000000..26ce956
--- /dev/null
@@ -0,0 +1,59 @@
+/* Copyright (c) 2010 Dovecot authors, see the included COPYING file */
+
+#include "lib.h"
+#include "mail-storage.h"
+#include "doveadm-mail-list-iter.h"
+#include "doveadm-mail-iter.h"
+#include "doveadm-mail.h"
+
+#include <stdio.h>
+
+static int
+cmd_search_box(const struct mailbox_info *info,
+              struct mail_search_args *search_args)
+{
+       struct doveadm_mail_iter *iter;
+       struct mailbox_transaction_context *trans;
+       struct mail *mail;
+       uint8_t guid[MAIL_GUID_128_SIZE];
+       const char *guid_str;
+       int ret;
+
+       if (doveadm_mail_iter_init(info, search_args, &trans, &iter) < 0)
+               return -1;
+
+       mail = mail_alloc(trans, 0, NULL);
+       if (mailbox_get_guid(mail->box, guid) < 0)
+               ret = -1;
+       else {
+               guid_str = mail_guid_128_to_string(guid);
+               while (doveadm_mail_iter_next(iter, mail))
+                       printf("mailbox-guid %s uid %u\n", guid_str, mail->uid);
+       }
+       mail_free(&mail);
+       if (doveadm_mail_iter_deinit(&iter) < 0)
+               ret = -1;
+       return ret;
+}
+
+void cmd_search(struct mail_user *user, const char *const args[])
+{
+       const enum mailbox_list_iter_flags iter_flags =
+               MAILBOX_LIST_ITER_RAW_LIST |
+               MAILBOX_LIST_ITER_VIRTUAL_NAMES |
+               MAILBOX_LIST_ITER_NO_AUTO_INBOX |
+               MAILBOX_LIST_ITER_RETURN_NO_FLAGS;
+       struct mail_search_args *search_args;
+       struct doveadm_mail_list_iter *iter;
+       const struct mailbox_info *info;
+
+       if (args[0] == NULL)
+               doveadm_mail_help_name("search");
+       search_args = doveadm_mail_build_search_args(args);
+
+       iter = doveadm_mail_list_iter_init(user, search_args, iter_flags);
+       while ((info = doveadm_mail_list_iter_next(iter)) != NULL) T_BEGIN {
+               (void)cmd_search_box(info, search_args);
+       } T_END;
+       doveadm_mail_list_iter_deinit(&iter);
+}
index eb3fcae003cbfa57b560eec0d8560dfae582e49b..78c1d01e77b262ae3323d428e1ee7486a5757e08 100644 (file)
@@ -330,6 +330,7 @@ static struct doveadm_mail_cmd mail_commands[] = {
        { cmd_purge, "purge", NULL },
        { cmd_force_resync, "force-resync", "<mailbox>" },
        { cmd_expunge, "expunge", "<search query>" },
+       { cmd_search, "search", "<search query>" },
        { cmd_fetch, "fetch", "<fields> <search query>" },
        { cmd_altmove, "altmove", "<search query>" },
        { cmd_list, "list", "[<mailbox> [...]]" }
index 50dcb27336be786deb1e87b967dd47086f8fd6e8..3bb8c0b162a1f8b9d1863c9b3e9b971985bdf4a0 100644 (file)
@@ -33,6 +33,7 @@ struct mail_search_args *
 doveadm_mail_build_search_args(const char *const args[]);
 
 void cmd_expunge(struct mail_user *user, const char *const args[]);
+void cmd_search(struct mail_user *user, const char *const args[]);
 void cmd_fetch(struct mail_user *user, const char *const args[]);
 void cmd_altmove(struct mail_user *user, const char *const args[]);
 void cmd_list(struct mail_user *user, const char *const args[]);