diff options
author | Martin Schanzenbach <schanzen@gnunet.org> | 2022-03-15 08:42:42 +0100 |
---|---|---|
committer | Martin Schanzenbach <schanzen@gnunet.org> | 2022-03-15 08:42:42 +0100 |
commit | cfd3db44a82330272752ab3da08f1823c9867652 (patch) | |
tree | 1ee581fcb185407b513828e796d4e7441e608c11 /src/namestore/gnunet-service-namestore.c | |
parent | aa033d45165394bde735dcd19495fd420f5cd963 (diff) | |
download | gnunet-cfd3db44a82330272752ab3da08f1823c9867652.tar.gz gnunet-cfd3db44a82330272752ab3da08f1823c9867652.zip |
NAMESTORE: Prevent storing records under invalid labels
Diffstat (limited to 'src/namestore/gnunet-service-namestore.c')
-rw-r--r-- | src/namestore/gnunet-service-namestore.c | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/src/namestore/gnunet-service-namestore.c b/src/namestore/gnunet-service-namestore.c index 6c6f5f4b6..2a3a006e8 100644 --- a/src/namestore/gnunet-service-namestore.c +++ b/src/namestore/gnunet-service-namestore.c | |||
@@ -1543,25 +1543,43 @@ handle_record_store (void *cls, const struct RecordStoreMessage *rp_msg) | |||
1543 | rd_ser = &name_tmp[name_len]; | 1543 | rd_ser = &name_tmp[name_len]; |
1544 | { | 1544 | { |
1545 | struct GNUNET_GNSRECORD_Data rd[GNUNET_NZL (rd_count)]; | 1545 | struct GNUNET_GNSRECORD_Data rd[GNUNET_NZL (rd_count)]; |
1546 | 1546 | char *emsg; | |
1547 | if (GNUNET_OK != | ||
1548 | GNUNET_GNSRECORD_records_deserialize (rd_ser_len, rd_ser, rd_count, rd)) | ||
1549 | { | ||
1550 | GNUNET_break (0); | ||
1551 | GNUNET_SERVICE_client_drop (nc->client); | ||
1552 | return; | ||
1553 | } | ||
1554 | 1547 | ||
1555 | /* Extracting and converting private key */ | 1548 | /* Extracting and converting private key */ |
1556 | conv_name = GNUNET_GNSRECORD_string_normalize (name_tmp); | 1549 | conv_name = GNUNET_GNSRECORD_string_normalize (name_tmp); |
1557 | if (NULL == conv_name) | 1550 | if (NULL == conv_name) |
1558 | { | 1551 | { |
1559 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 1552 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
1560 | "Error converting name `%s'\n", | 1553 | "Error normalizing name `%s'\n", |
1561 | name_tmp); | 1554 | name_tmp); |
1562 | GNUNET_SERVICE_client_drop (nc->client); | 1555 | send_store_response (nc, GNUNET_SYSERR, _("Error normalizing name."), rid); |
1556 | GNUNET_SERVICE_client_continue (nc->client); | ||
1557 | return; | ||
1558 | } | ||
1559 | |||
1560 | /* Check name for validity */ | ||
1561 | if (GNUNET_OK != GNUNET_GNSRECORD_label_check (conv_name, &emsg)) | ||
1562 | { | ||
1563 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | ||
1564 | "Label invalid: `%s'\n", | ||
1565 | emsg); | ||
1566 | send_store_response (nc, GNUNET_SYSERR, emsg, rid); | ||
1567 | GNUNET_free (emsg); | ||
1568 | GNUNET_free (conv_name); | ||
1569 | GNUNET_SERVICE_client_continue (nc->client); | ||
1570 | return; | ||
1571 | } | ||
1572 | |||
1573 | if (GNUNET_OK != | ||
1574 | GNUNET_GNSRECORD_records_deserialize (rd_ser_len, rd_ser, rd_count, rd)) | ||
1575 | { | ||
1576 | send_store_response (nc, GNUNET_SYSERR, | ||
1577 | _("Error deserializing records."), rid); | ||
1578 | GNUNET_free (conv_name); | ||
1579 | GNUNET_SERVICE_client_continue (nc->client); | ||
1563 | return; | 1580 | return; |
1564 | } | 1581 | } |
1582 | |||
1565 | GNUNET_STATISTICS_update (statistics, | 1583 | GNUNET_STATISTICS_update (statistics, |
1566 | "Well-formed store requests received", | 1584 | "Well-formed store requests received", |
1567 | 1, | 1585 | 1, |