]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: Fixed mailbox-guid search key to work with shared/public mailboxes.
authorTimo Sirainen <tss@iki.fi>
Thu, 30 Dec 2010 10:40:50 +0000 (12:40 +0200)
committerTimo Sirainen <tss@iki.fi>
Thu, 30 Dec 2010 10:40:50 +0000 (12:40 +0200)
src/doveadm/doveadm-mail-list-iter.c

index b58913bb3bc78a8549bce7d34f21536baacfe517..fd94291d377bdaa897fc37e9de60e9d0838e6125 100644 (file)
@@ -18,7 +18,8 @@ struct doveadm_mail_list_iter {
 
 static int
 search_args_get_mailbox_patterns(const struct mail_search_arg *args,
-                                ARRAY_TYPE(const_string) *patterns)
+                                ARRAY_TYPE(const_string) *patterns,
+                                bool *have_guid_r)
 {
        const struct mail_search_arg *subargs;
 
@@ -30,7 +31,7 @@ search_args_get_mailbox_patterns(const struct mail_search_arg *args,
                        subargs = args->value.subargs;
                        for (; subargs != NULL; subargs = subargs->next) {
                                if (!search_args_get_mailbox_patterns(subargs,
-                                                                     patterns))
+                                                       patterns, have_guid_r))
                                        return 0;
                        }
                        break;
@@ -42,6 +43,9 @@ search_args_get_mailbox_patterns(const struct mail_search_arg *args,
                        }
                        array_append(patterns, &args->value.str, 1);
                        break;
+               case SEARCH_MAILBOX_GUID:
+                       *have_guid_r = TRUE;
+                       break;
                default:
                        break;
                }
@@ -58,14 +62,18 @@ doveadm_mail_list_iter_init(struct mail_user *user,
        struct doveadm_mail_list_iter *iter;
        ARRAY_TYPE(const_string) patterns;
        enum namespace_type ns_mask = NAMESPACE_PRIVATE;
+       bool have_guid = FALSE;
 
        iter = i_new(struct doveadm_mail_list_iter, 1);
        iter->search_args = search_args;
 
        t_array_init(&patterns, 16);
-       search_args_get_mailbox_patterns(search_args->args, &patterns);
+       search_args_get_mailbox_patterns(search_args->args, &patterns,
+                                        &have_guid);
        if (array_count(&patterns) == 0) {
                iter_flags |= MAILBOX_LIST_ITER_SKIP_ALIASES;
+               if (have_guid)
+                       ns_mask |= NAMESPACE_SHARED | NAMESPACE_PUBLIC;
                array_append(&patterns, &all_pattern, 1);
        } else {
                iter_flags |= MAILBOX_LIST_ITER_STAR_WITHIN_NS;