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:
David Goulet 2015-04-27 15:08:31 -04:00 committed by Nick Mathewson
parent e6a581f126
commit 9a364026d3
3 changed files with 37 additions and 42 deletions

View File

@ -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.");

View File

@ -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;
} }

View File

@ -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);