1 This patch adds a forward lookup of any hostnames listed in the
2 "hosts allow" or "hosts deny" daemon config options. Based on
3 a patch by Paul Williamson.
5 To use this patch, run these commands for a successful build:
7 patch -p1 <patches/daemon-forward-lookup.diff
8 ./configure (optional if already run)
11 based-on: a01e3b490eb36ccf9e704840e1b6683dab867550
12 diff --git a/access.c b/access.c
15 @@ -210,6 +210,38 @@ static int match_address(const char *addr, const char *tok)
19 +static int match_hostlookup(const char *addr, const char *tok)
21 + struct hostent *hp = NULL;
22 + unsigned int i, len;
25 + if ((p = strchr(tok,'/')) != NULL)
30 + /* Fail quietly (hp left NULL) if tok is an address, not a hostname. */
32 + if (strcspn(tok, ":/") != len) {
36 + if (strspn(tok, ".0123456789") != len)
37 + hp = gethostbyname(tok);
42 + for (i = 0; hp->h_addr_list[i] != NULL; i++) {
43 + tok = inet_ntoa(*(struct in_addr*)(hp->h_addr_list[i]));
44 + if (match_address(addr, tok))
51 static int access_match(const char *list, const char *addr, const char *host)
54 @@ -221,7 +253,7 @@ static int access_match(const char *list, const char *addr, const char *host)
57 for (tok = strtok(list2, " ,\t"); tok; tok = strtok(NULL, " ,\t")) {
58 - if (match_hostname(host, tok) || match_address(addr, tok)) {
59 + if (match_hostname(host, tok) || match_address(addr, tok) || match_hostlookup(addr, tok)) {