[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r17775 - gnunet/src/vpn
From: |
gnunet |
Subject: |
[GNUnet-SVN] r17775 - gnunet/src/vpn |
Date: |
Wed, 26 Oct 2011 12:29:09 +0200 |
Author: toelke
Date: 2011-10-26 12:29:09 +0200 (Wed, 26 Oct 2011)
New Revision: 17775
Modified:
gnunet/src/vpn/gnunet-service-dns.c
Log:
handle !A and !AAAA better
Modified: gnunet/src/vpn/gnunet-service-dns.c
===================================================================
--- gnunet/src/vpn/gnunet-service-dns.c 2011-10-26 10:05:09 UTC (rev 17774)
+++ gnunet/src/vpn/gnunet-service-dns.c 2011-10-26 10:29:09 UTC (rev 17775)
@@ -481,11 +481,26 @@
return GNUNET_OK;
}
- answer->pkt.addrsize = ntohs (pdns->answers[0]->data_len);
+ int i = 0;
+
+ while (i < ntohs(pdns->s.ancount) &&
+ (pdns->answers[i]->type != 28 ||
+ pdns->answers[i]->type != 1))
+ i++;
+
+ if (i >= ntohs (pdns->s.ancount))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Answer does not contain any usable
answers.\n");
+ free_parsed_dns_packet (pdns);
+ GNUNET_free (answer);
+ return GNUNET_OK;
+ }
+
+ answer->pkt.addrsize = ntohs (pdns->answers[i]->data_len);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "The first answer has the addrlen %d\n",
answer->pkt.addrsize);
- memcpy (answer->pkt.addr, pdns->answers[0]->data,
- ntohs (pdns->answers[0]->data_len));
+ memcpy (answer->pkt.addr, pdns->answers[i]->data,
+ ntohs (pdns->answers[i]->data_len));
memcpy(answer->pkt.from, query_states[dns->s.id].remote_ip,
query_states[dns->s.id].addrlen);
memcpy(answer->pkt.to, query_states[dns->s.id].local_ip,
query_states[dns->s.id].addrlen);
@@ -521,13 +536,18 @@
drec_data->type = htons (28); /* AAAA */
drec_data->data_len = htons (16);
}
- else
+ else if (4 == answer->pkt.addrsize)
{
answer->pkt.subtype = GNUNET_DNS_ANSWER_TYPE_REMOTE_A;
dque->type = htons (1); /* A */
drec_data->type = htons (1); /* A */
drec_data->data_len = htons (4);
}
+ else
+ {
+ GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "dns-answer with data_len = %d\n",
answer->pkt.addrsize);
+ GNUNET_break(0);
+ }
dque->class = htons (1); /* IN */
char *anname =
@@ -536,7 +556,7 @@
memcpy (anname, "\xc0\x0c", 2);
drec_data->class = htons (1); /* IN */
- drec_data->ttl = pdns->answers[0]->ttl;
+ drec_data->ttl = pdns->answers[i]->ttl;
/* Calculate at which offset in the packet the IPv6-Address belongs, it is
* filled in by the daemon-vpn */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r17775 - gnunet/src/vpn,
gnunet <=