From: Timo Sirainen Date: Fri, 30 Apr 2010 12:43:27 +0000 (+0300) Subject: doveadm: Added search command. X-Git-Tag: 2.0.beta5~39 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c24a61b4d7fa494422013c1932c1bfd22347aaa6;p=thirdparty%2Fdovecot%2Fcore.git doveadm: Added search command. --HG-- branch : HEAD --- diff --git a/src/doveadm/Makefile.am b/src/doveadm/Makefile.am index b5e66caf4b..43a127b201 100644 --- a/src/doveadm/Makefile.am +++ b/src/doveadm/Makefile.am @@ -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 index 0000000000..26ce956212 --- /dev/null +++ b/src/doveadm/doveadm-mail-search.c @@ -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 + +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); +} diff --git a/src/doveadm/doveadm-mail.c b/src/doveadm/doveadm-mail.c index eb3fcae003..78c1d01e77 100644 --- a/src/doveadm/doveadm-mail.c +++ b/src/doveadm/doveadm-mail.c @@ -330,6 +330,7 @@ static struct doveadm_mail_cmd mail_commands[] = { { cmd_purge, "purge", NULL }, { cmd_force_resync, "force-resync", "" }, { cmd_expunge, "expunge", "" }, + { cmd_search, "search", "" }, { cmd_fetch, "fetch", " " }, { cmd_altmove, "altmove", "" }, { cmd_list, "list", "[ [...]]" } diff --git a/src/doveadm/doveadm-mail.h b/src/doveadm/doveadm-mail.h index 50dcb27336..3bb8c0b162 100644 --- a/src/doveadm/doveadm-mail.h +++ b/src/doveadm/doveadm-mail.h @@ -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[]);