[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.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnunet] branch master updated: UTIL: Fix DNS resolution,
gnunet <=