commit 30f1cbacdec202675f3b67c0012a07733e5420a0 from: Martijn van Duren date: Thu Aug 22 16:01:50 2019 UTC Turn fcrdns into an enum commit - 332b3141862058633cc02e659ba3df0eb5e3e25c commit + 30f1cbacdec202675f3b67c0012a07733e5420a0 blob - 5838abb8be9d0cd93177c84b49f0fc730a39ed67 blob + 8e734bf777879e641a62ac39fd5ae1279589423b --- opensmtpd.c +++ opensmtpd.c @@ -652,7 +652,7 @@ osmtpd_register_filter_commit(void (*cb)(struct osmtpd void osmtpd_register_report_connect(int incoming, void (*cb)(struct osmtpd_ctx *, - const char *, const char *, struct sockaddr_storage *, + const char *, enum osmtpd_status, struct sockaddr_storage *, struct sockaddr_storage *)) { osmtpd_register(OSMTPD_TYPE_FILTER, OSMTPD_PHASE_LINK_CONNECT, incoming, @@ -1067,7 +1067,7 @@ osmtpd_newline(struct io *io, int ev, void *arg) osmtpd_err(1, NULL); ctx->ctx.reqid = search.ctx.reqid; ctx->ctx.rdns = NULL; - ctx->ctx.fcrdns = NULL; + ctx->ctx.fcrdns = OSMTPD_STATUS_TEMPFAIL; ctx->ctx.identity = NULL; ctx->ctx.ciphers = NULL; ctx->ctx.msgid = 0; @@ -1178,9 +1178,10 @@ static void osmtpd_link_connect(struct osmtpd_callback *cb, struct osmtpd_ctx *ctx, char *params, char *linedup) { - char *end, *rdns, *fcrdns; + char *end, *rdns; + enum osmtpd_status fcrdns; struct sockaddr_storage src, dst; - void (*f)(struct osmtpd_ctx *, const char *, const char *, + void (*f)(struct osmtpd_ctx *, const char *, enum osmtpd_status, struct sockaddr_storage *, struct sockaddr_storage *); if ((end = strchr(params, '|')) == NULL) @@ -1193,7 +1194,15 @@ osmtpd_link_connect(struct osmtpd_callback *cb, struct osmtpd_errx(1, "Invalid line received: missing src: %s", linedup); end++[0] = '\0'; - fcrdns = params; + if (strcmp(params, "pass") == 0) + fcrdns = OSMTPD_STATUS_OK; + else if (strcmp(params, "fail") == 0) + fcrdns = OSMTPD_STATUS_PERMFAIL; + else if (strcmp(params, "error") == 0) + fcrdns = OSMTPD_STATUS_TEMPFAIL; + else + osmtpd_errx(1, "Invalid line received: invalid fcrdns: %s", + linedup); params = end; if ((end = strchr(params, '|')) == NULL) osmtpd_errx(1, "Invalid line received: missing dst: %s", @@ -1203,10 +1212,9 @@ osmtpd_link_connect(struct osmtpd_callback *cb, struct params = end; osmtpd_addrtoss(params, &dst, 1, linedup); if (cb->storereport) { - if ((ctx->rdns = strdup(params)) == NULL) - osmtpd_err(1, NULL); - if ((ctx->fcrdns = strdup(params)) == NULL) - osmtpd_err(1, NULL); + if ((ctx->rdns = strdup(rdns)) == NULL) + osmtpd_err(1, "strdup"); + ctx->fcrdns = fcrdns; memcpy(&(ctx->src), &src, sizeof(ctx->src)); memcpy(&(ctx->dst), &dst, sizeof(ctx->dst)); } @@ -1232,7 +1240,6 @@ osmtpd_link_disconnect(struct osmtpd_callback *cb, str if (ondeletecb_session != NULL) ondeletecb_session(ctx, session->ctx.local_session); free(session->ctx.rdns); - free(session->ctx.fcrdns); free(session->ctx.identity); free(session->ctx.ciphers); free(session->ctx.mailfrom); blob - 7733bb1633bbf1b09c266c69e45f8cf169013f63 blob + d64446d1c33281c97e789df8357fe71032adbf9a --- opensmtpd.h +++ opensmtpd.h @@ -82,7 +82,7 @@ struct osmtpd_ctx { struct sockaddr_storage src; struct sockaddr_storage dst; char *rdns; - char *fcrdns; + enum osmtpd_status fcrdns; char *identity; char *ciphers; uint32_t msgid; @@ -112,7 +112,7 @@ void osmtpd_register_filter_help(void (*)(struct osmtp void osmtpd_register_filter_wiz(void (*)(struct osmtpd_ctx *)); void osmtpd_register_filter_commit(void (*)(struct osmtpd_ctx *)); void osmtpd_register_report_connect(int, void (*)(struct osmtpd_ctx *, - const char *, const char *, struct sockaddr_storage *, + const char *, enum osmtpd_status, struct sockaddr_storage *, struct sockaddr_storage *)); void osmtpd_register_report_disconnect(int, void (*)(struct osmtpd_ctx *)); void osmtpd_register_report_identify(int, void (*)(struct osmtpd_ctx *, blob - fa067aa263e49955b1470cbd6195469f20e00ea0 blob + 089c86c392647191806288894f7d67cb10139b48 --- osmtpd_run.3 +++ osmtpd_run.3 @@ -126,7 +126,7 @@ .Ft void .Fo osmtpd_register_report_connect .Fa "int incoming" -.Fa "void (*cb)(struct osmtpd_ctx *ctx, const char *rdns, const char *fcrdns, struct sockaddr_storage *src, struct sockaddr_storage *dst)" +.Fa "void (*cb)(struct osmtpd_ctx *ctx, const char *rdns, enum osmtpd_status fcrdns, struct sockaddr_storage *src, struct sockaddr_storage *dst)" .Fc .Ft void .Fo osmtpd_register_report_disconnect @@ -391,14 +391,14 @@ needs to be initialized with .Dv OSMTPD_NEED_RDNS . If not available the attribute is set to .Dv NULL . -.It Vt char Va *fcrdns -The forward confirmed reverse DNS hostname of the connection. +.It Vt enum osmtpd_status Va fcrdns +Whether the reverse DNS hostname is forward confirmed. To use this attribute .Nm osmtpd_need needs to be initialized with .Dv OSMTPD_NEED_FCRDNS . If not available the attribute is set to -.Dv NULL . +.Dv OSMTPD_STATUS_TEMPFAIL . .It Vt char Va *identity The identity of the remote host as presented by the helo or ehlo smtp command. To use this attribute