]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
virtual: Match any metadata condition
authorAki Tuomi <aki.tuomi@dovecot.fi>
Thu, 18 May 2017 11:59:51 +0000 (14:59 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 18 Jul 2017 10:39:09 +0000 (13:39 +0300)
The old code ignored succesful earlier matches for
patterns, and stopped looking on first non-matching
metadata pattern. Now it breaks on error or on first
matching pattern.

src/plugins/virtual/virtual-config.c

index ed431cef9168af7d4ffa5338887bec0729e9e21b..4ca45baf058d48442d7fce753c73b766a51b3359 100644 (file)
@@ -375,7 +375,8 @@ virtual_config_metadata_match(const struct mailbox_info *info,
        box = mailbox_alloc(info->ns->list, info->vname, MAILBOX_FLAG_READONLY);
        mailbox_set_reason(box, "virtual mailbox metadata match");
        for (i = 0; i < count; i++) {
-               if ((ret = virtual_config_box_metadata_match(box, boxes[i], error_r)) <= 0)
+               /* break on error or match */
+               if ((ret = virtual_config_box_metadata_match(box, boxes[i], error_r)) < 0 || ret > 0)
                        break;
        }
        mailbox_free(&box);