]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
dsync: Don't try to find mailboxes from unwanted namespaces.
authorTimo Sirainen <tss@iki.fi>
Mon, 24 Jun 2013 19:25:47 +0000 (22:25 +0300)
committerTimo Sirainen <tss@iki.fi>
Mon, 24 Jun 2013 19:25:47 +0000 (22:25 +0300)
src/doveadm/dsync/dsync-brain-mailbox-tree.c
src/doveadm/dsync/dsync-brain-mailbox.c
src/doveadm/dsync/dsync-brain.c
src/doveadm/dsync/dsync-brain.h

index a3fb159e8e60c1f1dbf27795b01f87363f6ac250..549549679bb185d5c1e9f46e9eadc87020d0ce94 100644 (file)
@@ -2,7 +2,6 @@
 
 #include "lib.h"
 #include "str.h"
-#include "settings-parser.h"
 #include "mail-namespace.h"
 #include "doveadm-settings.h"
 #include "dsync-ibc.h"
 
 #include <ctype.h>
 
-static bool dsync_brain_want_namespace(struct dsync_brain *brain,
-                                      struct mail_namespace *ns)
-{
-       if (brain->sync_ns != NULL)
-               return brain->sync_ns == ns;
-       if (ns->alias_for != NULL) {
-               /* always skip aliases */
-               return FALSE;
-       }
-       if (brain->sync_visible_namespaces) {
-               if ((ns->flags & NAMESPACE_FLAG_HIDDEN) == 0)
-                       return TRUE;
-               if ((ns->flags & (NAMESPACE_FLAG_LIST_PREFIX |
-                                 NAMESPACE_FLAG_LIST_CHILDREN)) != 0)
-                       return TRUE;
-               return FALSE;
-       } else {
-               return strcmp(ns->unexpanded_set->location,
-                             SETTING_STRVAR_UNEXPANDED) == 0;
-       }
-}
-
 static void dsync_brain_check_namespaces(struct dsync_brain *brain)
 {
        struct mail_namespace *ns, *first_ns = NULL;
index 76f0b63497cd6a3cc4a72514d9379390de2d7fe5..b63274fb4b16566ce31186c69af3695ded776171 100644 (file)
@@ -50,6 +50,8 @@ int dsync_brain_mailbox_alloc(struct dsync_brain *brain, const guid_128_t guid,
        }
 
        for (ns = brain->user->namespaces; ns != NULL; ns = ns->next) {
+               if (!dsync_brain_want_namespace(brain, ns))
+                       continue;
                if ((ret = ns_mailbox_try_alloc(ns, guid, box_r)) != 0) {
                        if (ret < 0)
                                brain->failed = TRUE;
index 6f65cfa5a2fdbbe33703317ae04630bb26a8b089..3be80760941443e0f57c23110ea95c5737eb06b5 100644 (file)
@@ -6,6 +6,7 @@
 #include "hostpid.h"
 #include "str.h"
 #include "process-title.h"
+#include "settings-parser.h"
 #include "master-service.h"
 #include "master-service-settings.h"
 #include "mail-namespace.h"
@@ -584,3 +585,25 @@ bool dsync_brain_has_unexpected_changes(struct dsync_brain *brain)
 {
        return brain->changes_during_sync;
 }
+
+bool dsync_brain_want_namespace(struct dsync_brain *brain,
+                               struct mail_namespace *ns)
+{
+       if (brain->sync_ns != NULL)
+               return brain->sync_ns == ns;
+       if (ns->alias_for != NULL) {
+               /* always skip aliases */
+               return FALSE;
+       }
+       if (brain->sync_visible_namespaces) {
+               if ((ns->flags & NAMESPACE_FLAG_HIDDEN) == 0)
+                       return TRUE;
+               if ((ns->flags & (NAMESPACE_FLAG_LIST_PREFIX |
+                                 NAMESPACE_FLAG_LIST_CHILDREN)) != 0)
+                       return TRUE;
+               return FALSE;
+       } else {
+               return strcmp(ns->unexpanded_set->location,
+                             SETTING_STRVAR_UNEXPANDED) == 0;
+       }
+}
index fe9650c14365e6ed3fb68cda300e0f18a4571385..d8b47871a9ab29f690eb647b0133cfd57ddf850c 100644 (file)
@@ -70,5 +70,8 @@ void dsync_brain_get_state(struct dsync_brain *brain, string_t *output);
 enum dsync_brain_sync_type dsync_brain_get_sync_type(struct dsync_brain *brain);
 /* Returns TRUE if there were any unexpected changes during the sync. */
 bool dsync_brain_has_unexpected_changes(struct dsync_brain *brain);
+/* Returns TRUE if we want to sync this namespace. */
+bool dsync_brain_want_namespace(struct dsync_brain *brain,
+                               struct mail_namespace *ns);
 
 #endif