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 | |
parent | de86c6645d4c6c757ef50701d5d873000449b04e (diff) | |
download | gnunet-08122e992e162831cc62fe7177030fec22712e71.tar.gz gnunet-08122e992e162831cc62fe7177030fec22712e71.zip |
-stuff
Diffstat (limited to 'src/dns')
-rw-r--r-- | src/dns/dnsparser.c | 4 | ||||
-rw-r--r-- | src/dns/gnunet-dns-redirector.c | 32 | ||||
-rw-r--r-- | src/dns/gnunet-service-dns_new.c | 2 |
3 files changed, 34 insertions, 4 deletions
diff --git a/src/dns/dnsparser.c b/src/dns/dnsparser.c index 4149d102f..8346051d7 100644 --- a/src/dns/dnsparser.c +++ b/src/dns/dnsparser.c | |||
@@ -787,7 +787,9 @@ GNUNET_DNSPARSER_pack (const struct GNUNET_DNSPARSER_Packet *p, | |||
787 | *buf = GNUNET_malloc (off); | 787 | *buf = GNUNET_malloc (off); |
788 | *buf_length = off; | 788 | *buf_length = off; |
789 | memcpy (*buf, tmp, off); | 789 | memcpy (*buf, tmp, off); |
790 | return trc; | 790 | if (GNUNET_YES == trc) |
791 | return GNUNET_NO; | ||
792 | return GNUNET_OK; | ||
791 | } | 793 | } |
792 | 794 | ||
793 | 795 | ||
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 | ||
diff --git a/src/dns/gnunet-service-dns_new.c b/src/dns/gnunet-service-dns_new.c index d814ecb47..e32198b11 100644 --- a/src/dns/gnunet-service-dns_new.c +++ b/src/dns/gnunet-service-dns_new.c | |||
@@ -1060,6 +1060,8 @@ handle_client_response (void *cls GNUNET_UNUSED, | |||
1060 | return; | 1060 | return; |
1061 | } | 1061 | } |
1062 | GNUNET_free_non_null (rr->payload); | 1062 | GNUNET_free_non_null (rr->payload); |
1063 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | ||
1064 | _("Changing DNS resply according to client specifications\n")); | ||
1063 | rr->payload = GNUNET_malloc (msize); | 1065 | rr->payload = GNUNET_malloc (msize); |
1064 | memcpy (rr->payload, &resp[1], msize); | 1066 | memcpy (rr->payload, &resp[1], msize); |
1065 | if (rr->phase == RP_QUERY) | 1067 | if (rr->phase == RP_QUERY) |