From: Matthias Wachs Date: Tue, 6 Mar 2012 12:49:02 +0000 (+0000) Subject: - fixes for put and lookup X-Git-Tag: initial-import-from-subversion-38251~14401 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=46bab5b9f9afefaac097767ea356defea5efbbaa;p=oweals%2Fgnunet.git - fixes for put and lookup --- diff --git a/src/namestore/gnunet-service-namestore.c b/src/namestore/gnunet-service-namestore.c index 7408f7ad7..8153cf20b 100644 --- a/src/namestore/gnunet-service-namestore.c +++ b/src/namestore/gnunet-service-namestore.c @@ -231,8 +231,6 @@ handle_lookup_name_it (void *cls, /* send response */ struct LookupNameContext *lnc = cls; struct LookupNameResponseMessage *lnr_msg; - - struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded *zone_key_tmp; struct GNUNET_NAMESTORE_RecordData *rd_selected = NULL; char *rd_tmp; char *name_tmp; @@ -313,17 +311,16 @@ handle_lookup_name_it (void *cls, lnr_msg->rd_len = htons (rd_ser_len); lnr_msg->name_len = htons (name_len); lnr_msg->expire = GNUNET_TIME_absolute_hton(expire); + lnr_msg->public_key = (*zone_key); lnr_msg->contains_sig = htons (contains_signature); if (GNUNET_YES == contains_signature) lnr_msg->signature = *signature; else memset (&lnr_msg->signature, '\0', sizeof (lnr_msg->signature)); - zone_key_tmp = (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded *) &lnr_msg[1]; - name_tmp = (char *) &zone_key_tmp[1]; + name_tmp = (char *) &lnr_msg[1]; rd_tmp = &name_tmp[name_len]; - memcpy (zone_key_tmp, zone_key, sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded)); memcpy (name_tmp, name, name_len); memcpy (rd_tmp, rd_ser, rd_ser_len); @@ -488,7 +485,6 @@ static void handle_record_put (void *cls, goto send; } - GNUNET_HashCode zone_hash; GNUNET_CRYPTO_hash (&rp_msg->public_key, sizeof (rp_msg->public_key), &zone_hash); @@ -511,11 +507,7 @@ send: rpr_msg.gns_header.header.type = htons (GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_PUT_RESPONSE); rpr_msg.gns_header.header.size = htons (sizeof (struct RecordPutResponseMessage)); rpr_msg.gns_header.r_id = rp_msg->gns_header.r_id; - - if (GNUNET_OK == res) - rpr_msg.op_result = htons (GNUNET_OK); - else - rpr_msg.op_result = htons (GNUNET_NO); + rpr_msg.op_result = htons (res); GNUNET_SERVER_notification_context_unicast (snc, nc->client, (const struct GNUNET_MessageHeader *) &rpr_msg, GNUNET_NO); GNUNET_SERVER_receive_done (client, GNUNET_OK); diff --git a/src/namestore/namestore.h b/src/namestore/namestore.h index 5b4c02385..ac59d9a11 100644 --- a/src/namestore/namestore.h +++ b/src/namestore/namestore.h @@ -277,7 +277,9 @@ struct RecordPutResponseMessage struct GNUNET_NAMESTORE_Header gns_header; /** - * name length: GNUNET_NO (0) on error, GNUNET_OK (1) on success + * result: + * GNUNET_SYSERR on failure + * GNUNET_OK on success */ int32_t op_result; }; @@ -286,7 +288,6 @@ struct RecordPutResponseMessage /** * Create a record and put it to the namestore * Memory layout: - * [struct RecordCreateMessage][char *name][rc_count * struct GNUNET_NAMESTORE_RecordData] */ struct RecordCreateMessage { diff --git a/src/namestore/namestore_api.c b/src/namestore/namestore_api.c index f885c2b7c..195c8a9bd 100644 --- a/src/namestore/namestore_api.c +++ b/src/namestore/namestore_api.c @@ -323,23 +323,20 @@ handle_record_put_response (struct GNUNET_NAMESTORE_QueueEntry *qe, "RECORD_PUT_RESPONSE"); struct GNUNET_NAMESTORE_Handle *h = qe->nsh; - int res = GNUNET_OK; if (ntohs (msg->op_result) == GNUNET_OK) { - res = GNUNET_OK; if (qe->cont != NULL) { - qe->cont (qe->cont_cls, res, _("Namestore added record successfully")); + qe->cont (qe->cont_cls, GNUNET_OK, _("Namestore added record successfully")); } } - else if (ntohs (msg->op_result) == GNUNET_NO) + else if (ntohs (msg->op_result) == GNUNET_SYSERR) { - res = GNUNET_SYSERR; if (qe->cont != NULL) { - qe->cont (qe->cont_cls, res, _("Namestore failed to add record")); + qe->cont (qe->cont_cls, GNUNET_SYSERR, _("Namestore failed to add record")); } } else @@ -952,7 +949,6 @@ GNUNET_NAMESTORE_record_put (struct GNUNET_NAMESTORE_Handle *h, size_t msg_size = 0; size_t name_len = 0; size_t rd_ser_len = 0; - size_t pubkey_len = 0; uint32_t rid = 0; GNUNET_assert (NULL != h); @@ -981,9 +977,8 @@ GNUNET_NAMESTORE_record_put (struct GNUNET_NAMESTORE_Handle *h, char rd_ser[rd_ser_len]; GNUNET_NAMESTORE_records_serialize(rd_count, rd, rd_ser_len, rd_ser); - pubkey_len = sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded); struct RecordPutMessage * msg; - msg_size = sizeof (struct RecordPutMessage) + pubkey_len + name_len + rd_ser_len; + msg_size = sizeof (struct RecordPutMessage) + name_len + rd_ser_len; /* create msg here */ pe = GNUNET_malloc(sizeof (struct PendingMessage) + msg_size); @@ -1042,13 +1037,20 @@ GNUNET_NAMESTORE_verify_signature (const struct GNUNET_CRYPTO_RsaPublicKeyBinary GNUNET_assert (public_key != NULL); GNUNET_assert (name != NULL); + GNUNET_assert (rd != NULL); GNUNET_assert (signature != NULL); + rd_ser_len = GNUNET_NAMESTORE_records_get_size(rd_count, rd); char rd_ser[rd_ser_len]; GNUNET_NAMESTORE_records_serialize(rd_count, rd, rd_ser_len, rd_ser); name_len = strlen (name) + 1; + if (name_len > 256) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } sig_purpose = GNUNET_malloc(sizeof (struct GNUNET_CRYPTO_RsaSignaturePurpose) + rd_ser_len + name_len); sig_purpose->size = htonl (sizeof (struct GNUNET_CRYPTO_RsaSignaturePurpose)+ rd_ser_len + name_len);