From: Timo Sirainen Date: Wed, 9 Jun 2021 19:42:54 +0000 (+0300) Subject: doveadm zlibconnect: Convert to v2 command X-Git-Tag: 2.3.17~323 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=11439a8366fe8ef409ff206e24828eb6827a9eee;p=thirdparty%2Fdovecot%2Fcore.git doveadm zlibconnect: Convert to v2 command --- diff --git a/src/doveadm/doveadm-cmd.h b/src/doveadm/doveadm-cmd.h index eabd5e47c6..b2586e9ef0 100644 --- a/src/doveadm/doveadm-cmd.h +++ b/src/doveadm/doveadm-cmd.h @@ -95,7 +95,6 @@ extern struct doveadm_cmd doveadm_cmd_pw; extern struct doveadm_cmd doveadm_cmd_mailbox_mutf7; extern struct doveadm_cmd doveadm_cmd_sis_deduplicate; extern struct doveadm_cmd doveadm_cmd_sis_find; -extern struct doveadm_cmd doveadm_cmd_zlibconnect; void doveadm_register_cmd(const struct doveadm_cmd *cmd); @@ -161,5 +160,6 @@ extern struct doveadm_cmd_ver2 doveadm_cmd_oldstats_top_ver2; extern struct doveadm_cmd_ver2 doveadm_cmd_penalty_ver2; extern struct doveadm_cmd_ver2 doveadm_cmd_kick_ver2; extern struct doveadm_cmd_ver2 doveadm_cmd_who_ver2; +extern struct doveadm_cmd_ver2 doveadm_cmd_zlibconnect; #endif diff --git a/src/doveadm/doveadm-zlib.c b/src/doveadm/doveadm-zlib.c index 02d100af86..a730561169 100644 --- a/src/doveadm/doveadm-zlib.c +++ b/src/doveadm/doveadm-zlib.c @@ -220,26 +220,32 @@ static void server_input(struct client *client) i_stream_skip(client->input, size); } -static void cmd_zlibconnect(int argc ATTR_UNUSED, char *argv[]) +static void cmd_zlibconnect(struct doveadm_cmd_context *cctx) { struct client client; + const char *host; struct ip_addr *ips; unsigned int ips_count; + int64_t port_int64; in_port_t port = 143; int fd, ret; - if (argv[1] == NULL || - (argv[2] != NULL && net_str2port(argv[2], &port) < 0)) - help(&doveadm_cmd_zlibconnect); + if (!doveadm_cmd_param_str(cctx, "host", &host)) + help_ver2(&doveadm_cmd_zlibconnect); + if (doveadm_cmd_param_int64(cctx, "port", &port_int64)) { + if (port_int64 == 0 || port_int64 > 65535) + i_fatal("Invalid port: %"PRId64, port_int64); + port = (in_port_t)port_int64; + } - ret = net_gethostbyname(argv[1], &ips, &ips_count); + ret = net_gethostbyname(host, &ips, &ips_count); if (ret != 0) { - i_fatal("Host %s lookup failed: %s", argv[1], + i_fatal("Host %s lookup failed: %s", host, net_gethosterror(ret)); } if ((fd = net_connect_ip(&ips[0], port, NULL)) == -1) - i_fatal("connect(%s, %u) failed: %m", argv[1], port); + i_fatal("connect(%s, %u) failed: %m", host, port); i_info("Connected to %s port %u.", net_ip2addr(&ips[0]), port); @@ -267,7 +273,7 @@ static void cmd_dump_imapzlib(int argc ATTR_UNUSED, char *argv[] ATTR_UNUSED) i_fatal("Dovecot compiled without zlib support"); } -static void cmd_zlibconnect(int argc ATTR_UNUSED, char *argv[] ATTR_UNUSED) +static void cmd_zlibconnect(struct doveadm_cmd_context *cctx ATTR_UNUSED) { i_fatal("Dovecot compiled without zlib support"); } @@ -279,8 +285,12 @@ struct doveadm_cmd_dump doveadm_cmd_dump_zlib = { cmd_dump_imapzlib }; -struct doveadm_cmd doveadm_cmd_zlibconnect = { - cmd_zlibconnect, - "zlibconnect", - " []" +struct doveadm_cmd_ver2 doveadm_cmd_zlibconnect = { + .name = "zlibconnect", + .cmd = cmd_zlibconnect, + .usage = " []", +DOVEADM_CMD_PARAMS_START +DOVEADM_CMD_PARAM('\0', "host", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL) +DOVEADM_CMD_PARAM('\0', "port", CMD_PARAM_INT64, CMD_PARAM_FLAG_POSITIONAL) +DOVEADM_CMD_PARAMS_END }; diff --git a/src/doveadm/doveadm.c b/src/doveadm/doveadm.c index f0906ae56e..17f8b5b19c 100644 --- a/src/doveadm/doveadm.c +++ b/src/doveadm/doveadm.c @@ -249,11 +249,11 @@ static struct doveadm_cmd *doveadm_cmdline_commands[] = { &doveadm_cmd_exec, &doveadm_cmd_dump, &doveadm_cmd_pw, - &doveadm_cmd_zlibconnect }; static struct doveadm_cmd_ver2 *doveadm_cmdline_commands_ver2[] = { &doveadm_cmd_oldstats_top_ver2, + &doveadm_cmd_zlibconnect, }; int main(int argc, char *argv[])