commit 06220a702a876245348b8dad461557562521dda3 from: Martijn van Duren date: Fri Dec 06 11:04:46 2019 UTC Support upcoming protocol version 0.5. This is a major change, so make sure we also support 0.4 so we can support both old and new smtpd instances commit - c3692c5094223df1a029087aff69e5f038d9e7af commit + 06220a702a876245348b8dad461557562521dda3 blob - 4934110192a247a779b107555742fdd918d37f19 blob + 626f0f6e2b3ff5fcb3d1c3da7d91b822ddf62b3e --- opensmtpd.c +++ opensmtpd.c @@ -1642,8 +1642,12 @@ osmtpd_tx_rollback(struct osmtpd_callback *cb, struct void osmtpd_filter_proceed(struct osmtpd_ctx *ctx) { - io_printf(io_stdout, "filter-result|%016"PRIx64"|%016"PRIx64"|" - "proceed\n", ctx->token, ctx->reqid); + if (ctx->version_major == 0 && ctx->version_minor < 5) + io_printf(io_stdout, "filter-result|%016"PRIx64"|%016"PRIx64"|" + "proceed\n", ctx->token, ctx->reqid); + else + io_printf(io_stdout, "filter-result|%016"PRIx64"|%016"PRIx64"|" + "proceed\n", ctx->reqid, ctx->token); } void @@ -1654,8 +1658,12 @@ osmtpd_filter_reject(struct osmtpd_ctx *ctx, int code, if (code < 200 || code > 599) osmtpd_errx(1, "Invalid reject code"); - io_printf(io_stdout, "filter-result|%016"PRIx64"|%016"PRIx64"|reject|" - "%d ", ctx->token, ctx->reqid, code); + if (ctx->version_major == 0 && ctx->version_minor < 5) + io_printf(io_stdout, "filter-result|%016"PRIx64"|%016"PRIx64"|" + "reject|%d ", ctx->token, ctx->reqid, code); + else + io_printf(io_stdout, "filter-result|%016"PRIx64"|%016"PRIx64"|" + "reject|%d ", ctx->reqid, ctx->token, code); va_start(ap, reason); io_vprintf(io_stdout, reason, ap); va_end(ap); @@ -1677,9 +1685,14 @@ osmtpd_filter_reject_enh(struct osmtpd_ctx *ctx, int c if (detail < 0 || detail > 999) osmtpd_errx(1, "Invalid enhanced status detail"); - io_printf(io_stdout, "filter-result|%016"PRIx64"|%016"PRIx64"|reject|" - "%d %d.%d.%d ", ctx->token, ctx->reqid, code, class, subject, - detail); + if (ctx->version_major == 0 && ctx->version_minor < 5) + io_printf(io_stdout, "filter-result|%016"PRIx64"|%016"PRIx64"|" + "reject|%d %d.%d.%d ", ctx->token, ctx->reqid, code, class, + subject, detail); + else + io_printf(io_stdout, "filter-result|%016"PRIx64"|%016"PRIx64"|" + "reject|%d %d.%d.%d ", ctx->reqid, ctx->token, code, class, + subject, detail); va_start(ap, reason); io_vprintf(io_stdout, reason, ap); va_end(ap); @@ -1691,8 +1704,12 @@ osmtpd_filter_disconnect(struct osmtpd_ctx *ctx, const { va_list ap; - io_printf(io_stdout, "filter-result|%016"PRIx64"|%016"PRIx64"|" - "disconnect|421 ", ctx->token, ctx->reqid); + if (ctx->version_major == 0 && ctx->version_minor < 5) + io_printf(io_stdout, "filter-result|%016"PRIx64"|%016"PRIx64"|" + "disconnect|421 ", ctx->token, ctx->reqid); + else + io_printf(io_stdout, "filter-result|%016"PRIx64"|%016"PRIx64"|" + "disconnect|421 ", ctx->reqid, ctx->token); va_start(ap, reason); io_vprintf(io_stdout, reason, ap); va_end(ap); @@ -1711,9 +1728,14 @@ osmtpd_filter_disconnect_enh(struct osmtpd_ctx *ctx, i osmtpd_errx(1, "Invalid enhanced status subject"); if (detail < 0 || detail > 999) osmtpd_errx(1, "Invalid enhanced status detail"); - io_printf(io_stdout, "filter-result|%016"PRIx64"|%016"PRIx64"|" - "disconnect|421 %d.%d.%d ", ctx->token, ctx->reqid, class, subject, - detail); + if (ctx->version_major == 0 && ctx->version_minor < 5) + io_printf(io_stdout, "filter-result|%016"PRIx64"|%016"PRIx64"|" + "disconnect|421 %d.%d.%d ", ctx->token, ctx->reqid, class, + subject, detail); + else + io_printf(io_stdout, "filter-result|%016"PRIx64"|%016"PRIx64"|" + "disconnect|421 %d.%d.%d ", ctx->reqid, ctx->token, class, + subject, detail); va_start(ap, reason); io_vprintf(io_stdout, reason, ap); va_end(ap); @@ -1725,8 +1747,12 @@ osmtpd_filter_rewrite(struct osmtpd_ctx *ctx, const ch { va_list ap; - io_printf(io_stdout, "filter-result|%016"PRIx64"|%016"PRIx64"|" - "rewrite|", ctx->token, ctx->reqid); + if (ctx->version_major == 0 && ctx->version_minor < 5) + io_printf(io_stdout, "filter-result|%016"PRIx64"|%016"PRIx64"|" + "rewrite|", ctx->token, ctx->reqid); + else + io_printf(io_stdout, "filter-result|%016"PRIx64"|%016"PRIx64"|" + "rewrite|", ctx->reqid, ctx->token); va_start(ap, value); io_vprintf(io_stdout, value, ap); va_end(ap); @@ -1738,8 +1764,12 @@ osmtpd_filter_dataline(struct osmtpd_ctx *ctx, const c { va_list ap; - io_printf(io_stdout, "filter-dataline|%016"PRIx64"|%016"PRIx64"|", - ctx->token, ctx->reqid); + if (ctx->version_major == 0 && ctx->version_minor < 5) + io_printf(io_stdout, "filter-dataline|%016"PRIx64"|%016"PRIx64"|", + ctx->token, ctx->reqid); + else + io_printf(io_stdout, "filter-dataline|%016"PRIx64"|%016"PRIx64"|", + ctx->reqid, ctx->token); va_start(ap, line); io_vprintf(io_stdout, line, ap); va_end(ap);