]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
bwauth: Allow "node_id" KeyValue without "$"
authorjuga <juga@riseup.net>
Sat, 18 Nov 2023 17:45:28 +0000 (17:45 +0000)
committerDavid Goulet <dgoulet@torproject.org>
Tue, 30 Jan 2024 15:47:13 +0000 (10:47 -0500)
Allow "node_id" KeyValue without the dollar sign at the start of the
hexdigit in the BandwidthFiles, in order to easier database queries
combining Tor documents in which the relays fingerprint doesn't
include it.
Bugfix on all supported versions of Tor.

Closes #40891

changes/ticket40891 [new file with mode: 0644]
src/feature/dirauth/bwauth.c
src/test/test_dir.c

diff --git a/changes/ticket40891 b/changes/ticket40891
new file mode 100644 (file)
index 0000000..c0e2080
--- /dev/null
@@ -0,0 +1,5 @@
+  o Minor feature (directory authority):
+    - Allow BandwidthFiles "node_id" KeyValue without the dollar sign at the
+      start of the hexdigit, in order to easier database queries combining
+      Tor documents in which the relays fingerprint does not include it.
+      Fixes bug 40891; bugfix on 0.4.7 (all supported versions of Tor).
index 90b425842a19336df7f02327cfee6fe21f5a9e91..b5b1081e476ea4d5084f5ebddc08c81447e44ced 100644 (file)
@@ -434,15 +434,19 @@ measured_bw_line_parse(measured_bw_line_t *out, const char *orig_line,
         return -1;
       }
       got_bw=1;
-    } else if (strcmpstart(cp, "node_id=$") == 0) {
+    // Allow node_id to start with or without the dollar sign.
+    } else if (strcmpstart(cp, "node_id=") == 0) {
       if (got_node_id) {
         log_warn(LD_DIRSERV, "Double node_id= in bandwidth file line: %s",
                  escaped(orig_line));
         tor_free(line);
         return -1;
       }
-      cp+=strlen("node_id=$");
-
+      if (strcmpstart(cp, "node_id=$") == 0) {
+        cp+=strlen("node_id=$");
+      } else if (strcmpstart(cp, "node_id=") == 0) {
+        cp+=strlen("node_id=");
+      }
       if (strlen(cp) != HEX_DIGEST_LEN ||
           base16_decode(out->node_id, DIGEST_LEN,
                         cp, HEX_DIGEST_LEN) != DIGEST_LEN) {
index 248fd8ab5dbb2df300488da98dd9b47c8a0b65e7..4ecf31038e1dcc7c9230ebd2682e9bb81f4e0327 100644 (file)
@@ -2072,6 +2072,8 @@ test_dir_measured_bw_kb(void *arg)
   int i;
   const char *lines_pass[] = {
     "node_id=$557365204145532d32353620696e73746561642e bw=1024\n",
+    /* check whether node_id does not need the dollar sign at the start */
+    "node_id=557365204145532d32353620696e73746561642e bw=1024\n",
     "node_id=$557365204145532d32353620696e73746561642e\t  bw=1024 \n",
     " node_id=$557365204145532d32353620696e73746561642e  bw=1024\n",
     "\tnoise\tnode_id=$557365204145532d32353620696e73746561642e  "
@@ -2129,7 +2131,6 @@ test_dir_measured_bw_kb(void *arg)
     " node_id= ",
     "node_id==$557365204145532d32353620696e73746561642e bw==1024\n",
     "node_id=$55736520414552d32353620696e73746561642e bw=1024\n",
-    "node_id=557365204145532d32353620696e73746561642e bw=1024\n",
     "node_id= $557365204145532d32353620696e73746561642e bw=0.23\n",
 
     /* Test that a line with vote=0 will fail too, so that it is ignored. */