diff options
author | Martin Schanzenbach <schanzen@gnunet.org> | 2022-10-29 18:31:00 +0900 |
---|---|---|
committer | Martin Schanzenbach <schanzen@gnunet.org> | 2022-10-29 18:31:00 +0900 |
commit | 914fd6adac878abfa3050568ba02a1c57a150e8e (patch) | |
tree | 28c4fee5f4696ac36f8fda24594453baf87501c9 /src/gns/gnunet-service-gns.c | |
parent | 0c673248ab51517532cb5782f4999bd870b7023e (diff) | |
download | gnunet-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.c | 33 |
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 ( |