aboutsummaryrefslogtreecommitdiff
path: root/src/util/dnsstub.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/dnsstub.c')
-rw-r--r--src/util/dnsstub.c42
1 files changed, 34 insertions, 8 deletions
diff --git a/src/util/dnsstub.c b/src/util/dnsstub.c
index 1ac274c92..c2f2a441f 100644
--- a/src/util/dnsstub.c
+++ b/src/util/dnsstub.c
@@ -324,24 +324,50 @@ do_dns_read (struct GNUNET_DNSSTUB_RequestSocket *rs,
324 found = GNUNET_NO; 324 found = GNUNET_NO;
325 for (struct DnsServer *ds = ctx->dns_head; NULL != ds; ds = ds->next) 325 for (struct DnsServer *ds = ctx->dns_head; NULL != ds; ds = ds->next)
326 { 326 {
327 if (0 == memcmp (&addr, 327 if (ds->ss.ss_family != addr.ss_family)
328 &ds->ss, 328 continue;
329 GNUNET_MIN (sizeof(struct sockaddr_storage), addrlen))) 329 if (addr.ss_family == AF_INET)
330 { 330 {
331 found = GNUNET_YES; 331 struct sockaddr_in *v4 = (struct sockaddr_in *) &addr;
332 break; 332 struct sockaddr_in *ds_v4 = (struct sockaddr_in *) &ds->ss;
333
334
335 if ((0 == memcmp (&v4->sin_addr,
336 &ds_v4->sin_addr,
337 sizeof(struct sockaddr_in))) &&
338 (v4->sin_port == ds_v4->sin_port))
339 {
340 found = GNUNET_YES;
341 break;
342 }
343 }
344 else
345 {
346 struct sockaddr_in6 *v6 = (struct sockaddr_in6 *) &addr;
347 struct sockaddr_in6 *ds_v6 = (struct sockaddr_in6 *) &ds->ss;
348
349 if (0 == memcmp (&v6->sin6_addr,
350 &ds_v6->sin6_addr,
351 sizeof (v6->sin6_addr)) &&
352 (v6->sin6_port == ds_v6->sin6_port))
353 {
354 found = GNUNET_YES;
355 break;
356 }
357
333 } 358 }
334 } 359 }
335 if (GNUNET_NO == found) 360 if (GNUNET_NO == found)
336 { 361 {
337 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 362 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
338 "Received DNS response from server we never asked (ignored)"); 363 "Received DNS response from server we never asked (ignored)\n");
364
339 return GNUNET_NO; 365 return GNUNET_NO;
340 } 366 }
341 if (sizeof(struct GNUNET_TUN_DnsHeader) > (size_t) r) 367 if (sizeof(struct GNUNET_TUN_DnsHeader) > (size_t) r)
342 { 368 {
343 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 369 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
344 _ ("Received DNS response that is too small (%u bytes)"), 370 _ ("Received DNS response that is too small (%u bytes)\n"),
345 (unsigned int) r); 371 (unsigned int) r);
346 return GNUNET_NO; 372 return GNUNET_NO;
347 } 373 }
@@ -648,7 +674,7 @@ GNUNET_DNSSTUB_add_dns_sa (struct GNUNET_DNSSTUB_Context *ctx,
648 ds = GNUNET_new (struct DnsServer); 674 ds = GNUNET_new (struct DnsServer);
649 switch (sa->sa_family) 675 switch (sa->sa_family)
650 { 676 {
651 case AF_INET: 677 case AF_INET :
652 GNUNET_memcpy (&ds->ss, sa, sizeof(struct sockaddr_in)); 678 GNUNET_memcpy (&ds->ss, sa, sizeof(struct sockaddr_in));
653 break; 679 break;
654 680