aboutsummaryrefslogtreecommitdiff
path: root/src/gns/gnunet-service-gns.c
diff options
context:
space:
mode:
authorMartin Schanzenbach <schanzen@gnunet.org>2022-10-29 18:31:00 +0900
committerMartin Schanzenbach <schanzen@gnunet.org>2022-10-29 18:31:00 +0900
commit914fd6adac878abfa3050568ba02a1c57a150e8e (patch)
tree28c4fee5f4696ac36f8fda24594453baf87501c9 /src/gns/gnunet-service-gns.c
parent0c673248ab51517532cb5782f4999bd870b7023e (diff)
downloadgnunet-914fd6adac878abfa3050568ba02a1c57a150e8e.tar.gz
gnunet-914fd6adac878abfa3050568ba02a1c57a150e8e.zip
-fix GNS API
Diffstat (limited to 'src/gns/gnunet-service-gns.c')
-rw-r--r--src/gns/gnunet-service-gns.c33
1 files changed, 26 insertions, 7 deletions
diff --git a/src/gns/gnunet-service-gns.c b/src/gns/gnunet-service-gns.c
index 6a11ec2ce..7e770ce5a 100644
--- a/src/gns/gnunet-service-gns.c
+++ b/src/gns/gnunet-service-gns.c
@@ -395,10 +395,11 @@ check_lookup (void *cls,
395 const struct LookupMessage *l_msg) 395 const struct LookupMessage *l_msg)
396{ 396{
397 size_t nlen; 397 size_t nlen;
398 size_t klen;
398 399
399 (void) cls; 400 (void) cls;
400 GNUNET_MQ_check_zero_termination (l_msg); 401 klen = ntohl (l_msg->key_len);
401 nlen = ntohs (l_msg->header.size) - sizeof(struct LookupMessage); 402 nlen = ntohs (l_msg->header.size) - sizeof(struct LookupMessage) - klen;
402 if (nlen > GNUNET_DNSPARSER_MAX_NAME_LENGTH) 403 if (nlen > GNUNET_DNSPARSER_MAX_NAME_LENGTH)
403 { 404 {
404 GNUNET_break (0); 405 GNUNET_break (0);
@@ -420,19 +421,37 @@ handle_lookup (void *cls,
420{ 421{
421 struct GnsClient *gc = cls; 422 struct GnsClient *gc = cls;
422 struct ClientLookupHandle *clh; 423 struct ClientLookupHandle *clh;
424 struct GNUNET_IDENTITY_PublicKey zone;
423 const char *name; 425 const char *name;
426 size_t key_len;
427 size_t read;
424 428
425 GNUNET_SERVICE_client_continue (gc->client); 429 GNUNET_SERVICE_client_continue (gc->client);
426 name = (const char *) &sh_msg[1]; 430 key_len = ntohl (sh_msg->key_len);
427 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
428 "Received LOOKUP `%s' message\n",
429 name);
430 clh = GNUNET_new (struct ClientLookupHandle); 431 clh = GNUNET_new (struct ClientLookupHandle);
431 GNUNET_CONTAINER_DLL_insert (gc->clh_head, 432 GNUNET_CONTAINER_DLL_insert (gc->clh_head,
432 gc->clh_tail, 433 gc->clh_tail,
433 clh); 434 clh);
434 clh->gc = gc; 435 clh->gc = gc;
435 clh->request_id = sh_msg->id; 436 clh->request_id = sh_msg->id;
437 if ((GNUNET_SYSERR ==
438 GNUNET_IDENTITY_read_public_key_from_buffer (&sh_msg[1],
439 key_len,
440 &zone,
441 &read)) ||
442 (read != key_len))
443 {
444 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
445 "LOOKUP: Failed to read zone key!");
446 send_lookup_response (clh,
447 0,
448 NULL);
449 return;
450 }
451 name = (const char *) &sh_msg[1] + key_len;
452 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
453 "Received LOOKUP `%s' message\n",
454 name);
436 if ((GNUNET_DNSPARSER_TYPE_A == ntohl (sh_msg->type)) && 455 if ((GNUNET_DNSPARSER_TYPE_A == ntohl (sh_msg->type)) &&
437 (GNUNET_OK != v4_enabled)) 456 (GNUNET_OK != v4_enabled))
438 { 457 {
@@ -453,7 +472,7 @@ handle_lookup (void *cls,
453 NULL); 472 NULL);
454 return; 473 return;
455 } 474 }
456 clh->lookup = GNS_resolver_lookup (&sh_msg->zone, 475 clh->lookup = GNS_resolver_lookup (&zone,
457 ntohl (sh_msg->type), 476 ntohl (sh_msg->type),
458 name, 477 name,
459 (enum GNUNET_GNS_LocalOptions) ntohs ( 478 (enum GNUNET_GNS_LocalOptions) ntohs (