diff options
author | Christian Grothoff <christian@grothoff.org> | 2012-01-05 13:31:44 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2012-01-05 13:31:44 +0000 |
commit | 08122e992e162831cc62fe7177030fec22712e71 (patch) | |
tree | d3031157296a4e9284844b53bb0e711825feae21 /src/dns/gnunet-dns-redirector.c | |
parent | de86c6645d4c6c757ef50701d5d873000449b04e (diff) | |
download | gnunet-08122e992e162831cc62fe7177030fec22712e71.tar.gz gnunet-08122e992e162831cc62fe7177030fec22712e71.zip |
-stuff
Diffstat (limited to 'src/dns/gnunet-dns-redirector.c')
-rw-r--r-- | src/dns/gnunet-dns-redirector.c | 32 |
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; | |||
63 | static void | 63 | static void |
64 | modify_record (const struct GNUNET_DNSPARSER_Record *record) | 64 | modify_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 | ||