gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnunet] branch master updated: UTIL: Fix DNS resolution


From: gnunet
Subject: [gnunet] branch master updated: UTIL: Fix DNS resolution
Date: Mon, 14 Feb 2022 15:15:09 +0100

This is an automated email from the git hooks/post-receive script.

martin-schanzenbach pushed a commit to branch master
in repository gnunet.

The following commit(s) were added to refs/heads/master by this push:
     new 6866469e6 UTIL: Fix DNS resolution
6866469e6 is described below

commit 6866469e6dd066cecef416afda3f119a958db1a8
Author: Martin Schanzenbach <schanzen@gnunet.org>
AuthorDate: Mon Feb 14 15:15:03 2022 +0100

    UTIL: Fix DNS resolution
---
 src/util/dnsstub.c | 45 +++++++++++++++++++++++++++++++++++++--------
 1 file changed, 37 insertions(+), 8 deletions(-)

diff --git a/src/util/dnsstub.c b/src/util/dnsstub.c
index 1ac274c92..dbdedec24 100644
--- a/src/util/dnsstub.c
+++ b/src/util/dnsstub.c
@@ -306,6 +306,7 @@ do_dns_read (struct GNUNET_DNSSTUB_RequestSocket *rs,
     int found;
     struct sockaddr_storage addr;
     socklen_t addrlen;
+    socklen_t expectedlen;
     struct GNUNET_TUN_DnsHeader *dns;
 
     addrlen = sizeof(addr);
@@ -324,24 +325,52 @@ do_dns_read (struct GNUNET_DNSSTUB_RequestSocket *rs,
     found = GNUNET_NO;
     for (struct DnsServer *ds = ctx->dns_head; NULL != ds; ds = ds->next)
     {
-      if (0 == memcmp (&addr,
-                       &ds->ss,
-                       GNUNET_MIN (sizeof(struct sockaddr_storage), addrlen)))
+      if (ds->ss.ss_family != addr.ss_family)
+        continue;
+      if (addr.ss_family == AF_INET)
       {
-        found = GNUNET_YES;
-        break;
+        struct sockaddr_in *v4 = (struct sockaddr_in *) &addr;
+        struct sockaddr_in *ds_v4 = (struct sockaddr_in *) &ds->ss;
+
+
+        expectedlen = sizeof(struct sockaddr_in);
+        if ((0 == memcmp (&v4->sin_addr,
+                         &ds_v4->sin_addr,
+                         expectedlen)) &&
+            (v4->sin_port == ds_v4->sin_port))
+        {
+          found = GNUNET_YES;
+          break;
+        }
+      }
+      else
+      {
+        expectedlen = sizeof(struct sockaddr_in6);
+        struct sockaddr_in6 *v6 = (struct sockaddr_in6 *) &addr;
+        struct sockaddr_in6 *ds_v6 = (struct sockaddr_in6 *) &ds->ss;
+
+        if (0 == memcmp (&v6->sin6_addr,
+                         &ds_v6->sin6_addr,
+                         expectedlen) &&
+            (v6->sin6_port == ds_v6->sin6_port))
+        {
+          found = GNUNET_YES;
+          break;
+        }
+
       }
     }
     if (GNUNET_NO == found)
     {
       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "Received DNS response from server we never asked 
(ignored)");
+                  "Received DNS response from server we never asked 
(ignored)\n");
+
       return GNUNET_NO;
     }
     if (sizeof(struct GNUNET_TUN_DnsHeader) > (size_t) r)
     {
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                  _ ("Received DNS response that is too small (%u bytes)"),
+                  _ ("Received DNS response that is too small (%u bytes)\n"),
                   (unsigned int) r);
       return GNUNET_NO;
     }
@@ -648,7 +677,7 @@ GNUNET_DNSSTUB_add_dns_sa (struct GNUNET_DNSSTUB_Context 
*ctx,
   ds = GNUNET_new (struct DnsServer);
   switch (sa->sa_family)
   {
-  case AF_INET:
+  case AF_INET :
     GNUNET_memcpy (&ds->ss, sa, sizeof(struct sockaddr_in));
     break;
 

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]