summaryrefslogtreecommitdiffstats
path: root/runtime/dnscache.c
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2011-06-07 10:47:06 +0200
committerRainer Gerhards <rgerhards@adiscon.com>2011-06-07 10:47:06 +0200
commit363c16b9de007b2abb72edc08fc600a59e0fb1a1 (patch)
treea25e3a4cbf555e1d64d1fa0a97c841b065233c04 /runtime/dnscache.c
parentddad5b3299191142f500b25e01b827e40e873cd7 (diff)
downloadrsyslog-363c16b9de007b2abb72edc08fc600a59e0fb1a1.tar.gz
rsyslog-363c16b9de007b2abb72edc08fc600a59e0fb1a1.tar.bz2
rsyslog-363c16b9de007b2abb72edc08fc600a59e0fb1a1.zip
dnscache: bugfix, potentially grabagge data accessed
This was a bug of the new implementation, never released code.
Diffstat (limited to 'runtime/dnscache.c')
-rw-r--r--runtime/dnscache.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/runtime/dnscache.c b/runtime/dnscache.c
index 5bee47c4..6cea43dc 100644
--- a/runtime/dnscache.c
+++ b/runtime/dnscache.c
@@ -115,10 +115,11 @@ static inline dnscache_entry_t*
findEntry(struct sockaddr_storage *addr)
{
dnscache_entry_t *etry;
- for( etry = dnsCache.root
- ; etry != NULL && !memcmp(addr, &etry->addr, sizeof(struct sockaddr_storage))
- ; etry = etry->next)
- /* just search, no other processing necessary */;
+ for(etry = dnsCache.root ; etry != NULL ; etry = etry->next) {
+ if(SALEN((struct sockaddr*)addr) == SALEN((struct sockaddr*) &etry->addr)
+ && !memcmp(addr, &etry->addr, SALEN((struct sockaddr*) addr)))
+ break; /* in this case, we found our entry */
+ }
if(etry != NULL)
++etry->nUsed; /* this is *not* atomic, but we can live with an occasional loss! */
return etry;
@@ -287,6 +288,7 @@ addEntry(struct sockaddr_storage *addr, dnscache_entry_t **pEtry)
CHKmalloc(etry = MALLOC(sizeof(dnscache_entry_t)));
CHKmalloc(etry->pszHostFQDN = ustrdup(pszHostFQDN));
CHKmalloc(etry->ip = ustrdup(ip));
+ memcpy(&etry->addr, addr, SALEN((struct sockaddr*) addr));
etry->nUsed = 0;
*pEtry = etry;