1 2#include <isc/util.h> 3#include <ns/types.h> 4#include <ns/client.h> 5 6#include <blocklist.h> 7 8#include <ns/pfilter.h> 9 10static struct blocklist *blstate; 11static int blenable; 12 13void 14pfilter_enable(void) { 15 blenable = 1; 16} 17 18#define TCP_CLIENT(c) (((c)->attributes & NS_CLIENTATTR_TCP) != 0) 19 20void 21pfilter_notify(isc_result_t res, ns_client_t *client, const char *msg) 22{ 23 int fd; 24 25 if (!blenable) 26 return; 27 28 if (blstate == NULL) 29 blstate = blocklist_open(); 30 31 if (blstate == NULL) 32 return; 33 34 if (!TCP_CLIENT(client) && !client->peeraddr_valid) 35 return; 36 37 if ((fd = isc_nmhandle_getfd(client->handle)) == -1) 38 return; 39 40 blocklist_sa_r(blstate, 41 res != ISC_R_SUCCESS, fd, 42 &client->peeraddr.type.sa, client->peeraddr.length, msg); 43} 44