dovecot-2.2: lib-storage: Added X-REAL-UID search parameter.

dovecot at dovecot.org dovecot at dovecot.org
Tue Oct 14 16:40:32 UTC 2014


details:   http://hg.dovecot.org/dovecot-2.2/rev/98b5ccc539b5
changeset: 17949:98b5ccc539b5
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Oct 14 09:39:50 2014 -0700
description:
lib-storage: Added X-REAL-UID search parameter.

diffstat:

 src/lib-storage/index/index-search.c        |   8 ++++++++
 src/lib-storage/mail-search-register-imap.c |  22 +++++++++++++++++++++-
 src/lib-storage/mail-search.c               |   3 +++
 src/lib-storage/mail-search.h               |   3 ++-
 4 files changed, 34 insertions(+), 2 deletions(-)

diffs (97 lines):

diff -r c8fd499023ef -r 98b5ccc539b5 src/lib-storage/index/index-search.c
--- a/src/lib-storage/index/index-search.c	Tue Oct 14 09:36:15 2014 -0700
+++ b/src/lib-storage/index/index-search.c	Tue Oct 14 09:39:50 2014 -0700
@@ -357,6 +357,13 @@
 		if (mail_get_special(ctx->cur_mail, MAIL_FETCH_GUID, &str) < 0)
 			return -1;
 		return strcmp(str, arg->value.str) == 0;
+	case SEARCH_REAL_UID: {
+		struct mail *real_mail;
+
+		if (mail_get_backend_mail(ctx->cur_mail, &real_mail) < 0)
+			return -1;
+		return seq_range_exists(&arg->value.seqset, real_mail->uid);
+	}
 	default:
 		return -1;
 	}
@@ -1347,6 +1354,7 @@
 	case SEARCH_MAILBOX:
 	case SEARCH_MAILBOX_GUID:
 	case SEARCH_MAILBOX_GLOB:
+	case SEARCH_REAL_UID:
 		return TRUE;
 	}
 	return FALSE;
diff -r c8fd499023ef -r 98b5ccc539b5 src/lib-storage/mail-search-register-imap.c
--- a/src/lib-storage/mail-search-register-imap.c	Tue Oct 14 09:36:15 2014 -0700
+++ b/src/lib-storage/mail-search-register-imap.c	Tue Oct 14 09:39:50 2014 -0700
@@ -501,6 +501,25 @@
 	return sarg;
 }
 
+static struct mail_search_arg *
+imap_search_x_real_uid(struct mail_search_build_context *ctx)
+{
+	struct mail_search_arg *sarg;
+
+	/* <message set> */
+	sarg = mail_search_build_str(ctx, SEARCH_REAL_UID);
+	if (sarg == NULL)
+		return NULL;
+
+	p_array_init(&sarg->value.seqset, ctx->pool, 16);
+	if (imap_seq_set_parse(sarg->value.str,
+			       &sarg->value.seqset) < 0) {
+		ctx->_error = "Invalid X-REAL-UID messageset";
+		return NULL;
+	}
+	return sarg;
+}
+
 static const struct mail_search_register_arg imap_register_args[] = {
 	/* argument set operations */
 	{ "NOT", imap_search_not },
@@ -572,7 +591,8 @@
 	/* Other Dovecot extensions: */
 	{ "INTHREAD", imap_search_inthread },
 	{ "X-GUID", imap_search_x_guid },
-	{ "X-MAILBOX", imap_search_x_mailbox }
+	{ "X-MAILBOX", imap_search_x_mailbox },
+	{ "X-REAL-UID", imap_search_x_real_uid }
 };
 
 static struct mail_search_register *mail_search_register_init_imap(void)
diff -r c8fd499023ef -r 98b5ccc539b5 src/lib-storage/mail-search.c
--- a/src/lib-storage/mail-search.c	Tue Oct 14 09:36:15 2014 -0700
+++ b/src/lib-storage/mail-search.c	Tue Oct 14 09:39:50 2014 -0700
@@ -283,6 +283,7 @@
 		break;
 	case SEARCH_SEQSET:
 	case SEARCH_UIDSET:
+	case SEARCH_REAL_UID:
 		p_array_init(&new_arg->value.seqset, pool,
 			     array_count(&arg->value.seqset));
 		array_append_array(&new_arg->value.seqset, &arg->value.seqset);
@@ -759,6 +760,8 @@
 		return FALSE;
 	case SEARCH_UIDSET:
 		return array_cmp(&arg1->value.seqset, &arg2->value.seqset);
+	case SEARCH_REAL_UID:
+		return array_cmp(&arg1->value.seqset, &arg2->value.seqset);
 
 	case SEARCH_FLAGS:
 		return arg1->value.flags == arg2->value.flags;
diff -r c8fd499023ef -r 98b5ccc539b5 src/lib-storage/mail-search.h
--- a/src/lib-storage/mail-search.h	Tue Oct 14 09:36:15 2014 -0700
+++ b/src/lib-storage/mail-search.h	Tue Oct 14 09:39:50 2014 -0700
@@ -42,7 +42,8 @@
 	SEARCH_GUID,
 	SEARCH_MAILBOX,
 	SEARCH_MAILBOX_GUID,
-	SEARCH_MAILBOX_GLOB
+	SEARCH_MAILBOX_GLOB,
+	SEARCH_REAL_UID
 };
 
 enum mail_search_date_type {


More information about the dovecot-cvs mailing list