dovecot-2.0: doveadm: Added search command.

dovecot at dovecot.org dovecot at dovecot.org
Fri Apr 30 15:43:30 EEST 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/0aa904c74f76
changeset: 11235:0aa904c74f76
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Apr 30 15:43:27 2010 +0300
description:
doveadm: Added search command.

diffstat:

 src/doveadm/Makefile.am           |   1 +
 src/doveadm/doveadm-mail-search.c |  59 +++++++++++++++++++++++++++++
 src/doveadm/doveadm-mail.c        |   1 +
 src/doveadm/doveadm-mail.h        |   1 +
 4 files changed, 62 insertions(+), 0 deletions(-)

diffs (96 lines):

diff -r 957e907834e7 -r 0aa904c74f76 src/doveadm/Makefile.am
--- a/src/doveadm/Makefile.am	Fri Apr 30 15:35:59 2010 +0300
+++ b/src/doveadm/Makefile.am	Fri Apr 30 15:43:27 2010 +0300
@@ -58,6 +58,7 @@
 	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 -r 957e907834e7 -r 0aa904c74f76 src/doveadm/doveadm-mail-search.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/doveadm/doveadm-mail-search.c	Fri Apr 30 15:43:27 2010 +0300
@@ -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);
+}
diff -r 957e907834e7 -r 0aa904c74f76 src/doveadm/doveadm-mail.c
--- a/src/doveadm/doveadm-mail.c	Fri Apr 30 15:35:59 2010 +0300
+++ b/src/doveadm/doveadm-mail.c	Fri Apr 30 15:43:27 2010 +0300
@@ -330,6 +330,7 @@
 	{ 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> [...]]" }
diff -r 957e907834e7 -r 0aa904c74f76 src/doveadm/doveadm-mail.h
--- a/src/doveadm/doveadm-mail.h	Fri Apr 30 15:35:59 2010 +0300
+++ b/src/doveadm/doveadm-mail.h	Fri Apr 30 15:43:27 2010 +0300
@@ -33,6 +33,7 @@
 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[]);


More information about the dovecot-cvs mailing list