mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
Use rend_data_client/service_create() in code
Every callsite that use to allocate a rend_data_t object now use the rend_data_client/service_create() function. Signed-off-by: David Goulet <dgoulet@ev0ke.net>
This commit is contained in:
parent
e6a581f126
commit
9a364026d3
@ -1499,12 +1499,27 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Look up if we have client authorization configured for this hidden
|
||||
* service. If we do, associate it with the rend_data. */
|
||||
rend_service_authorization_t *client_auth =
|
||||
rend_client_lookup_service_authorization(socks->address);
|
||||
|
||||
const char *cookie = NULL;
|
||||
rend_auth_type_t auth_type = REND_NO_AUTH;
|
||||
if (client_auth) {
|
||||
log_info(LD_REND, "Using previously configured client authorization "
|
||||
"for hidden service request.");
|
||||
auth_type = client_auth->auth_type;
|
||||
cookie = client_auth->descriptor_cookie;
|
||||
}
|
||||
|
||||
/* Fill in the rend_data field so we can start doing a connection to
|
||||
* a hidden service. */
|
||||
rend_data_t *rend_data = ENTRY_TO_EDGE_CONN(conn)->rend_data =
|
||||
tor_malloc_zero(sizeof(rend_data_t));
|
||||
strlcpy(rend_data->onion_address, socks->address,
|
||||
sizeof(rend_data->onion_address));
|
||||
rend_data_client_create(socks->address, NULL, cookie, auth_type);
|
||||
if (rend_data == NULL) {
|
||||
return -1;
|
||||
}
|
||||
log_info(LD_REND,"Got a hidden service request for ID '%s'",
|
||||
safe_str_client(rend_data->onion_address));
|
||||
|
||||
@ -1547,19 +1562,6 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Look up if we have client authorization configured for this hidden
|
||||
* service. If we do, associate it with the rend_data. */
|
||||
rend_service_authorization_t *client_auth =
|
||||
rend_client_lookup_service_authorization(
|
||||
rend_data->onion_address);
|
||||
if (client_auth) {
|
||||
log_info(LD_REND, "Using previously configured client authorization "
|
||||
"for hidden service request.");
|
||||
memcpy(rend_data->descriptor_cookie,
|
||||
client_auth->descriptor_cookie, REND_DESC_COOKIE_LEN);
|
||||
rend_data->auth_type = client_auth->auth_type;
|
||||
}
|
||||
|
||||
/* We have the descriptor so launch a connection to the HS. */
|
||||
base_conn->state = AP_CONN_STATE_CIRCUIT_WAIT;
|
||||
log_info(LD_REND, "Descriptor is here. Great.");
|
||||
|
@ -3389,25 +3389,21 @@ handle_control_hsfetch(control_connection_t *conn, uint32_t len,
|
||||
}
|
||||
}
|
||||
|
||||
rend_query = tor_malloc_zero(sizeof(*rend_query));
|
||||
rend_query = rend_data_client_create(hsaddress, desc_id, NULL,
|
||||
REND_NO_AUTH);
|
||||
if (rend_query == NULL) {
|
||||
connection_printf_to_buf(conn, "551 Error creating the HS query\r\n");
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (hsaddress) {
|
||||
strncpy(rend_query->onion_address, hsaddress,
|
||||
sizeof(rend_query->onion_address));
|
||||
} else if (desc_id) {
|
||||
/* Using a descriptor ID, we force the user to provide at least one
|
||||
* hsdir server using the SERVER= option. */
|
||||
if (!hsdirs || !smartlist_len(hsdirs)) {
|
||||
if (desc_id && (!hsdirs || !smartlist_len(hsdirs))) {
|
||||
connection_printf_to_buf(conn, "512 %s option is required\r\n",
|
||||
opt_server);
|
||||
goto done;
|
||||
}
|
||||
memcpy(rend_query->descriptor_id, desc_id,
|
||||
sizeof(rend_query->descriptor_id));
|
||||
} else {
|
||||
/* We can't get in here because of the first argument check. */
|
||||
tor_assert(0);
|
||||
}
|
||||
|
||||
/* We are about to trigger HSDir fetch so send the OK now because after
|
||||
* that 650 event(s) are possible so better to have the 250 OK before them
|
||||
* to avoid out of order replies. */
|
||||
@ -3423,7 +3419,7 @@ done:
|
||||
smartlist_free(args);
|
||||
/* Contains data pointer that we don't own thus no cleanup. */
|
||||
smartlist_free(hsdirs);
|
||||
tor_free(rend_query);
|
||||
rend_data_free(rend_query);
|
||||
exit:
|
||||
return 0;
|
||||
}
|
||||
|
@ -1735,13 +1735,11 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
|
||||
hexcookie, serviceid);
|
||||
tor_assert(launched->build_state);
|
||||
/* Fill in the circuit's state. */
|
||||
launched->rend_data = tor_malloc_zero(sizeof(rend_data_t));
|
||||
memcpy(launched->rend_data->rend_pk_digest,
|
||||
|
||||
launched->rend_data =
|
||||
rend_data_service_create(service->service_id,
|
||||
circuit->rend_data->rend_pk_digest,
|
||||
DIGEST_LEN);
|
||||
memcpy(launched->rend_data->rend_cookie, parsed_req->rc, REND_COOKIE_LEN);
|
||||
strlcpy(launched->rend_data->onion_address, service->service_id,
|
||||
sizeof(launched->rend_data->onion_address));
|
||||
parsed_req->rc, service->auth_type);
|
||||
|
||||
launched->build_state->service_pending_final_cpath_ref =
|
||||
tor_malloc_zero(sizeof(crypt_path_reference_t));
|
||||
@ -2713,10 +2711,9 @@ rend_service_launch_establish_intro(rend_service_t *service,
|
||||
intro->extend_info = extend_info_dup(launched->build_state->chosen_exit);
|
||||
}
|
||||
|
||||
launched->rend_data = tor_malloc_zero(sizeof(rend_data_t));
|
||||
strlcpy(launched->rend_data->onion_address, service->service_id,
|
||||
sizeof(launched->rend_data->onion_address));
|
||||
memcpy(launched->rend_data->rend_pk_digest, service->pk_digest, DIGEST_LEN);
|
||||
launched->rend_data = rend_data_service_create(service->service_id,
|
||||
service->pk_digest, NULL,
|
||||
service->auth_type);
|
||||
launched->intro_key = crypto_pk_dup_key(intro->intro_key);
|
||||
if (launched->base_.state == CIRCUIT_STATE_OPEN)
|
||||
rend_service_intro_has_opened(launched);
|
||||
|
Loading…
Reference in New Issue
Block a user