aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gns/gnunet-dns2gns.c111
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