Mercurial > dovecot > core-2.2
changeset 17949:98b5ccc539b5
lib-storage: Added X-REAL-UID search parameter.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 14 Oct 2014 09:39:50 -0700 |
parents | c8fd499023ef |
children | 6dad1f6e8930 |
files | src/lib-storage/index/index-search.c src/lib-storage/mail-search-register-imap.c src/lib-storage/mail-search.c src/lib-storage/mail-search.h |
diffstat | 4 files changed, 34 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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;
--- 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)
--- 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;