aboutsummaryrefslogtreecommitdiff
path: root/src/dns/gnunet-dns-redirector.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2012-01-05 13:31:44 +0000
committerChristian Grothoff <christian@grothoff.org>2012-01-05 13:31:44 +0000
commit08122e992e162831cc62fe7177030fec22712e71 (patch)
treed3031157296a4e9284844b53bb0e711825feae21 /src/dns/gnunet-dns-redirector.c
parentde86c6645d4c6c757ef50701d5d873000449b04e (diff)
downloadgnunet-08122e992e162831cc62fe7177030fec22712e71.tar.gz
gnunet-08122e992e162831cc62fe7177030fec22712e71.zip
-stuff
Diffstat (limited to 'src/dns/gnunet-dns-redirector.c')
-rw-r--r--src/dns/gnunet-dns-redirector.c32
1 files changed, 29 insertions, 3 deletions
diff --git a/src/dns/gnunet-dns-redirector.c b/src/dns/gnunet-dns-redirector.c
index bde869816..9c0e39625 100644
--- a/src/dns/gnunet-dns-redirector.c
+++ b/src/dns/gnunet-dns-redirector.c
@@ -63,19 +63,35 @@ static int verbosity;
63static void 63static void
64modify_record (const struct GNUNET_DNSPARSER_Record *record) 64modify_record (const struct GNUNET_DNSPARSER_Record *record)
65{ 65{
66 char buf[INET6_ADDRSTRLEN];
67
66 switch (record->type) 68 switch (record->type)
67 { 69 {
68 case GNUNET_DNSPARSER_TYPE_A: 70 case GNUNET_DNSPARSER_TYPE_A:
69 if (record->data.raw.data_len != sizeof (struct in_addr)) 71 if (record->data.raw.data_len != sizeof (struct in_addr))
70 return; 72 return;
71 if (NULL != n4) 73 if (NULL != n4)
74 {
75 if (verbosity > 1)
76 fprintf (stderr,
77 "Changing A record from `%s' to `%s'\n",
78 inet_ntop (AF_INET, record->data.raw.data, buf, sizeof (buf)),
79 n4);
72 inet_pton (AF_INET, n4, record->data.raw.data); 80 inet_pton (AF_INET, n4, record->data.raw.data);
81 }
73 break; 82 break;
74 case GNUNET_DNSPARSER_TYPE_AAAA: 83 case GNUNET_DNSPARSER_TYPE_AAAA:
75 if (record->data.raw.data_len != sizeof (struct in6_addr)) 84 if (record->data.raw.data_len != sizeof (struct in6_addr))
76 return; 85 return;
77 if (NULL != n6) 86 if (NULL != n6)
87 {
88 if (verbosity > 1)
89 fprintf (stderr,
90 "Changing AAAA record from `%s' to `%s'\n",
91 inet_ntop (AF_INET6, record->data.raw.data, buf, sizeof (buf)),
92 n4);
78 inet_pton (AF_INET6, n6, record->data.raw.data); 93 inet_pton (AF_INET6, n6, record->data.raw.data);
94 }
79 break; 95 break;
80 case GNUNET_DNSPARSER_TYPE_NS: 96 case GNUNET_DNSPARSER_TYPE_NS:
81 case GNUNET_DNSPARSER_TYPE_CNAME: 97 case GNUNET_DNSPARSER_TYPE_CNAME:
@@ -128,8 +144,7 @@ modify_request (void *cls,
128 p = GNUNET_DNSPARSER_parse (request, request_length); 144 p = GNUNET_DNSPARSER_parse (request, request_length);
129 if (NULL == p) 145 if (NULL == p)
130 { 146 {
131 fprintf (stderr, "Received malformed DNS packet!\n"); 147 fprintf (stderr, "Received malformed DNS packet, leaving it untouched\n");
132 // FIXME: drop instead?
133 GNUNET_DNS_request_forward (rh); 148 GNUNET_DNS_request_forward (rh);
134 return; 149 return;
135 } 150 }
@@ -138,11 +153,22 @@ modify_request (void *cls,
138 buf = NULL; 153 buf = NULL;
139 ret = GNUNET_DNSPARSER_pack (p, 1024, &buf, &len); 154 ret = GNUNET_DNSPARSER_pack (p, 1024, &buf, &len);
140 GNUNET_DNSPARSER_free_packet (p); 155 GNUNET_DNSPARSER_free_packet (p);
141 fprintf (stderr, "PACK: %d\n", ret);
142 if (GNUNET_OK != ret) 156 if (GNUNET_OK != ret)
157 {
158 if (GNUNET_NO == ret)
159 fprintf (stderr,
160 "Modified DNS response did not fit, keeping old response\n");
161 else
162 GNUNET_break (0); /* our modifications should have been sane! */
143 GNUNET_DNS_request_forward (rh); 163 GNUNET_DNS_request_forward (rh);
164 }
144 else 165 else
166 {
167 if (verbosity > 0)
168 fprintf (stdout,
169 "Injecting modified DNS response\n");
145 GNUNET_DNS_request_answer (rh, len, buf); 170 GNUNET_DNS_request_answer (rh, len, buf);
171 }
146 GNUNET_free_non_null (buf); 172 GNUNET_free_non_null (buf);
147} 173}
148 174