commit d4e702eef498fca690ee776e1105bf39755d527f from: Martijn van Duren date: Thu Aug 22 11:17:17 2019 UTC Don't use warn/err, since we already print the filter name commit - 3b767c061f9b7b08c4f20fab1017f092d540a9c7 commit + d4e702eef498fca690ee776e1105bf39755d527f blob - 8d809bc2fa94f99a57aaf32ece6cdfab9a8d54da blob + eaf5f234e5b2ee845ec9403bb938fb6ce34aa440 --- main.c +++ main.c @@ -17,12 +17,12 @@ #include #include -#include #include #include #include #include #include +#include #include #include #include @@ -62,6 +62,8 @@ void dnsbl_resolve(struct asr_result *, void *); void dnsbl_session_query_done(struct dnsbl_session *); void *dnsbl_session_new(struct osmtpd_ctx *); void dnsbl_session_free(struct osmtpd_ctx *, void *); +void dnsbl_err(const char *, ...); +void dnsbl_errx(const char *, ...); int main(int argc, char *argv[]) @@ -83,13 +85,13 @@ main(int argc, char *argv[]) } if (pledge("stdio dns", NULL) == -1) - err(1, "pledge"); + dnsbl_err("pledge"); if ((nblacklists = argc - optind) == 0) - errx(1, "No blacklist specified"); + dnsbl_errx("No blacklist specified"); if ((blacklists = calloc(nblacklists, sizeof(*blacklists))) == NULL) - err(1, NULL); + dnsbl_err("malloc"); for (i = 0; i < nblacklists; i++) blacklists[i] = argv[optind + i]; @@ -123,7 +125,7 @@ dnsbl_connect(struct osmtpd_ctx *ctx, const char *host if (snprintf(query, sizeof(query), "%u.%u.%u.%u.%s", addr[3], addr[2], addr[1], addr[0], blacklists[i]) >= (int) sizeof(query)) - errx(1, "Can't create query, domain too long"); + dnsbl_errx("Can't create query, domain too long"); } else if (ss->ss_family == AF_INET6) { if (snprintf(query, sizeof(query), "%hhx.%hhx.%hhx.%hhx" ".%hhx.%hhx.%hhx.%hhx.%hhx.%hhx.%hhx.%hhx.%hhx.%hhx" @@ -146,9 +148,9 @@ dnsbl_connect(struct osmtpd_ctx *ctx, const char *host (u_char) (addr[1] & 0xf), (u_char) (addr[1] >> 4), (u_char) (addr[0] & 0xf), (u_char) (addr[0] >> 4), blacklists[i]) >= (int) sizeof(query)) - errx(1, "Can't create query, domain too long"); + dnsbl_errx("Can't create query, domain too long"); } else - errx(1, "Invalid address family received"); + dnsbl_errx("Invalid address family received"); aq = gethostbyname_async(query, NULL); session->query[i].event = event_asr_run(aq, dnsbl_resolve, @@ -171,7 +173,7 @@ dnsbl_resolve(struct asr_result *result, void *arg) if (!markspam) { osmtpd_filter_disconnect(session->ctx, "Listed at %s", blacklists[query->blacklist]); - warnx("%016"PRIx64" listed at %s: rejected", + fprintf(stderr, "%016"PRIx64" listed at %s: rejected\n", session->ctx->reqid, blacklists[query->blacklist]); } else { dnsbl_session_query_done(session); @@ -193,7 +195,8 @@ dnsbl_resolve(struct asr_result *result, void *arg) } osmtpd_filter_proceed(session->ctx); if (verbose) - warnx("%016"PRIx64" not listed", session->ctx->reqid); + fprintf(stderr, "%016"PRIx64" not listed\n", + session->ctx->reqid); } void @@ -203,8 +206,8 @@ dnsbl_begin(struct osmtpd_ctx *ctx, uint32_t msgid) if (session->listed != -1) { if (!session->logged_mark) { - warnx("%016"PRIx64" listed at %s: Marking as spam", - ctx->reqid, blacklists[session->listed]); + fprintf(stderr, "%016"PRIx64" listed at %s: Marking as " + "spam\n", ctx->reqid, blacklists[session->listed]); session->logged_mark = 1; } session->set_header = 1; @@ -245,10 +248,10 @@ dnsbl_session_new(struct osmtpd_ctx *ctx) struct dnsbl_session *session; if ((session = calloc(1, sizeof(*session))) == NULL) - err(1, NULL); + dnsbl_err("malloc"); if ((session->query = calloc(nblacklists, sizeof(*(session->query)))) == NULL) - err(1, NULL); + dnsbl_err("malloc"); session->listed = -1; session->set_header = 0; session->logged_mark = 0; @@ -267,6 +270,30 @@ dnsbl_session_free(struct osmtpd_ctx *ctx, void *data) free(session); } +void +dnsbl_err(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "%s\n", strerror(errno)); + va_end(ap); + exit(1); +} + +void +dnsbl_errx(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); + va_end(ap); + exit(1); +} + __dead void usage(void) {