Commit Diff


commit - 5620e673dab9c1f9c344b40d9957184471086577
commit + a7f2d00f4c7897b17b12dda2e761b4bbd28e5df3
blob - 8e41b296fa48e93c115ecf7ee2dc1e32d667e2e2
blob + 1abbcd5ca48239b567aac236475de662ca7eee10
--- Makefile
+++ Makefile
@@ -1,3 +1,5 @@
+LOCALBASE?= /usr/local/
+
 PROG=	filter-dnsbl
 MAN=	filter-dnsbl.8
 BINDIR=	${LOCALBASE}/libexec/smtpd/
blob - 76f95fcb6436297e78c50cd061b56bd3bd88f067
blob + 0ee1727d71073537dd3593a162231177e9bfbdbe
--- main.c
+++ main.c
@@ -35,7 +35,7 @@ struct dnsbl_session;
 
 struct dnsbl_query {
 	struct event_asr *event;
-	int resolved;
+	int running;
 	int blacklist;
 	struct dnsbl_session *session;
 };
@@ -157,6 +157,7 @@ dnsbl_connect(struct osmtpd_ctx *ctx, const char *host
 		    &(session->query[i]));
 		session->query[i].blacklist = i;
 		session->query[i].session = session;
+		session->query[i].running = 1;
 	}
 }
 
@@ -167,7 +168,7 @@ dnsbl_resolve(struct asr_result *result, void *arg)
 	struct dnsbl_session *session = query->session;
 	size_t i;
 
-	query->resolved = 1;
+	query->running = 0;
 	query->event = NULL;
 	if (result->ar_hostent != NULL) {
 		if (!markspam) {
@@ -176,21 +177,22 @@ dnsbl_resolve(struct asr_result *result, void *arg)
 			fprintf(stderr, "%016"PRIx64" listed at %s: rejected\n",
 			    session->ctx->reqid, blacklists[query->blacklist]);
 		} else {
-			dnsbl_session_query_done(session);
 			session->listed = query->blacklist;
 			osmtpd_filter_proceed(session->ctx);
 			/* Delay logging until we have a message */
 		}
+		dnsbl_session_query_done(session);
 		return;
 	}
 	if (result->ar_h_errno != HOST_NOT_FOUND) {
 		osmtpd_filter_disconnect(session->ctx, "DNS error on %s",
 		    blacklists[query->blacklist]);
+		dnsbl_session_query_done(session);
 		return;
 	}
 
 	for (i = 0; i < nblacklists; i++) {
-		if (!session->query[i].resolved)
+		if (session->query[i].running)
 			return;
 	}
 	osmtpd_filter_proceed(session->ctx);
@@ -235,9 +237,9 @@ dnsbl_session_query_done(struct dnsbl_session *session
 	size_t i;
 
 	for (i = 0; i < nblacklists; i++) {
-		if (!session->query[i].resolved) {
+		if (session->query[i].running) {
 			event_asr_abort(session->query[i].event);
-			session->query[i].resolved = 1;
+			session->query[i].running = 0;
 		}
 	}
 }