diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gns/gnunet-dns2gns.c | 111 |
1 files changed, 47 insertions, 64 deletions
diff --git a/src/gns/gnunet-dns2gns.c b/src/gns/gnunet-dns2gns.c index dcba31495..1b49c294a 100644 --- a/src/gns/gnunet-dns2gns.c +++ b/src/gns/gnunet-dns2gns.c | |||
@@ -362,12 +362,9 @@ handle_request (struct GNUNET_NETWORK_Handle *lsock, | |||
362 | struct Request *request; | 362 | struct Request *request; |
363 | struct GNUNET_DNSPARSER_Packet *packet; | 363 | struct GNUNET_DNSPARSER_Packet *packet; |
364 | char *name; | 364 | char *name; |
365 | char *dot; | ||
366 | char *nname; | ||
367 | size_t name_len; | 365 | size_t name_len; |
368 | int type; | 366 | int type; |
369 | int use_gns; | 367 | int use_gns; |
370 | struct GNUNET_CRYPTO_ShortHashCode zone; | ||
371 | 368 | ||
372 | packet = GNUNET_DNSPARSER_parse (udp_msg, udp_msg_size); | 369 | packet = GNUNET_DNSPARSER_parse (udp_msg, udp_msg_size); |
373 | if (NULL == packet) | 370 | if (NULL == packet) |
@@ -414,74 +411,60 @@ handle_request (struct GNUNET_NETWORK_Handle *lsock, | |||
414 | name = GNUNET_strdup (packet->queries[0].name); | 411 | name = GNUNET_strdup (packet->queries[0].name); |
415 | name_len = strlen (name); | 412 | name_len = strlen (name); |
416 | use_gns = GNUNET_NO; | 413 | use_gns = GNUNET_NO; |
417 | if ( (name_len > strlen (dns_suffix)) && | 414 | |
415 | |||
416 | if ( (name_len > strlen (fcfs_suffix)) && | ||
417 | (0 == strcasecmp (fcfs_suffix, | ||
418 | &name[name_len - strlen (fcfs_suffix)])) ) | ||
419 | { | ||
420 | /* replace ".fcfs.zkey.eu" with ".gnu" */ | ||
421 | strcpy (&name[name_len - strlen (fcfs_suffix)], | ||
422 | ".gnu"); | ||
423 | use_gns = GNUNET_YES; | ||
424 | } else if ( (name_len > strlen (dns_suffix)) && | ||
418 | (0 == strcasecmp (dns_suffix, | 425 | (0 == strcasecmp (dns_suffix, |
419 | &name[name_len - strlen (dns_suffix)])) ) | 426 | &name[name_len - strlen (dns_suffix)])) ) |
420 | { | 427 | { |
421 | /* Test if '.zkey' was requested */ | 428 | /* replace ".fcfs.zkey.eu" with ".zkey" */ |
422 | name[name_len - strlen (dns_suffix)] = '\0'; | 429 | strcpy (&name[name_len - strlen (dns_suffix)], |
423 | dot = strrchr (name, (int) '.'); | 430 | ".zkey"); |
424 | /* FIXME: #2985 */ | ||
425 | if ( (NULL != dot) && | ||
426 | (GNUNET_OK == | ||
427 | GNUNET_CRYPTO_short_hash_from_string (dot + 1, &zone)) ) | ||
428 | { | ||
429 | /* valid '.zkey' name */ | ||
430 | GNUNET_asprintf (&nname, | ||
431 | "%s.%s", | ||
432 | name, | ||
433 | GNUNET_GNS_TLD_ZKEY); | ||
434 | GNUNET_free (name); | ||
435 | name = nname; | ||
436 | } | ||
437 | else | ||
438 | { | ||
439 | /* try '.gnu' name */ | ||
440 | GNUNET_asprintf (&nname, | ||
441 | "%s.%s", | ||
442 | name, | ||
443 | GNUNET_GNS_TLD); | ||
444 | GNUNET_free (name); | ||
445 | name = nname; | ||
446 | } | ||
447 | name_len = strlen (name); | ||
448 | } | ||
449 | if ( (name_len >= strlen ((GNUNET_GNS_TLD))) && | ||
450 | (0 == strcasecmp (GNUNET_GNS_TLD, | ||
451 | &name[name_len - strlen (GNUNET_GNS_TLD)])) ) | ||
452 | use_gns = GNUNET_YES; | 431 | use_gns = GNUNET_YES; |
453 | 432 | } else if ( (name_len > strlen (".gnu")) && | |
454 | if ( (name_len > strlen (GNUNET_GNS_TLD_ZKEY)) && | 433 | (0 == strcasecmp (".gnu", |
455 | (0 == strcasecmp (GNUNET_GNS_TLD_ZKEY, | 434 | &name[name_len - strlen (".gnu")])) ) |
456 | &name[name_len - strlen (GNUNET_GNS_TLD_ZKEY)])) ) | 435 | { |
436 | /* name is in GNS */ | ||
457 | use_gns = GNUNET_YES; | 437 | use_gns = GNUNET_YES; |
458 | 438 | } | |
459 | if (GNUNET_YES == use_gns) | 439 | if (GNUNET_YES == use_gns) |
460 | { | 440 | { |
461 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 441 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
462 | "Calling GNS\n"); | 442 | "Calling GNS on `%s'\n", |
463 | type = packet->queries[0].type; | 443 | name); |
464 | request->lookup = GNUNET_GNS_lookup (gns, | 444 | type = packet->queries[0].type; |
465 | name, | 445 | request->lookup = GNUNET_GNS_lookup (gns, |
466 | &my_zone, | 446 | name, |
467 | type, | 447 | &my_zone, |
468 | GNUNET_NO, | 448 | type, |
469 | NULL /* no shorten */, | 449 | GNUNET_NO, |
470 | &result_processor, | 450 | NULL /* no shorten */, |
471 | request); | 451 | &result_processor, |
472 | } | 452 | request); |
453 | } | ||
473 | else | 454 | else |
474 | { | 455 | { |
475 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 456 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
476 | "Calling DNS at %s\n", dns_ip); | 457 | "Using DNS resolver IP `%s' to resolve `%s'\n", |
477 | GNUNET_DNSPARSER_free_packet (request->packet); | 458 | dns_ip, |
478 | request->packet = NULL; | 459 | name); |
479 | request->dns_lookup = GNUNET_DNSSTUB_resolve2 (dns_stub, | 460 | GNUNET_DNSPARSER_free_packet (request->packet); |
480 | udp_msg, | 461 | request->packet = NULL; |
481 | udp_msg_size, | 462 | request->dns_lookup = GNUNET_DNSSTUB_resolve2 (dns_stub, |
482 | &dns_result_processor, | 463 | udp_msg, |
483 | request); | 464 | udp_msg_size, |
484 | } | 465 | &dns_result_processor, |
466 | request); | ||
467 | } | ||
485 | GNUNET_free (name); | 468 | GNUNET_free (name); |
486 | } | 469 | } |
487 | 470 | ||