mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-26 07:31:33 +01:00
Merge remote-tracking branch 'asn/bug23343'
This commit is contained in:
commit
3cf8da02f7
2 changed files with 25 additions and 15 deletions
|
@ -1357,7 +1357,7 @@ hs_hsdir_requery_period(const or_options_t *options)
|
||||||
*
|
*
|
||||||
* where 'hsdir_identity' is the identity digest of the HSDir node, and
|
* where 'hsdir_identity' is the identity digest of the HSDir node, and
|
||||||
* 'hs_identity' is the descriptor ID of the HS in the v2 case, or the ed25519
|
* 'hs_identity' is the descriptor ID of the HS in the v2 case, or the ed25519
|
||||||
* identity public key of the HS in the v3 case. */
|
* blinded public key of the HS in the v3 case. */
|
||||||
static strmap_t *last_hid_serv_requests_ = NULL;
|
static strmap_t *last_hid_serv_requests_ = NULL;
|
||||||
|
|
||||||
/** Returns last_hid_serv_requests_, initializing it to a new strmap if
|
/** Returns last_hid_serv_requests_, initializing it to a new strmap if
|
||||||
|
@ -1453,14 +1453,13 @@ hs_purge_hid_serv_from_last_hid_serv_requests(const char *req_key_str)
|
||||||
/* XXX: The use of REND_DESC_ID_V2_LEN_BASE32 is very wrong in terms of
|
/* XXX: The use of REND_DESC_ID_V2_LEN_BASE32 is very wrong in terms of
|
||||||
* semantic, see #23305. */
|
* semantic, see #23305. */
|
||||||
|
|
||||||
/* Length check on the strings we are about to compare. The "key" contains
|
/* This strmap contains variable-sized elements so this is a basic length
|
||||||
* both the base32 HSDir identity digest and the requested key at the
|
* check on the strings we are about to compare. The key is variable sized
|
||||||
* directory. The "req_key_str" can either be a base32 descriptor ID or a
|
* since it's composed as follows:
|
||||||
* base64 blinded key which should be the second part of "key". BUG on
|
* key = base32(hsdir_identity) + base32(req_key_str)
|
||||||
* this check because both strings are internally controlled so this
|
* where 'req_key_str' is the descriptor ID of the HS in the v2 case, or
|
||||||
* should never happen. */
|
* the ed25519 blinded public key of the HS in the v3 case. */
|
||||||
if (BUG((strlen(req_key_str) + REND_DESC_ID_V2_LEN_BASE32) <
|
if (strlen(key) < REND_DESC_ID_V2_LEN_BASE32 + strlen(req_key_str)) {
|
||||||
strlen(key))) {
|
|
||||||
iter = strmap_iter_next(last_hid_serv_requests, iter);
|
iter = strmap_iter_next(last_hid_serv_requests, iter);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -703,13 +703,14 @@ test_hid_serv_request_tracker(void *arg)
|
||||||
{
|
{
|
||||||
(void) arg;
|
(void) arg;
|
||||||
time_t retval;
|
time_t retval;
|
||||||
routerstatus_t *hsdir = NULL, *hsdir2 = NULL;
|
routerstatus_t *hsdir = NULL, *hsdir2 = NULL, *hsdir3 = NULL;
|
||||||
time_t now = approx_time();
|
time_t now = approx_time();
|
||||||
|
|
||||||
const char *req_key_str_first =
|
const char *req_key_str_first =
|
||||||
"vd4zb6zesaubtrjvdqcr2w7x7lhw2up4Xnw4526ThUNbL5o1go+EdUuEqlKxHkNbnK41pRzizzs";
|
"vd4zb6zesaubtrjvdqcr2w7x7lhw2up4Xnw4526ThUNbL5o1go+EdUuEqlKxHkNbnK41pRzizzs";
|
||||||
const char *req_key_str_second =
|
const char *req_key_str_second =
|
||||||
"g53o7iavcd62oihswhr24u6czmqws5kpXnw4526ThUNbL5o1go+EdUuEqlKxHkNbnK41pRzizzs";
|
"g53o7iavcd62oihswhr24u6czmqws5kpXnw4526ThUNbL5o1go+EdUuEqlKxHkNbnK41pRzizzs";
|
||||||
|
const char *req_key_str_small = "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ";
|
||||||
|
|
||||||
/*************************** basic test *******************************/
|
/*************************** basic test *******************************/
|
||||||
|
|
||||||
|
@ -741,7 +742,7 @@ test_hid_serv_request_tracker(void *arg)
|
||||||
|
|
||||||
/* Let's add another request for the same HS but on a different HSDir. */
|
/* Let's add another request for the same HS but on a different HSDir. */
|
||||||
hsdir2 = tor_malloc_zero(sizeof(routerstatus_t));
|
hsdir2 = tor_malloc_zero(sizeof(routerstatus_t));
|
||||||
memset(hsdir->identity_digest, 2, DIGEST_LEN);
|
memset(hsdir2->identity_digest, 2, DIGEST_LEN);
|
||||||
retval = hs_lookup_last_hid_serv_request(hsdir2, req_key_str_first,
|
retval = hs_lookup_last_hid_serv_request(hsdir2, req_key_str_first,
|
||||||
now+3, 1);
|
now+3, 1);
|
||||||
tt_int_op(retval, OP_EQ, now+3);
|
tt_int_op(retval, OP_EQ, now+3);
|
||||||
|
@ -755,16 +756,25 @@ test_hid_serv_request_tracker(void *arg)
|
||||||
now+2, 0);
|
now+2, 0);
|
||||||
tt_int_op(retval, OP_EQ, 0);
|
tt_int_op(retval, OP_EQ, 0);
|
||||||
|
|
||||||
|
/* Now let's add a smaller req key str */
|
||||||
|
hsdir3 = tor_malloc_zero(sizeof(routerstatus_t));
|
||||||
|
memset(hsdir3->identity_digest, 3, DIGEST_LEN);
|
||||||
|
retval = hs_lookup_last_hid_serv_request(hsdir3, req_key_str_small,
|
||||||
|
now+4, 1);
|
||||||
|
tt_int_op(retval, OP_EQ, now+4);
|
||||||
|
tt_int_op(strmap_size(request_tracker),OP_EQ, 2);
|
||||||
|
|
||||||
/*************************** deleting entries **************************/
|
/*************************** deleting entries **************************/
|
||||||
|
|
||||||
/* Add another request with very short key */
|
/* Add another request with very short key */
|
||||||
retval = hs_lookup_last_hid_serv_request(hsdir, "l", now, 1);
|
retval = hs_lookup_last_hid_serv_request(hsdir, "l", now, 1);
|
||||||
|
tt_int_op(strmap_size(request_tracker),OP_EQ, 3);
|
||||||
|
|
||||||
/* Try deleting entries with a dummy key. Check that our previous requests
|
/* Try deleting entries with a dummy key. Check that our previous requests
|
||||||
* are still there */
|
* are still there */
|
||||||
tor_capture_bugs_(1);
|
tor_capture_bugs_(1);
|
||||||
hs_purge_hid_serv_from_last_hid_serv_requests("a");
|
hs_purge_hid_serv_from_last_hid_serv_requests("a");
|
||||||
tt_int_op(strmap_size(request_tracker),OP_EQ, 2);
|
tt_int_op(strmap_size(request_tracker),OP_EQ, 3);
|
||||||
tor_end_capture_bugs_();
|
tor_end_capture_bugs_();
|
||||||
|
|
||||||
/* Try another dummy key. Check that requests are still there */
|
/* Try another dummy key. Check that requests are still there */
|
||||||
|
@ -773,16 +783,16 @@ test_hid_serv_request_tracker(void *arg)
|
||||||
memset(dummy, 'Z', 2000);
|
memset(dummy, 'Z', 2000);
|
||||||
dummy[1999] = '\x00';
|
dummy[1999] = '\x00';
|
||||||
hs_purge_hid_serv_from_last_hid_serv_requests(dummy);
|
hs_purge_hid_serv_from_last_hid_serv_requests(dummy);
|
||||||
tt_int_op(strmap_size(request_tracker),OP_EQ, 2);
|
tt_int_op(strmap_size(request_tracker),OP_EQ, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Another dummy key! */
|
/* Another dummy key! */
|
||||||
hs_purge_hid_serv_from_last_hid_serv_requests(req_key_str_second);
|
hs_purge_hid_serv_from_last_hid_serv_requests(req_key_str_second);
|
||||||
tt_int_op(strmap_size(request_tracker),OP_EQ, 2);
|
tt_int_op(strmap_size(request_tracker),OP_EQ, 3);
|
||||||
|
|
||||||
/* Now actually delete a request! */
|
/* Now actually delete a request! */
|
||||||
hs_purge_hid_serv_from_last_hid_serv_requests(req_key_str_first);
|
hs_purge_hid_serv_from_last_hid_serv_requests(req_key_str_first);
|
||||||
tt_int_op(strmap_size(request_tracker),OP_EQ, 1);
|
tt_int_op(strmap_size(request_tracker),OP_EQ, 2);
|
||||||
|
|
||||||
/* Purge it all! */
|
/* Purge it all! */
|
||||||
hs_purge_last_hid_serv_requests();
|
hs_purge_last_hid_serv_requests();
|
||||||
|
@ -792,6 +802,7 @@ test_hid_serv_request_tracker(void *arg)
|
||||||
done:
|
done:
|
||||||
tor_free(hsdir);
|
tor_free(hsdir);
|
||||||
tor_free(hsdir2);
|
tor_free(hsdir2);
|
||||||
|
tor_free(hsdir3);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Add table
Reference in a new issue