virtual-config.c revision 7e209b78ca757294dbbc15604c88673b3a6b0c39
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen/* Copyright (c) 2008 Dovecot authors, see the included COPYING file */
9865d9e7c5713e41db939222ed9c0225a11fb99eTimo Sirainenvirtual_search_args_parse(const string_t *rule, const char **error_r)
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen input = i_stream_create_from_data(str_data(rule), str_len(rule));
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen parser = imap_parser_create(input, NULL, (size_t)-1);
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen ret = imap_parser_finish_line(parser, 0, 0, &args);
dd4f30895ebbddd77e000472fbadcb3128ae2883Timo Sirainen *error_r = t_strdup(imap_parser_get_error(parser, &fatal));
dd4f30895ebbddd77e000472fbadcb3128ae2883Timo Sirainen } else if (mail_search_build_from_imap_args(args, "UTF-8", &sargs,
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainenvirtual_config_add_rule(struct virtual_parse_context *ctx, const char **error_r)
b9f564d00b7a115f465ffd6840341c7b8f9bfc8aTimo Sirainen unsigned int i, count;
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen if (ctx->rule_idx == array_count(&ctx->mbox->backend_boxes)) {
b9f564d00b7a115f465ffd6840341c7b8f9bfc8aTimo Sirainen crc32_str_more(ctx->mbox->search_args_crc32, str_c(ctx->rule));
b9f564d00b7a115f465ffd6840341c7b8f9bfc8aTimo Sirainen search_args = virtual_search_args_parse(ctx->rule, error_r);
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen *error_r = t_strconcat("Previous search rule is invalid: ",
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen /* update at all the mailboxes that were introduced since the previous
48d8312488089dc1a8360991f0881d91095c21eaTimo Sirainen bboxes = array_get(&ctx->mbox->backend_boxes, &count);
const char **error_r)
unsigned int i, count;
for (i = 0; i < count;) {
&count);
const char *name)
const char **patterns;
unsigned int i, count;
for (i = 0; i < count; i++)
for (i = 0; i < count; i++) {
for (i = 0; i < count; i++)
unsigned int linenum = 0;
linenum++;
if (ret < 0) {
if (ret == 0)
return ret;
unsigned int i, count;
for (i = 0; i < count; i++) {