From: Henrik Nordstrom Date: Mon, 31 May 2010 20:30:51 +0000 (+0200) Subject: Bug #2938: Removal of DNS CNAME code broke acl dst lookups X-Git-Tag: SQUID_3_2_0_1~169 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d6990df97f5ccca0ca6c3d67cebb973afdbcec40;p=thirdparty%2Fsquid.git Bug #2938: Removal of DNS CNAME code broke acl dst lookups lookup code failed to handle the case where handler == NULL properly, was only partially implemented --- diff --git a/src/fqdncache.cc b/src/fqdncache.cc index 573c7925ee..0f0ef39da1 100644 --- a/src/fqdncache.cc +++ b/src/fqdncache.cc @@ -137,7 +137,6 @@ static void fqdncacheRelease(fqdncache_entry *); static fqdncache_entry *fqdncacheCreateEntry(const char *name); static void fqdncacheCallback(fqdncache_entry *, int wait); static fqdncache_entry *fqdncache_get(const char *); -static FQDNH dummy_handler; static int fqdncacheExpiredEntry(const fqdncache_entry *); static void fqdncacheLockEntry(fqdncache_entry * f); static void fqdncacheUnlockEntry(fqdncache_entry * f); @@ -529,7 +528,6 @@ fqdncache_nbgethostbyaddr(const Ip::Address &addr, FQDNH * handler, void *handle fqdncache_entry *f = NULL; char name[MAX_IPSTRLEN]; generic_cbdata *c; - assert(handler); addr.NtoA(name,MAX_IPSTRLEN); debugs(35, 4, "fqdncache_nbgethostbyaddr: Name '" << name << "'."); FqdncacheStats.requests++; @@ -537,7 +535,8 @@ fqdncache_nbgethostbyaddr(const Ip::Address &addr, FQDNH * handler, void *handle if (name[0] == '\0') { debugs(35, 4, "fqdncache_nbgethostbyaddr: Invalid name!"); const DnsLookupDetails details("Invalid hostname", -1); // error, no lookup - handler(NULL, details, handlerData); + if (handler) + handler(NULL, details, handlerData); return; } @@ -676,7 +675,7 @@ fqdncache_gethostbyaddr(const Ip::Address &addr, int flags) FqdncacheStats.misses++; if (flags & FQDN_LOOKUP_IF_MISS) { - fqdncache_nbgethostbyaddr(addr, dummy_handler, NULL); + fqdncache_nbgethostbyaddr(addr, NULL, NULL); } return NULL; @@ -738,13 +737,6 @@ fqdnStats(StoreEntry * sentry) } } -/// \ingroup FQDNCacheInternal -static void -dummy_handler(const char *, const DnsLookupDetails &, void *) -{ - return; -} - /// \ingroup FQDNCacheAPI const char * fqdnFromAddr(const Ip::Address &addr) diff --git a/src/ipcache.cc b/src/ipcache.cc index fc4a69f674..682a390a2a 100644 --- a/src/ipcache.cc +++ b/src/ipcache.cc @@ -631,7 +631,6 @@ ipcache_nbgethostbyname(const char *name, IPH * handler, void *handlerData) ipcache_entry *i = NULL; const ipcache_addrs *addrs = NULL; generic_cbdata *c; - assert(handler != NULL); debugs(14, 4, "ipcache_nbgethostbyname: Name '" << name << "'."); IpcacheStats.requests++; @@ -639,7 +638,8 @@ ipcache_nbgethostbyname(const char *name, IPH * handler, void *handlerData) debugs(14, 4, "ipcache_nbgethostbyname: Invalid name!"); IpcacheStats.invalid++; const DnsLookupDetails details("Invalid hostname", -1); // error, no lookup - handler(NULL, details, handlerData); + if (handler) + handler(NULL, details, handlerData); return; } @@ -647,7 +647,8 @@ ipcache_nbgethostbyname(const char *name, IPH * handler, void *handlerData) debugs(14, 4, "ipcache_nbgethostbyname: BYPASS for '" << name << "' (already numeric)"); IpcacheStats.numeric_hits++; const DnsLookupDetails details(NULL, -1); // no error, no lookup - handler(addrs, details, handlerData); + if (handler) + handler(addrs, details, handlerData); return; }