[tor-commits] [tor/master] Add GETINFO md/id/* and md/name/* items for relay microdescs

nickm at torproject.org nickm at torproject.org
Tue Nov 8 22:57:18 UTC 2011


commit ef2b0bd528880ec7b1a56a79a988a1e92fbb1b15
Author: Robert Ransom <rransom.8774 at gmail.com>
Date:   Mon Nov 7 15:32:33 2011 -0800

    Add GETINFO md/id/* and md/name/* items for relay microdescs
---
 changes/bug3832  |    9 +++++++++
 src/or/control.c |   18 ++++++++++++++++++
 2 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/changes/bug3832 b/changes/bug3832
new file mode 100644
index 0000000..230f0d7
--- /dev/null
+++ b/changes/bug3832
@@ -0,0 +1,9 @@
+  o Major features:
+
+    - Allow Tor controllers like Vidalia to obtain the microdescriptor
+      for a relay by identity digest or nickname.  Previously,
+      microdescriptors were only available by their own digests, so a
+      controller would have to ask for and parse the whole
+      microdescriptor consensus in order to look up a single relay's
+      microdesc.  Fixes bug 3832; bugfix on 0.2.3.1-alpha.
+
diff --git a/src/or/control.c b/src/or/control.c
index 1fdbac2..52af4a0 100644
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -1640,6 +1640,22 @@ getinfo_helper_dir(control_connection_t *control_conn,
     *answer = smartlist_join_strings(sl, "", 0, NULL);
     SMARTLIST_FOREACH(sl, char *, c, tor_free(c));
     smartlist_free(sl);
+  } else if (!strcmpstart(question, "md/id/")) {
+    const node_t *node = node_get_by_hex_id(question+strlen("md/id/"));
+    const microdesc_t *md = NULL;
+    if (node) md = node->md;
+    if (md) {
+      tor_assert(md->body);
+      *answer = tor_strndup(md->body, md->bodylen);
+    }
+  } else if (!strcmpstart(question, "md/name/")) {
+    const node_t *node = node_get_by_nickname(question+strlen("md/name/"), 1);
+    const microdesc_t *md = NULL;
+    if (node) md = node->md;
+    if (md) {
+      tor_assert(md->body);
+      *answer = tor_strndup(md->body, md->bodylen);
+    }
   } else if (!strcmpstart(question, "desc-annotations/id/")) {
     ri = router_get_by_hexdigest(question+
                                  strlen("desc-annotations/id/"));
@@ -2034,6 +2050,8 @@ static const getinfo_item_t getinfo_items[] = {
   ITEM("desc/all-recent", dir,
        "All non-expired, non-superseded router descriptors."),
   ITEM("desc/all-recent-extrainfo-hack", dir, NULL), /* Hack. */
+  PREFIX("md/id/", dir, "Microdescriptors by ID"),
+  PREFIX("md/name/", dir, "Microdescriptors by name"),
   PREFIX("extra-info/digest/", dir, "Extra-info documents by digest."),
   PREFIX("net/listeners/", listeners, "Bound addresses by type"),
   ITEM("ns/all", networkstatus,





More information about the tor-commits mailing list