From: Timo Sirainen Date: Tue, 26 Jan 2021 16:54:53 +0000 (+0200) Subject: dsync: Send alt_char also to slave brain X-Git-Tag: 2.3.14.rc1~26 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=11b549e55287fdb5bf59fbf1a6ccc39a279b292e;p=thirdparty%2Fdovecot%2Fcore.git dsync: Send alt_char also to slave brain --- diff --git a/src/doveadm/doveadm-dsync.c b/src/doveadm/doveadm-dsync.c index dcdfe4d677..9d6159e6f6 100644 --- a/src/doveadm/doveadm-dsync.c +++ b/src/doveadm/doveadm-dsync.c @@ -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); diff --git a/src/doveadm/dsync/dsync-brain.c b/src/doveadm/dsync/dsync-brain.c index f4ff877651..235e64aa57 100644 --- a/src/doveadm/dsync/dsync-brain.c +++ b/src/doveadm/dsync/dsync-brain.c @@ -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; diff --git a/src/doveadm/dsync/dsync-brain.h b/src/doveadm/dsync/dsync-brain.h index 5bfa934533..d2c16163c7 100644 --- a/src/doveadm/dsync/dsync-brain.h +++ b/src/doveadm/dsync/dsync-brain.h @@ -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); diff --git a/src/doveadm/dsync/dsync-ibc-stream.c b/src/doveadm/dsync/dsync-ibc-stream.c index d8a18702ad..7f734c08fc 100644 --- a/src/doveadm/dsync/dsync-ibc-stream.c +++ b/src/doveadm/dsync/dsync-ibc-stream.c @@ -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)) diff --git a/src/doveadm/dsync/dsync-ibc.h b/src/doveadm/dsync/dsync-ibc.h index 5c6fe6baf2..5b07e2a3f1 100644 --- a/src/doveadm/dsync/dsync-ibc.h +++ b/src/doveadm/dsync/dsync-ibc.h @@ -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; diff --git a/src/doveadm/dsync/dsync-mailbox-tree.c b/src/doveadm/dsync/dsync-mailbox-tree.c index 5d0b9a9671..e9ecaf477e 100644 --- a/src/doveadm/dsync/dsync-mailbox-tree.c +++ b/src/doveadm/dsync/dsync-mailbox-tree.c @@ -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);