]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Bug #2938: Removal of DNS CNAME code broke acl dst lookups
authorHenrik Nordstrom <henrik@henriknordstrom.net>
Mon, 31 May 2010 20:30:51 +0000 (22:30 +0200)
committerHenrik Nordstrom <henrik@henriknordstrom.net>
Mon, 31 May 2010 20:30:51 +0000 (22:30 +0200)
lookup code failed to handle the case where handler == NULL properly, was only partially implemented

src/fqdncache.cc
src/ipcache.cc

index 573c7925ee77f7ef0fa6008edf9fe1fac88ef803..0f0ef39da129ef2352d0ad0e12f2315febad8799 100644 (file)
@@ -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)
index fc4a69f674a46839a9c914aaf457ef399b3ed5d5..682a390a2a5a08ef7601a40c86c21f26b7a90117 100644 (file)
@@ -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;
     }