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