aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPhilipp Tölke <toelke@in.tum.de>2010-10-07 05:41:51 +0000
committerPhilipp Tölke <toelke@in.tum.de>2010-10-07 05:41:51 +0000
commite96b0929c5f814b5d630d5dd12683d62ec02daec (patch)
tree7ca4c9d1a51d7feba58fb262e1e835656e47685c /src
parent5452bed087d821e8f0c3ec5dda6348cbe343e9e4 (diff)
downloadgnunet-e96b0929c5f814b5d630d5dd12683d62ec02daec.tar.gz
gnunet-e96b0929c5f814b5d630d5dd12683d62ec02daec.zip
Detect and log queries for .gnunet.-Domains
Diffstat (limited to 'src')
-rw-r--r--src/vpn/gnunet-service-dns.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/vpn/gnunet-service-dns.c b/src/vpn/gnunet-service-dns.c
index 229741252..1545d6cb2 100644
--- a/src/vpn/gnunet-service-dns.c
+++ b/src/vpn/gnunet-service-dns.c
@@ -32,6 +32,7 @@
32#include "gnunet-vpn-packet.h" 32#include "gnunet-vpn-packet.h"
33#include "gnunet-vpn-pretty-print.h" 33#include "gnunet-vpn-pretty-print.h"
34#include "gnunet_container_lib.h" 34#include "gnunet_container_lib.h"
35#include "gnunet-dns-parser.h"
35 36
36struct dns_cls { 37struct dns_cls {
37 struct GNUNET_SCHEDULER_Handle *sched; 38 struct GNUNET_SCHEDULER_Handle *sched;
@@ -69,10 +70,21 @@ void unhijack(unsigned short port) {
69 GNUNET_OS_start_process(NULL, NULL, "gnunet-helper-hijack-dns", "gnunet-hijack-dns", "-d", port_s, NULL); 70 GNUNET_OS_start_process(NULL, NULL, "gnunet-helper-hijack-dns", "gnunet-hijack-dns", "-d", port_s, NULL);
70} 71}
71 72
73/**
74 * This receives the dns-payload from the daemon-vpn and sends it on over the udp-socket
75 */
72void receive_query(void *cls, struct GNUNET_SERVER_Client *client, const struct GNUNET_MessageHeader *message) 76void receive_query(void *cls, struct GNUNET_SERVER_Client *client, const struct GNUNET_MessageHeader *message)
73{ 77{
74 struct query_packet* pkt = (struct query_packet*)message; 78 struct query_packet* pkt = (struct query_packet*)message;
75 struct dns_pkt* dns = (struct dns_pkt*)pkt->data; 79 struct dns_pkt* dns = (struct dns_pkt*)pkt->data;
80 struct dns_pkt_parsed* pdns = parse_dns_packet(dns);
81
82 if (pdns->queries[0]->namelen > 9 &&
83 0 == strncmp(pdns->queries[0]->name+(pdns->queries[0]->namelen - 9), ".gnunet.", 9)) {
84 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Query for .gnunet!\n");
85 }
86
87 GNUNET_free(pdns);
76 88
77 struct sockaddr_in dest; 89 struct sockaddr_in dest;
78 memset(&dest, 0, sizeof dest); 90 memset(&dest, 0, sizeof dest);
@@ -136,8 +148,6 @@ static void read_response (void *cls, const struct GNUNET_SCHEDULER_TaskContext
136 answer->pkt.dst_port = query_states[dns->s.id].local_port; 148 answer->pkt.dst_port = query_states[dns->s.id].local_port;
137 memcpy(answer->pkt.data, buf, r); 149 memcpy(answer->pkt.data, buf, r);
138 150
139 pkt_printf_dns((struct dns_pkt*)buf);
140
141 GNUNET_CONTAINER_DLL_insert_after(mycls.head, mycls.tail, mycls.tail, answer); 151 GNUNET_CONTAINER_DLL_insert_after(mycls.head, mycls.tail, mycls.tail, answer);
142 152
143 /* struct GNUNET_CONNECTION_TransmitHandle* th = */ GNUNET_SERVER_notify_transmit_ready(query_states[dns->s.id].client, len, GNUNET_TIME_UNIT_FOREVER_REL, &send_answer, query_states[dns->s.id].client); 153 /* struct GNUNET_CONNECTION_TransmitHandle* th = */ GNUNET_SERVER_notify_transmit_ready(query_states[dns->s.id].client, len, GNUNET_TIME_UNIT_FOREVER_REL, &send_answer, query_states[dns->s.id].client);