]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm sync/backup/dsync-server: Convert to v2 command
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 10 Jun 2021 09:06:40 +0000 (12:06 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Wed, 21 Jul 2021 09:03:09 +0000 (09:03 +0000)
src/doveadm/doveadm-dsync.c
src/doveadm/doveadm-dsync.h
src/doveadm/doveadm-mail.c

index 4b1fd9f61b54e0677441503675741435914c0338..7f949ce9c1e01b694c9cd4ff60d631f6cf7c6cc9 100644 (file)
@@ -219,11 +219,16 @@ mirror_get_remote_cmd_line(const char *const *argv,
        if (legacy_dsync) {
                /* we're executing dsync */
                p = "server";
+       } else if (i > 0 && strcmp(argv[i-1], "dsync-server") == 0) {
+               /* Caller already specified dsync-server in parameters.
+                  This is a common misconfiguration, so just allow it. */
+               p = NULL;
        } else {
                /* we're executing doveadm */
                p = "dsync-server";
        }
-       array_push_back(&cmd_args, &p);
+       if (p != NULL)
+               array_push_back(&cmd_args, &p);
        array_append_zero(&cmd_args);
        *cmd_args_r = array_front(&cmd_args);
 }
@@ -1298,16 +1303,56 @@ static struct doveadm_mail_cmd_context *cmd_dsync_server_alloc(void)
        return &ctx->ctx;
 }
 
-struct doveadm_mail_cmd cmd_dsync_mirror = {
-       cmd_dsync_alloc, "sync",
-       "[-1fPRU] [-l <secs>] [-r <rawlog path>] [-m <mailbox>] [-g <mailbox_guid>] [-n <namespace> | -N] [-x <exclude>] [-s <state>] [-t <start date>] -d|<dest>"
+#define DSYNC_COMMON_PARAMS \
+DOVEADM_CMD_MAIL_COMMON \
+DOVEADM_CMD_PARAM('f', "full-sync", CMD_PARAM_BOOL, 0) \
+DOVEADM_CMD_PARAM('P', "purge-remote", CMD_PARAM_BOOL, 0) \
+DOVEADM_CMD_PARAM('R', "reverse-sync", CMD_PARAM_BOOL, 0) \
+DOVEADM_CMD_PARAM('U', "replicator-notify", CMD_PARAM_BOOL, 0) \
+DOVEADM_CMD_PARAM('l', "lock-timeout", CMD_PARAM_INT64, 0) \
+DOVEADM_CMD_PARAM('r', "rawlog", CMD_PARAM_STR, 0) \
+DOVEADM_CMD_PARAM('m', "mailbox", CMD_PARAM_STR, 0) \
+DOVEADM_CMD_PARAM('g', "mailbox-guid", CMD_PARAM_STR, 0) \
+DOVEADM_CMD_PARAM('n', "namespace", CMD_PARAM_ARRAY, 0) \
+DOVEADM_CMD_PARAM('N', "all-namespaces", CMD_PARAM_BOOL, 0) \
+DOVEADM_CMD_PARAM('x', "exclude-mailbox", CMD_PARAM_ARRAY, 0) \
+DOVEADM_CMD_PARAM('s', "state", CMD_PARAM_STR, 0) \
+DOVEADM_CMD_PARAM('t', "sync-since-time", CMD_PARAM_STR, 0) \
+DOVEADM_CMD_PARAM('d', "default-destination", CMD_PARAM_BOOL, 0) \
+DOVEADM_CMD_PARAM('\0', "destination", CMD_PARAM_ARRAY, CMD_PARAM_FLAG_POSITIONAL)
+
+struct doveadm_cmd_ver2 doveadm_cmd_dsync_mirror = {
+       .mail_cmd = cmd_dsync_alloc,
+       .name = "sync",
+       .usage = "[-1fPRU] [-l <secs>] [-r <rawlog path>] [-m <mailbox>] [-g <mailbox_guid>] [-n <namespace> | -N] [-x <exclude>] [-s <state>] [-t <start date>] -d|<dest>",
+       .flags = CMD_FLAG_NO_UNORDERED_OPTIONS,
+DOVEADM_CMD_PARAMS_START
+DSYNC_COMMON_PARAMS
+DOVEADM_CMD_PARAM('1', "oneway-sync", CMD_PARAM_BOOL, 0)
+DOVEADM_CMD_PARAMS_END
 };
-struct doveadm_mail_cmd cmd_dsync_backup = {
-       cmd_dsync_backup_alloc, "backup",
-       "[-fPRU] [-l <secs>] [-r <rawlog path>] [-m <mailbox>] [-g <mailbox_guid>] [-n <namespace> | -N] [-x <exclude>] [-s <state>] [-t <start date>] -d|<dest>"
+struct doveadm_cmd_ver2 doveadm_cmd_dsync_backup = {
+       .mail_cmd = cmd_dsync_backup_alloc,
+       .name = "backup",
+       .usage = "[-fPRU] [-l <secs>] [-r <rawlog path>] [-m <mailbox>] [-g <mailbox_guid>] [-n <namespace> | -N] [-x <exclude>] [-s <state>] [-t <start date>] -d|<dest>",
+       .flags = CMD_FLAG_NO_UNORDERED_OPTIONS,
+DOVEADM_CMD_PARAMS_START
+DSYNC_COMMON_PARAMS
+DOVEADM_CMD_PARAMS_END
 };
-struct doveadm_mail_cmd cmd_dsync_server = {
-       cmd_dsync_server_alloc, "dsync-server", &doveadm_mail_cmd_hide
+struct doveadm_cmd_ver2 doveadm_cmd_dsync_server = {
+       .mail_cmd = cmd_dsync_server_alloc,
+       .name = "dsync-server",
+       .usage = "[-E] [-r <rawlog path>] [-T <timeout secs>] [-U]",
+DOVEADM_CMD_PARAMS_START
+DOVEADM_CMD_MAIL_COMMON
+DOVEADM_CMD_PARAM('E', "legacy-dsync", CMD_PARAM_BOOL, 0)
+DOVEADM_CMD_PARAM('r', "rawlog", CMD_PARAM_STR, 0)
+DOVEADM_CMD_PARAM('T', "timeout", CMD_PARAM_INT64, 0)
+DOVEADM_CMD_PARAM('U', "replicator-notify", CMD_PARAM_BOOL, 0)
+/* previously dsync-server could have been added twice to the parameters */
+DOVEADM_CMD_PARAM('\0', "ignore-arg", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAMS_END
 };
 
 void doveadm_dsync_main(int *_argc, char **_argv[])
index 9ebb3f266b0ea2ec2524b3b13b6364ce4ca49941..c4bf08bd168bfb179449c181ead54b28fea20bfc 100644 (file)
@@ -1,9 +1,9 @@
 #ifndef DOVEADM_DSYNC_H
 #define DOVEADM_DSYNC_H
 
-extern struct doveadm_mail_cmd cmd_dsync_mirror;
-extern struct doveadm_mail_cmd cmd_dsync_backup;
-extern struct doveadm_mail_cmd cmd_dsync_server;
+extern struct doveadm_cmd_ver2 doveadm_cmd_dsync_mirror;
+extern struct doveadm_cmd_ver2 doveadm_cmd_dsync_backup;
+extern struct doveadm_cmd_ver2 doveadm_cmd_dsync_server;
 
 void doveadm_dsync_main(int *_argc, char **_argv[]);
 
index f67b2ac5e76c2147376236a060ae3dee72394ba4..2c6f1ef6bc329e3a00414f3747e37c42ecc36672 100644 (file)
@@ -913,15 +913,14 @@ DOVEADM_CMD_MAIL_COMMON
 DOVEADM_CMD_PARAMS_END
 };
 
-
 static struct doveadm_mail_cmd *mail_commands[] = {
-       &cmd_dsync_backup,
-       &cmd_dsync_mirror,
-       &cmd_dsync_server
 };
 
 static struct doveadm_cmd_ver2 *mail_commands_ver2[] = {
        &doveadm_cmd_batch,
+       &doveadm_cmd_dsync_backup,
+       &doveadm_cmd_dsync_mirror,
+       &doveadm_cmd_dsync_server,
        &doveadm_cmd_mailbox_metadata_set_ver2,
        &doveadm_cmd_mailbox_metadata_unset_ver2,
        &doveadm_cmd_mailbox_metadata_get_ver2,