commit - 13f4885fe52bcb1a246aab40deb68cab40a43054
commit + 000aebbc28be0da5daf72d06752fd090eb8c6248
blob - c951b1b8fb15770604629dfe852ab6e65144315a
blob + 265ff18659139017ffbe529bc5a264b0a249a2cd
--- Symbols.list
+++ Symbols.list
osmtpd_filter_proceed
osmtpd_filter_reject
osmtpd_filter_disconnect
+osmtpd_filter_reject_enh
+osmtpd_filter_disconnect_enh
osmtpd_filter_dataline
osmtpd_local_session
osmtpd_local_message
blob - 1b6969ad945fe2e4ae2ae31f29210327a5eb890f
blob + 30496cb0eaceccf2339b844eb52978d651974452
--- opensmtpd.c
+++ opensmtpd.c
}
void
+osmtpd_filter_reject_enh(struct osmtpd_ctx *ctx, int code, int class,
+ int subject, int detail, const char *reason, ...)
+{
+ va_list ap;
+
+ if (code < 200 || code > 599)
+ osmtpd_errx(1, "Invalid reject code");
+ if (class <= 2 || class >= 5)
+ osmtpd_errx(1, "Invalid enhanced status class");
+ if (subject < 0 || subject > 999)
+ 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"|reject|"
+ "%d %d.%d.%d ", ctx->token, ctx->reqid, code, class, subject,
+ detail);
+ va_start(ap, reason);
+ io_vprintf(io_stdout, reason, ap);
+ va_end(ap);
+ io_printf(io_stdout, "\n");
+}
+
+void
osmtpd_filter_disconnect(struct osmtpd_ctx *ctx, const char *reason, ...)
{
va_list ap;
}
void
+osmtpd_filter_disconnect_enh(struct osmtpd_ctx *ctx, int class, int subject,
+ int detail, const char *reason, ...)
+{
+ va_list ap;
+
+ if (class <= 2 || class >= 5)
+ osmtpd_errx(1, "Invalid enhanced status class");
+ if (subject < 0 || subject > 999)
+ 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);
+ va_start(ap, reason);
+ io_vprintf(io_stdout, reason, ap);
+ va_end(ap);
+ io_printf(io_stdout, "\n");
+}
+
+void
osmtpd_filter_rewrite(struct osmtpd_ctx *ctx, const char *value, ...)
{
va_list ap;
blob - d64446d1c33281c97e789df8357fe71032adbf9a
blob + a4cb221b9c7c93fe14f90027a2a6c9956e8b054b
--- opensmtpd.h
+++ opensmtpd.h
void osmtpd_filter_proceed(struct osmtpd_ctx *);
void osmtpd_filter_reject(struct osmtpd_ctx *, int, const char *, ...)
__attribute__((__format__ (printf, 3, 4)));
+void osmtpd_filter_reject_enh(struct osmtpd_ctx *, int, int, int, int,
+ const char *, ...)
+ __attribute__((__format__ (printf, 6, 7)));
void osmtpd_filter_disconnect(struct osmtpd_ctx *, const char *, ...)
__attribute__((__format__ (printf, 2, 3)));
+void osmtpd_filter_disconnect_enh(struct osmtpd_ctx *, int, int, int,
+ const char *, ...)
+ __attribute__((__format__ (printf, 5, 6)));
void osmtpd_filter_rewrite(struct osmtpd_ctx *, const char *, ...)
__attribute__((__format__ (printf, 2, 3)));
void osmtpd_filter_dataline(struct osmtpd_ctx *, const char *, ...)