mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-11 05:33:47 +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;
|
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
|
/* Fill in the rend_data field so we can start doing a connection to
|
||||||
* a hidden service. */
|
* a hidden service. */
|
||||||
rend_data_t *rend_data = ENTRY_TO_EDGE_CONN(conn)->rend_data =
|
rend_data_t *rend_data = ENTRY_TO_EDGE_CONN(conn)->rend_data =
|
||||||
tor_malloc_zero(sizeof(rend_data_t));
|
rend_data_client_create(socks->address, NULL, cookie, auth_type);
|
||||||
strlcpy(rend_data->onion_address, socks->address,
|
if (rend_data == NULL) {
|
||||||
sizeof(rend_data->onion_address));
|
return -1;
|
||||||
|
}
|
||||||
log_info(LD_REND,"Got a hidden service request for ID '%s'",
|
log_info(LD_REND,"Got a hidden service request for ID '%s'",
|
||||||
safe_str_client(rend_data->onion_address));
|
safe_str_client(rend_data->onion_address));
|
||||||
|
|
||||||
@ -1547,19 +1562,6 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
|
|||||||
return 0;
|
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. */
|
/* We have the descriptor so launch a connection to the HS. */
|
||||||
base_conn->state = AP_CONN_STATE_CIRCUIT_WAIT;
|
base_conn->state = AP_CONN_STATE_CIRCUIT_WAIT;
|
||||||
log_info(LD_REND, "Descriptor is here. Great.");
|
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
|
/* Using a descriptor ID, we force the user to provide at least one
|
||||||
* hsdir server using the SERVER= option. */
|
* 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",
|
connection_printf_to_buf(conn, "512 %s option is required\r\n",
|
||||||
opt_server);
|
opt_server);
|
||||||
goto done;
|
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
|
/* 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
|
* that 650 event(s) are possible so better to have the 250 OK before them
|
||||||
* to avoid out of order replies. */
|
* to avoid out of order replies. */
|
||||||
@ -3423,7 +3419,7 @@ done:
|
|||||||
smartlist_free(args);
|
smartlist_free(args);
|
||||||
/* Contains data pointer that we don't own thus no cleanup. */
|
/* Contains data pointer that we don't own thus no cleanup. */
|
||||||
smartlist_free(hsdirs);
|
smartlist_free(hsdirs);
|
||||||
tor_free(rend_query);
|
rend_data_free(rend_query);
|
||||||
exit:
|
exit:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1735,13 +1735,11 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
|
|||||||
hexcookie, serviceid);
|
hexcookie, serviceid);
|
||||||
tor_assert(launched->build_state);
|
tor_assert(launched->build_state);
|
||||||
/* Fill in the circuit's 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,
|
circuit->rend_data->rend_pk_digest,
|
||||||
DIGEST_LEN);
|
parsed_req->rc, service->auth_type);
|
||||||
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));
|
|
||||||
|
|
||||||
launched->build_state->service_pending_final_cpath_ref =
|
launched->build_state->service_pending_final_cpath_ref =
|
||||||
tor_malloc_zero(sizeof(crypt_path_reference_t));
|
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);
|
intro->extend_info = extend_info_dup(launched->build_state->chosen_exit);
|
||||||
}
|
}
|
||||||
|
|
||||||
launched->rend_data = tor_malloc_zero(sizeof(rend_data_t));
|
launched->rend_data = rend_data_service_create(service->service_id,
|
||||||
strlcpy(launched->rend_data->onion_address, service->service_id,
|
service->pk_digest, NULL,
|
||||||
sizeof(launched->rend_data->onion_address));
|
service->auth_type);
|
||||||
memcpy(launched->rend_data->rend_pk_digest, service->pk_digest, DIGEST_LEN);
|
|
||||||
launched->intro_key = crypto_pk_dup_key(intro->intro_key);
|
launched->intro_key = crypto_pk_dup_key(intro->intro_key);
|
||||||
if (launched->base_.state == CIRCUIT_STATE_OPEN)
|
if (launched->base_.state == CIRCUIT_STATE_OPEN)
|
||||||
rend_service_intro_has_opened(launched);
|
rend_service_intro_has_opened(launched);
|
||||||
|
Loading…
Reference in New Issue
Block a user