mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 14:23:30 +01:00
Fix dirserv_get_networkstatus_v2's api: its function comments
did not at all match its behavior, and I can't think of a case when it should return anything other than 0. This fix may allow getinfo dir/status/foo to work. svn:r6285
This commit is contained in:
parent
e754664d62
commit
6fb27741ba
@ -1509,11 +1509,8 @@ handle_getinfo_helper(const char *question, char **answer)
|
|||||||
if (!get_options()->DirPort)
|
if (!get_options()->DirPort)
|
||||||
return 0;
|
return 0;
|
||||||
status_list = smartlist_create();
|
status_list = smartlist_create();
|
||||||
if (!dirserv_get_networkstatus_v2(status_list,
|
dirserv_get_networkstatus_v2(status_list,
|
||||||
question+strlen("dir/status/"))) {
|
question+strlen("dir/status/"));
|
||||||
smartlist_free(status_list);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
len = 0;
|
len = 0;
|
||||||
SMARTLIST_FOREACH(status_list, cached_dir_t *, d, len += d->dir_len);
|
SMARTLIST_FOREACH(status_list, cached_dir_t *, d, len += d->dir_len);
|
||||||
cp = *answer = tor_malloc(len+1);
|
cp = *answer = tor_malloc(len+1);
|
||||||
|
@ -1430,10 +1430,7 @@ directory_handle_command_get(connection_t *conn, char *headers,
|
|||||||
const char *key = url + strlen("/tor/status/");
|
const char *key = url + strlen("/tor/status/");
|
||||||
if (deflated)
|
if (deflated)
|
||||||
url[url_len-2] = '\0';
|
url[url_len-2] = '\0';
|
||||||
if (dirserv_get_networkstatus_v2(dir_objs, key)) {
|
dirserv_get_networkstatus_v2(dir_objs, key);
|
||||||
smartlist_free(dir_objs);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (!strcmpstart(key, "fp/"))
|
if (!strcmpstart(key, "fp/"))
|
||||||
request_type = deflated?"/tor/status/fp.z":"/tor/status/fp";
|
request_type = deflated?"/tor/status/fp.z":"/tor/status/fp";
|
||||||
else if (!strcmpstart(key, "authority"))
|
else if (!strcmpstart(key, "authority"))
|
||||||
|
@ -1454,12 +1454,9 @@ generate_v2_networkstatus(void)
|
|||||||
/** Look for a network status object as specified by <b>key</b>, which should
|
/** Look for a network status object as specified by <b>key</b>, which should
|
||||||
* be either "authority" (to find a network status generated by us), a hex
|
* be either "authority" (to find a network status generated by us), a hex
|
||||||
* identity digest (to find a network status generated by given directory), or
|
* identity digest (to find a network status generated by given directory), or
|
||||||
* "all" (to return all the v2 network status objects we have, concatenated).
|
* "all" (to return all the v2 network status objects we have).
|
||||||
* If <b>compress</b>, find the version compressed with zlib. Return 0 if
|
|
||||||
* nothing was found; otherwise set *<b>directory</b> to the matching network
|
|
||||||
* status and return its length.
|
|
||||||
*/
|
*/
|
||||||
int
|
void
|
||||||
dirserv_get_networkstatus_v2(smartlist_t *result,
|
dirserv_get_networkstatus_v2(smartlist_t *result,
|
||||||
const char *key)
|
const char *key)
|
||||||
{
|
{
|
||||||
@ -1468,7 +1465,7 @@ dirserv_get_networkstatus_v2(smartlist_t *result,
|
|||||||
if (!cached_v2_networkstatus)
|
if (!cached_v2_networkstatus)
|
||||||
cached_v2_networkstatus = digestmap_new();
|
cached_v2_networkstatus = digestmap_new();
|
||||||
|
|
||||||
if (!(strcmp(key,"authority"))) {
|
if (!strcmp(key,"authority")) {
|
||||||
if (get_options()->AuthoritativeDir) {
|
if (get_options()->AuthoritativeDir) {
|
||||||
cached_dir_t *d =
|
cached_dir_t *d =
|
||||||
dirserv_pick_cached_dir_obj(NULL,
|
dirserv_pick_cached_dir_obj(NULL,
|
||||||
@ -1518,7 +1515,6 @@ dirserv_get_networkstatus_v2(smartlist_t *result,
|
|||||||
});
|
});
|
||||||
smartlist_free(digests);
|
smartlist_free(digests);
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Add a signed_descriptor_t to <b>descs_out</b> for each router matching
|
/** Add a signed_descriptor_t to <b>descs_out</b> for each router matching
|
||||||
|
@ -1924,7 +1924,7 @@ void dirserv_set_cached_directory(const char *directory, time_t when,
|
|||||||
void dirserv_set_cached_networkstatus_v2(const char *directory,
|
void dirserv_set_cached_networkstatus_v2(const char *directory,
|
||||||
const char *identity,
|
const char *identity,
|
||||||
time_t published);
|
time_t published);
|
||||||
int dirserv_get_networkstatus_v2(smartlist_t *result, const char *key);
|
void dirserv_get_networkstatus_v2(smartlist_t *result, const char *key);
|
||||||
int dirserv_get_routerdescs(smartlist_t *descs_out, const char *key,
|
int dirserv_get_routerdescs(smartlist_t *descs_out, const char *key,
|
||||||
const char **msg);
|
const char **msg);
|
||||||
void dirserv_orconn_tls_done(const char *address,
|
void dirserv_orconn_tls_done(const char *address,
|
||||||
|
Loading…
Reference in New Issue
Block a user