From: Timo Sirainen Date: Mon, 2 Dec 2013 23:33:18 +0000 (+0200) Subject: imap: Don't send [NOMODSEQ] on SELECT/EXAMINE reply when condstore hasn't been enable... X-Git-Tag: 2.2.10~48 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a646dafca8e58674de85442ae4a2811a8eece9f6;p=thirdparty%2Fdovecot%2Fcore.git imap: Don't send [NOMODSEQ] on SELECT/EXAMINE reply when condstore hasn't been enabled yet. This is definitely the better behavior and was also clearly intended by the CONDSTORE RFC, although with some mixed language. --- diff --git a/src/imap/cmd-select.c b/src/imap/cmd-select.c index 6c7c550f62..19ce027116 100644 --- a/src/imap/cmd-select.c +++ b/src/imap/cmd-select.c @@ -353,7 +353,7 @@ select_open(struct imap_select_context *ctx, const char *mailbox, bool readonly) if (status.nonpermanent_modseqs) { client_send_line(client, "* OK [NOMODSEQ] No permanent modsequences"); - } else { + } else if (!status.no_modseq_tracking) { client_send_line(client, t_strdup_printf("* OK [HIGHESTMODSEQ %llu] Highest", (unsigned long long)status.highest_modseq)); diff --git a/src/lib-storage/index/index-status.c b/src/lib-storage/index/index-status.c index 1e7d5d7e29..c522880daa 100644 --- a/src/lib-storage/index/index-status.c +++ b/src/lib-storage/index/index-status.c @@ -138,7 +138,8 @@ void index_storage_get_open_status(struct mailbox *box, status_r->first_recent_uid = hdr->first_recent_uid; if ((items & STATUS_HIGHESTMODSEQ) != 0) { status_r->nonpermanent_modseqs = - mail_index_is_in_memory(box->index) || + mail_index_is_in_memory(box->index); + status_r->no_modseq_tracking = !mail_index_have_modseq_tracking(box->index); status_r->highest_modseq = mail_index_modseq_get_highest(box->view); diff --git a/src/lib-storage/mail-storage.h b/src/lib-storage/mail-storage.h index ad77cfc7c7..1d439a4841 100644 --- a/src/lib-storage/mail-storage.h +++ b/src/lib-storage/mail-storage.h @@ -277,6 +277,9 @@ struct mailbox_status { unsigned int allow_new_keywords:1; /* Modseqs aren't permanent (index is in memory) (STATUS_HIGHESTMODSEQ) */ unsigned int nonpermanent_modseqs:1; + /* Modseq tracking has never been enabled for this mailbox + yet. (STATUS_HIGHESTMODSEQ) */ + unsigned int no_modseq_tracking:1; /* Messages have GUIDs (always set) */ unsigned int have_guids:1;