diff options
author | Christian Grothoff <christian@grothoff.org> | 2018-04-05 16:25:46 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2018-04-05 16:25:46 +0200 |
commit | 32f590da99c8c77c063b58e3a105a3c05fa5e988 (patch) | |
tree | e40710b59eb8a89957841c810f0fb8fa9db1edda /src/gns/gnunet-dns2gns.c | |
parent | eea5388958b3c21336972a0c979dc344e3bc66e7 (diff) | |
download | gnunet-32f590da99c8c77c063b58e3a105a3c05fa5e988.tar.gz gnunet-32f590da99c8c77c063b58e3a105a3c05fa5e988.zip |
where applicable, check DNS ID in responses before processing further
Diffstat (limited to 'src/gns/gnunet-dns2gns.c')
-rw-r--r-- | src/gns/gnunet-dns2gns.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/src/gns/gnunet-dns2gns.c b/src/gns/gnunet-dns2gns.c index 3d16cd773..47cc6dde0 100644 --- a/src/gns/gnunet-dns2gns.c +++ b/src/gns/gnunet-dns2gns.c | |||
@@ -85,6 +85,11 @@ struct Request | |||
85 | * Number of bytes in @e udp_msg. | 85 | * Number of bytes in @e udp_msg. |
86 | */ | 86 | */ |
87 | size_t udp_msg_size; | 87 | size_t udp_msg_size; |
88 | |||
89 | /** | ||
90 | * ID of the original request. | ||
91 | */ | ||
92 | uint16_t original_request_id; | ||
88 | }; | 93 | }; |
89 | 94 | ||
90 | 95 | ||
@@ -255,6 +260,18 @@ dns_result_processor (void *cls, | |||
255 | struct Request *request = cls; | 260 | struct Request *request = cls; |
256 | 261 | ||
257 | (void) rs; | 262 | (void) rs; |
263 | if (NULL == dns) | ||
264 | { | ||
265 | /* DNSSTUB gave up, so we trigger timeout early */ | ||
266 | GNUNET_SCHEDULER_cancel (request->timeout_task); | ||
267 | do_timeout (request); | ||
268 | return; | ||
269 | } | ||
270 | if (request->original_request_id != dns->id) | ||
271 | { | ||
272 | /* for a another query, ignore */ | ||
273 | return; | ||
274 | } | ||
258 | request->packet = GNUNET_DNSPARSER_parse ((char*)dns, | 275 | request->packet = GNUNET_DNSPARSER_parse ((char*)dns, |
259 | r); | 276 | r); |
260 | send_response (request); | 277 | send_response (request); |
@@ -277,7 +294,6 @@ result_processor (void *cls, | |||
277 | { | 294 | { |
278 | struct Request *request = cls; | 295 | struct Request *request = cls; |
279 | struct GNUNET_DNSPARSER_Packet *packet; | 296 | struct GNUNET_DNSPARSER_Packet *packet; |
280 | uint32_t i; | ||
281 | struct GNUNET_DNSPARSER_Record rec; | 297 | struct GNUNET_DNSPARSER_Record rec; |
282 | 298 | ||
283 | request->lookup = NULL; | 299 | request->lookup = NULL; |
@@ -288,6 +304,7 @@ result_processor (void *cls, | |||
288 | "Using DNS resolver IP `%s' to resolve `%s'\n", | 304 | "Using DNS resolver IP `%s' to resolve `%s'\n", |
289 | dns_ip, | 305 | dns_ip, |
290 | request->packet->queries[0].name); | 306 | request->packet->queries[0].name); |
307 | request->original_request_id = request->packet->id; | ||
291 | GNUNET_DNSPARSER_free_packet (request->packet); | 308 | GNUNET_DNSPARSER_free_packet (request->packet); |
292 | request->packet = NULL; | 309 | request->packet = NULL; |
293 | request->dns_lookup = GNUNET_DNSSTUB_resolve2 (dns_stub, | 310 | request->dns_lookup = GNUNET_DNSSTUB_resolve2 (dns_stub, |
@@ -296,7 +313,7 @@ result_processor (void *cls, | |||
296 | &dns_result_processor, | 313 | &dns_result_processor, |
297 | request); | 314 | request); |
298 | return; | 315 | return; |
299 | } | 316 | } |
300 | packet = request->packet; | 317 | packet = request->packet; |
301 | packet->flags.query_or_response = 1; | 318 | packet->flags.query_or_response = 1; |
302 | packet->flags.return_code = GNUNET_TUN_DNS_RETURN_CODE_NO_ERROR; | 319 | packet->flags.return_code = GNUNET_TUN_DNS_RETURN_CODE_NO_ERROR; |
@@ -307,7 +324,7 @@ result_processor (void *cls, | |||
307 | packet->flags.message_truncated = 0; | 324 | packet->flags.message_truncated = 0; |
308 | packet->flags.authoritative_answer = 0; | 325 | packet->flags.authoritative_answer = 0; |
309 | //packet->flags.opcode = GNUNET_TUN_DNS_OPCODE_STATUS; // ??? | 326 | //packet->flags.opcode = GNUNET_TUN_DNS_OPCODE_STATUS; // ??? |
310 | for (i=0;i<rd_count;i++) | 327 | for (uint32_t i=0;i<rd_count;i++) |
311 | { | 328 | { |
312 | // FIXME: do we need to hanlde #GNUNET_GNSRECORD_RF_SHADOW_RECORD | 329 | // FIXME: do we need to hanlde #GNUNET_GNSRECORD_RF_SHADOW_RECORD |
313 | // here? Or should we do this in libgnunetgns? | 330 | // here? Or should we do this in libgnunetgns? |