commit - 3b767c061f9b7b08c4f20fab1017f092d540a9c7
commit + d4e702eef498fca690ee776e1105bf39755d527f
blob - 8d809bc2fa94f99a57aaf32ece6cdfab9a8d54da
blob + eaf5f234e5b2ee845ec9403bb938fb6ce34aa440
--- main.c
+++ main.c
#include <sys/socket.h>
#include <arpa/inet.h>
-#include <err.h>
#include <errno.h>
#include <event.h>
#include <inttypes.h>
#include <netdb.h>
#include <stdlib.h>
+#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#include <syslog.h>
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[])
}
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];
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"
(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,
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);
}
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
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;
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;
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)
{