aboutsummaryrefslogtreecommitdiff
path: root/src/namestore/gnunet-service-namestore.c
diff options
context:
space:
mode:
authorMartin Schanzenbach <schanzen@gnunet.org>2022-03-15 08:42:42 +0100
committerMartin Schanzenbach <schanzen@gnunet.org>2022-03-15 08:42:42 +0100
commitcfd3db44a82330272752ab3da08f1823c9867652 (patch)
tree1ee581fcb185407b513828e796d4e7441e608c11 /src/namestore/gnunet-service-namestore.c
parentaa033d45165394bde735dcd19495fd420f5cd963 (diff)
downloadgnunet-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.c38
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,