Commit 6fb27741 authored by Roger Dingledine's avatar Roger Dingledine
Browse files

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
parent e754664d
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -1509,11 +1509,8 @@ handle_getinfo_helper(const char *question, char **answer)
    if (!get_options()->DirPort)
      return 0;
    status_list = smartlist_create();
    if (!dirserv_get_networkstatus_v2(status_list,
                                      question+strlen("dir/status/"))) {
      smartlist_free(status_list);
      return 0;
    }
    dirserv_get_networkstatus_v2(status_list,
                                 question+strlen("dir/status/"));
    len = 0;
    SMARTLIST_FOREACH(status_list, cached_dir_t *, d, len += d->dir_len);
    cp = *answer = tor_malloc(len+1);
+1 −4
Original line number Diff line number Diff line
@@ -1430,10 +1430,7 @@ directory_handle_command_get(connection_t *conn, char *headers,
    const char *key = url + strlen("/tor/status/");
    if (deflated)
      url[url_len-2] = '\0';
    if (dirserv_get_networkstatus_v2(dir_objs, key)) {
      smartlist_free(dir_objs);
      return 0;
    }
    dirserv_get_networkstatus_v2(dir_objs, key);
    if (!strcmpstart(key, "fp/"))
      request_type = deflated?"/tor/status/fp.z":"/tor/status/fp";
    else if (!strcmpstart(key, "authority"))
+3 −7
Original line number Diff line number Diff line
@@ -1454,12 +1454,9 @@ generate_v2_networkstatus(void)
/** 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
 * identity digest (to find a network status generated by given directory), or
 * "all" (to return all the v2 network status objects we have, concatenated).
 * 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.
 * "all" (to return all the v2 network status objects we have).
 */
int
void
dirserv_get_networkstatus_v2(smartlist_t *result,
                             const char *key)
{
@@ -1468,7 +1465,7 @@ dirserv_get_networkstatus_v2(smartlist_t *result,
  if (!cached_v2_networkstatus)
    cached_v2_networkstatus = digestmap_new();

  if (!(strcmp(key,"authority"))) {
  if (!strcmp(key,"authority")) {
    if (get_options()->AuthoritativeDir) {
      cached_dir_t *d =
        dirserv_pick_cached_dir_obj(NULL,
@@ -1518,7 +1515,6 @@ dirserv_get_networkstatus_v2(smartlist_t *result,
        });
    smartlist_free(digests);
  }
  return 0;
}

/** Add a signed_descriptor_t to <b>descs_out</b> for each router matching
+1 −1
Original line number Diff line number Diff line
@@ -1924,7 +1924,7 @@ void dirserv_set_cached_directory(const char *directory, time_t when,
void dirserv_set_cached_networkstatus_v2(const char *directory,
                                         const char *identity,
                                         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,
                            const char **msg);
void dirserv_orconn_tls_done(const char *address,