Can remove the sender and/or the recipient from the key of the greylister.
[apps/pfixtools.git] / common / rbl.c
index f0b5d55..c118f15 100644 (file)
@@ -36,7 +36,6 @@
 #include <unbound.h>
 #include <netdb.h>
 #include "array.h"
-#include "epoll.h"
 #include "server.h"
 #include "rbl.h"
 
@@ -49,6 +48,7 @@ typedef struct rbl_context_t {
 ARRAY(rbl_context_t);
 
 static struct ub_ctx *ctx = NULL;
+static client_t *async_event = NULL;
 static PA(rbl_context_t) ctx_pool = ARRAY_INIT;
 
 static rbl_context_t *rbl_context_new(void)
@@ -89,6 +89,10 @@ static void rbl_exit(void)
         ub_ctx_delete(ctx);
         ctx = NULL;
     }
+    if (async_event != NULL) {
+        client_release(async_event);
+        async_event = NULL;
+    }
     array_deep_wipe(ctx_pool, rbl_context_delete);
 }
 module_exit(rbl_exit);
@@ -116,15 +120,15 @@ static void rbl_callback(void *arg, int err, struct ub_result *result)
     rbl_context_release(context);
 }
 
-static int rbl_handler(server_t *event, void *config)
+static int rbl_handler(client_t *event, void *config)
 {
     int retval = 0;
     debug("rbl_handler called: ub_fd triggered");
-    epoll_modify(event->fd, 0, event);
+    client_io_none(event);
     if ((retval = ub_process(ctx)) != 0) {
         err("error in DNS resolution: %s", ub_strerror(retval));
     }
-    epoll_modify(event->fd, EPOLLIN, event);
+    client_io_ro(event);
     return 0;
 }
 
@@ -134,7 +138,7 @@ static inline bool rbl_dns_check(const char *hostname, rbl_result_t *result,
     if (ctx == NULL) {
         ctx = ub_ctx_create();
         ub_ctx_async(ctx, true);
-        if (server_register(ub_fd(ctx), rbl_handler, NULL) == NULL) {
+        if ((async_event = client_register(ub_fd(ctx), rbl_handler, NULL)) == NULL) {
             crit("cannot register asynchronous DNS event handler");
             abort();
         }
@@ -143,6 +147,7 @@ static inline bool rbl_dns_check(const char *hostname, rbl_result_t *result,
     context->result = result;
     context->call   = callback;
     context->data   = data;
+    debug("running dns resolution on %s", hostname);
     if (ub_resolve_async(ctx, (char*)hostname, 1, 1, context, rbl_callback, NULL) == 0) {
         *result = RBL_ASYNC;
         return true;