From: Timo Sirainen Date: Thu, 10 Jun 2021 09:06:40 +0000 (+0300) Subject: doveadm sync/backup/dsync-server: Convert to v2 command X-Git-Tag: 2.3.17~298 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5676c510bfa9217df05e9b7cb000ae3554d66f22;p=thirdparty%2Fdovecot%2Fcore.git doveadm sync/backup/dsync-server: Convert to v2 command --- diff --git a/src/doveadm/doveadm-dsync.c b/src/doveadm/doveadm-dsync.c index 4b1fd9f61b..7f949ce9c1 100644 --- a/src/doveadm/doveadm-dsync.c +++ b/src/doveadm/doveadm-dsync.c @@ -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 ] [-r ] [-m ] [-g ] [-n | -N] [-x ] [-s ] [-t ] -d|" +#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 ] [-r ] [-m ] [-g ] [-n | -N] [-x ] [-s ] [-t ] -d|", + .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 ] [-r ] [-m ] [-g ] [-n | -N] [-x ] [-s ] [-t ] -d|" +struct doveadm_cmd_ver2 doveadm_cmd_dsync_backup = { + .mail_cmd = cmd_dsync_backup_alloc, + .name = "backup", + .usage = "[-fPRU] [-l ] [-r ] [-m ] [-g ] [-n | -N] [-x ] [-s ] [-t ] -d|", + .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 ] [-T ] [-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[]) diff --git a/src/doveadm/doveadm-dsync.h b/src/doveadm/doveadm-dsync.h index 9ebb3f266b..c4bf08bd16 100644 --- a/src/doveadm/doveadm-dsync.h +++ b/src/doveadm/doveadm-dsync.h @@ -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[]); diff --git a/src/doveadm/doveadm-mail.c b/src/doveadm/doveadm-mail.c index f67b2ac5e7..2c6f1ef6bc 100644 --- a/src/doveadm/doveadm-mail.c +++ b/src/doveadm/doveadm-mail.c @@ -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,