]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
virtual: Fixed error handling when matching mailboxes by metadata.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Wed, 29 Jun 2016 15:49:57 +0000 (18:49 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Wed, 29 Jun 2016 16:14:28 +0000 (19:14 +0300)
src/plugins/virtual/virtual-config.c

index 6fe588e8f4decd608a5d128dc49123980715aa4e..270c188112022de7517792a0a6ed7b87d3a08061 100644 (file)
@@ -348,13 +348,11 @@ static int virtual_config_box_metadata_match(struct mailbox *box,
 
        imtrans = imap_metadata_transaction_begin(box);
        ret = imap_metadata_get(imtrans, bbox->metadata_entry, &value);
-       if (ret < 0) {
+       if (ret < 0)
                *error_r = t_strdup(imap_metadata_transaction_get_last_error(imtrans, NULL));
-               return -1;
-       }
        if (ret > 0)
                ret = wildcard_match(value.value, bbox->metadata_value) ? 1 : 0;
-       if (bbox->negative_match)
+       if (ret >= 0 && bbox->negative_match)
                ret = ret > 0 ? 0 : 1;
        (void)imap_metadata_transaction_commit(&imtrans, NULL, NULL);
        return ret;
@@ -445,7 +443,7 @@ static int virtual_config_expand_wildcards(struct virtual_parse_context *ctx,
                *error_r = mailbox_list_get_last_error(user->namespaces->list, NULL);
                return -1;
        }
-       return 0;
+       return ret < 0 ? -1 : 0;
 }
 
 static void virtual_config_search_args_dup(struct virtual_mailbox *mbox)