mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-27 22:03:31 +01:00
Ticket #21329: GETINFO onions/current returns empty list
If there are no ephemeral or detached onion services, then "GETINFO onions/current" or "GETINFO onions/detached" should return an empty list instead of an error
This commit is contained in:
parent
67eb6470d7
commit
fc58c37e33
3
changes/bug21329
Normal file
3
changes/bug21329
Normal file
@ -0,0 +1,3 @@
|
||||
o Minor bugfixes (controller):
|
||||
- GETINFO onions/current and onions/detached no longer 551 on empty lists
|
||||
Fixes bug 21329
|
@ -2824,12 +2824,13 @@ getinfo_helper_events(control_connection_t *control_conn,
|
||||
|
||||
/** Implementation helper for GETINFO: knows how to enumerate hidden services
|
||||
* created via the control port. */
|
||||
static int
|
||||
STATIC int
|
||||
getinfo_helper_onions(control_connection_t *control_conn,
|
||||
const char *question, char **answer,
|
||||
const char **errmsg)
|
||||
{
|
||||
smartlist_t *onion_list = NULL;
|
||||
(void) errmsg; /* no errors from this method */
|
||||
|
||||
if (control_conn && !strcmp(question, "onions/current")) {
|
||||
onion_list = control_conn->ephemeral_onion_services;
|
||||
@ -2839,13 +2840,13 @@ getinfo_helper_onions(control_connection_t *control_conn,
|
||||
return 0;
|
||||
}
|
||||
if (!onion_list || smartlist_len(onion_list) == 0) {
|
||||
if (errmsg) {
|
||||
*errmsg = "No onion services of the specified type.";
|
||||
if (answer) {
|
||||
*answer = tor_strdup("");
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
if (answer) {
|
||||
} else {
|
||||
if (answer) {
|
||||
*answer = smartlist_join_strings(onion_list, "\r\n", 0, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -262,6 +262,11 @@ STATIC crypto_pk_t *add_onion_helper_keyarg(const char *arg, int discard_pk,
|
||||
STATIC rend_authorized_client_t *
|
||||
add_onion_helper_clientauth(const char *arg, int *created, char **err_msg_out);
|
||||
|
||||
STATIC int getinfo_helper_onions(
|
||||
control_connection_t *control_conn,
|
||||
const char *question,
|
||||
char **answer,
|
||||
const char **errmsg);
|
||||
STATIC void getinfo_helper_downloads_networkstatus(
|
||||
const char *flavor,
|
||||
download_status_t **dl_to_emit,
|
||||
|
@ -108,6 +108,44 @@ test_add_onion_helper_keyarg(void *arg)
|
||||
tor_free(arg_str);
|
||||
}
|
||||
|
||||
static void
|
||||
test_getinfo_helper_onion(void *arg)
|
||||
{
|
||||
(void)arg;
|
||||
control_connection_t dummy;
|
||||
/* Get results out */
|
||||
char *answer = NULL;
|
||||
const char *errmsg = NULL;
|
||||
char *service_id = NULL;
|
||||
int rt = 0;
|
||||
|
||||
dummy.ephemeral_onion_services = NULL;
|
||||
|
||||
/* successfully get an empty answer */
|
||||
rt = getinfo_helper_onions(&dummy, "onions/current", &answer, &errmsg);
|
||||
tt_assert(rt == 0);
|
||||
tt_str_op(answer, OP_EQ, "");
|
||||
tor_free(answer);
|
||||
|
||||
/* successfully get an empty answer */
|
||||
rt = getinfo_helper_onions(&dummy, "onions/detached", &answer, &errmsg);
|
||||
tt_assert(rt == 0);
|
||||
tt_str_op(answer, OP_EQ, "");
|
||||
tor_free(answer);
|
||||
|
||||
/* get an answer for one onion service */
|
||||
service_id = tor_strdup("dummy_onion_id");
|
||||
dummy.ephemeral_onion_services = smartlist_new();
|
||||
smartlist_add(dummy.ephemeral_onion_services, service_id);
|
||||
rt = getinfo_helper_onions(&dummy, "onions/current", &answer, &errmsg);
|
||||
tt_assert(rt == 0);
|
||||
tt_str_op(answer, OP_EQ, "dummy_onion_id");
|
||||
|
||||
done:
|
||||
tor_free(answer);
|
||||
tor_free(service_id);
|
||||
}
|
||||
|
||||
static void
|
||||
test_rend_service_parse_port_config(void *arg)
|
||||
{
|
||||
@ -1332,6 +1370,7 @@ test_download_status_bridge(void *arg)
|
||||
|
||||
struct testcase_t controller_tests[] = {
|
||||
{ "add_onion_helper_keyarg", test_add_onion_helper_keyarg, 0, NULL, NULL },
|
||||
{ "getinfo_helper_onion", test_getinfo_helper_onion, 0, NULL, NULL },
|
||||
{ "rend_service_parse_port_config", test_rend_service_parse_port_config, 0,
|
||||
NULL, NULL },
|
||||
{ "add_onion_helper_clientauth", test_add_onion_helper_clientauth, 0, NULL,
|
||||
|
Loading…
Reference in New Issue
Block a user