]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
dsync: Send alt_char also to slave brain
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 26 Jan 2021 16:54:53 +0000 (18:54 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Wed, 3 Feb 2021 09:04:22 +0000 (09:04 +0000)
src/doveadm/doveadm-dsync.c
src/doveadm/dsync/dsync-brain.c
src/doveadm/dsync/dsync-brain.h
src/doveadm/dsync/dsync-ibc-stream.c
src/doveadm/dsync/dsync-ibc.h
src/doveadm/dsync/dsync-mailbox-tree.c

index dcdfe4d677814650c42e00af507fb070a4700370..9d6159e6f6052851b19eda71493293c1a192f802 100644 (file)
@@ -406,7 +406,8 @@ cmd_dsync_run_local(struct dsync_cmd_context *ctx, struct mail_user *user,
                return -1;
        }
 
-       brain2 = dsync_brain_slave_init(user2, ibc2, TRUE, "");
+       brain2 = dsync_brain_slave_init(user2, ibc2, TRUE, "",
+                                       doveadm_settings->dsync_alt_char[0]);
        mail_user_unref(&user2);
 
        brain1_running = brain2_running = TRUE;
@@ -1221,7 +1222,8 @@ cmd_dsync_server_run(struct doveadm_mail_cmd_context *_ctx,
        mail_user_set_get_temp_prefix(temp_prefix, user->set);
 
        ibc = cmd_dsync_ibc_stream_init(ctx, name, str_c(temp_prefix));
-       brain = dsync_brain_slave_init(user, ibc, FALSE, process_title_prefix);
+       brain = dsync_brain_slave_init(user, ibc, FALSE, process_title_prefix,
+                                      doveadm_settings->dsync_alt_char[0]);
 
        io_loop_run(current_ioloop);
 
index f4ff877651862b0d1df807145ffd3a8df45b7bdd..235e64aa573d65ab5bb0e7ce03edd6d534ac5a57 100644 (file)
@@ -265,6 +265,7 @@ dsync_brain_master_init(struct mail_user *user, struct dsync_ibc *ibc,
        ibc_set.sync_flags = set->sync_flag;
        memcpy(ibc_set.sync_box_guid, set->sync_box_guid,
               sizeof(ibc_set.sync_box_guid));
+       ibc_set.alt_char = brain->alt_char;
        ibc_set.sync_type = sync_type;
        ibc_set.hdr_hash_v2 = TRUE;
        ibc_set.lock_timeout = set->lock_timeout_secs;
@@ -289,12 +290,16 @@ dsync_brain_master_init(struct mail_user *user, struct dsync_ibc *ibc,
 
 struct dsync_brain *
 dsync_brain_slave_init(struct mail_user *user, struct dsync_ibc *ibc,
-                      bool local, const char *process_title_prefix)
+                      bool local, const char *process_title_prefix,
+                      char default_alt_char)
 {
        struct dsync_ibc_settings ibc_set;
        struct dsync_brain *brain;
 
+       i_assert(default_alt_char != '\0');
+
        brain = dsync_brain_common_init(user, ibc);
+       brain->alt_char = default_alt_char;
        brain->process_title_prefix =
                p_strdup(brain->pool, process_title_prefix);
        brain->state = DSYNC_STATE_SLAVE_RECV_HANDSHAKE;
@@ -548,6 +553,8 @@ static bool dsync_brain_slave_recv_handshake(struct dsync_brain *brain)
        brain->sync_flag = p_strdup(brain->pool, ibc_set->sync_flags);
        memcpy(brain->sync_box_guid, ibc_set->sync_box_guid,
               sizeof(brain->sync_box_guid));
+       if (ibc_set->alt_char != '\0')
+               brain->alt_char = ibc_set->alt_char;
        i_assert(brain->sync_type == DSYNC_BRAIN_SYNC_TYPE_UNKNOWN);
        brain->sync_type = ibc_set->sync_type;
 
index 5bfa9345338579a3df329f322afb8393bf3bb7b7..d2c16163c7f74e65087972af9624834cef4cd9ed 100644 (file)
@@ -95,7 +95,8 @@ dsync_brain_master_init(struct mail_user *user, struct dsync_ibc *ibc,
                        const struct dsync_brain_settings *set);
 struct dsync_brain *
 dsync_brain_slave_init(struct mail_user *user, struct dsync_ibc *ibc,
-                      bool local, const char *process_title_prefix);
+                      bool local, const char *process_title_prefix,
+                      char default_alt_char);
 /* Returns 0 if everything was successful, -1 if syncing failed in some way */
 int dsync_brain_deinit(struct dsync_brain **brain, enum mail_error *error_r);
 
index d8a18702ad2684e5d39b14b0906c37b2d7b7cb70..7f734c08fcf5f8abd6ad696e877d6e77d4794690 100644 (file)
@@ -79,7 +79,7 @@ static const struct {
                "no_mail_sync no_mailbox_renames no_backup_overwrite purge_remote "
                "no_notify sync_since_timestamp sync_max_size sync_flags sync_until_timestamp "
                "virtual_all_box empty_hdr_workaround import_commit_msgs_interval "
-               "hashed_headers"
+               "hashed_headers alt_char"
        },
        { .name = "mailbox_state",
          .chr = 'S',
@@ -726,6 +726,10 @@ dsync_ibc_stream_send_handshake(struct dsync_ibc *_ibc,
                dsync_serializer_encode_add(encoder, "sync_flags",
                                            set->sync_flags);
        }
+       if (set->alt_char != '\0') {
+               dsync_serializer_encode_add(encoder, "alt_char",
+                       t_strdup_printf("%c", set->alt_char));
+       }
        if ((set->brain_flags & DSYNC_BRAIN_FLAG_SEND_MAIL_REQUESTS) != 0)
                dsync_serializer_encode_add(encoder, "send_mail_requests", "");
        if ((set->brain_flags & DSYNC_BRAIN_FLAG_BACKUP_SEND) != 0)
@@ -868,6 +872,8 @@ dsync_ibc_stream_recv_handshake(struct dsync_ibc *_ibc,
        }
        if (dsync_deserializer_decode_try(decoder, "sync_flags", &value))
                set->sync_flags = p_strdup(pool, value);
+       if (dsync_deserializer_decode_try(decoder, "alt_char", &value))
+               set->alt_char = value[0];
        if (dsync_deserializer_decode_try(decoder, "send_mail_requests", &value))
                set->brain_flags |= DSYNC_BRAIN_FLAG_SEND_MAIL_REQUESTS;
        if (dsync_deserializer_decode_try(decoder, "backup_send", &value))
index 5c6fe6baf2c5610c745b8b7f1d65c92526a8ff68..5b07e2a3f1b12fd8b275944cc125ae3bd35f12ef 100644 (file)
@@ -67,6 +67,7 @@ struct dsync_ibc_settings {
        /* Hashed headers */
        const char *const *hashed_headers;
 
+       char alt_char;
        enum dsync_brain_sync_type sync_type;
        enum dsync_brain_flags brain_flags;
        bool hdr_hash_v2;
index 5d0b9a96713e3ca89296b5edb7ec2adcfea09235..e9ecaf477ec1873dbda74c9783e3f86f0da4e8a4 100644 (file)
@@ -22,6 +22,7 @@ struct dsync_mailbox_tree *dsync_mailbox_tree_init(char sep, char alt_char)
        pool_t pool;
 
        i_assert(sep != '\0');
+       i_assert(alt_char != '\0');
 
        pool = pool_alloconly_create(MEMPOOL_GROWING"dsync mailbox tree", 4096);
        tree = p_new(pool, struct dsync_mailbox_tree, 1);