cmd-select.c revision cb29b57f69861c07e1c0a5015d77ad5938b6dd5d
c25356d5978632df6203437e1953bcb29e0c736fTimo Sirainen/* Copyright (c) 2002-2015 Dovecot authors, see the included COPYING file */
95a1a5195d56f3cf5d1e529aad668f87ad3b979bTimo Sirainenstatic int select_qresync_get_uids(struct imap_select_context *ctx,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen /* change all n:m ranges to n,m and store the results */
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen i_array_init(&ctx->qresync_sample_uidset, uid_count);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen i_array_init(&ctx->qresync_sample_seqset, uid_count);
55a210942dc7da58b2fd0b11bed8da6b030af5c1Timo Sirainen for (i = 0; i < uid_count; i++) {
fc7b17677ac1a5fa3f7fe13d5ef7dcfea8d9b4a1Timo Sirainen if (!seq_range_array_iter_nth(&seq_iter, n++, &seq))
2a6af811ea3de3cf9e2f15e446674dd21b0705f3Timo Sirainen array_append(&ctx->qresync_sample_seqset, &seq, 1);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen if (!seq_range_array_iter_nth(&seq_iter, n++, &seq))
95a1a5195d56f3cf5d1e529aad668f87ad3b979bTimo Sirainen array_append(&ctx->qresync_sample_seqset, &seq, 1);
51795bfe9d05d92fe942cb451aec2b9d16d32a11Timo Sirainen if (seq_range_array_iter_nth(&seq_iter, n, &seq))
88b8aea03a24ef7a9efc30399080487b7eb03537Timo Sirainenselect_parse_qresync_known_set(struct imap_select_context *ctx,
8872e5c991430f96138a46e36b7f3c2c40d8e5c2Timo Sirainen const char *str;
d9fdacd5fb3e07997e5c389739d2054f0c8441d8Timo Sirainen imap_seq_set_nostar_parse(str, &seqset) < 0) {
d9fdacd5fb3e07997e5c389739d2054f0c8441d8Timo Sirainen "Invalid QRESYNC known-sequence-set");
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen imap_seq_set_nostar_parse(str, &uidset) < 0) {
029cfcdce65b284d5230adf1c920a5f526b03b5cTimo Sirainen "Invalid QRESYNC known-uid-set");
45e62043058738e294f89504c319d852e25943ccTimo Sirainen if (select_qresync_get_uids(ctx, &seqset, &uidset) < 0) {
2a6af811ea3de3cf9e2f15e446674dd21b0705f3Timo Sirainen client_send_command_error(ctx->cmd, "Invalid QRESYNC sets");
13c6532dc104d23061e6901783ceb1ff8872c206Timo Sirainen "Too many parameters to QRESYNC known set");
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenselect_parse_qresync(struct imap_select_context *ctx,
bdd7a96c363346f7c38f389791be1487ca08775bTimo Sirainen const char *str;
bdd7a96c363346f7c38f389791be1487ca08775bTimo Sirainen unsigned int count;
4bc96ba6f1d67a90a75fa131bcd2cd508ea5a05aTimo Sirainen client_send_command_error(ctx->cmd, "QRESYNC not enabled");
2a6af811ea3de3cf9e2f15e446674dd21b0705f3Timo Sirainen if (!imap_arg_get_list_full(args, &args, &count)) {
c0d1bfc45e224251cb549de8d8804861e8acb517Timo Sirainen "QRESYNC parameters missing");
ae8817f05005f57bba32479a610b52d083e2b6ebTimo Sirainen str_to_uint32(str, &ctx->qresync_uid_validity) < 0 ||
4bc96ba6f1d67a90a75fa131bcd2cd508ea5a05aTimo Sirainen str_to_uint64(str, &ctx->qresync_modseq) < 0) {
f537e7efaec891d6b3320ca94331d09ca8c4a4dbTimo Sirainen "Invalid QRESYNC parameters");
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen if (imap_seq_set_nostar_parse(str, &ctx->qresync_known_uids) < 0) {
902222fb0928d1701f20a384b73f327b1d9a15ddTimo Sirainen "Invalid QRESYNC known-uids");
ae8817f05005f57bba32479a610b52d083e2b6ebTimo Sirainen seq_range_array_add_range(&ctx->qresync_known_uids,
2f8da04d700cc23fcd6630226a4866e828b761bdTimo Sirainen if (!select_parse_qresync_known_set(ctx, list_args))
95a1a5195d56f3cf5d1e529aad668f87ad3b979bTimo Sirainen "Invalid QRESYNC parameters");
const char *name;
return FALSE;
args++;
return FALSE;
args++;
return FALSE;
return TRUE;
const char *resp_code;
if (ret < 0) {
int ret;
return FALSE;
if (ret < 0)
return TRUE;
int ret = 0;
if (readonly)
if (ret < 0 ||
return ret;
int ret;
return FALSE;
return FALSE;
return TRUE;
return TRUE;
if (ret == 0)
return FALSE;
return TRUE;