]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Stricter HiddenServicePort parsing
authorrl1987 <rl1987@sdf.lonestar.org>
Tue, 28 Aug 2018 15:32:31 +0000 (18:32 +0300)
committerrl1987 <rl1987@sdf.lonestar.org>
Tue, 28 Aug 2018 15:32:31 +0000 (18:32 +0300)
changes/bug27044 [new file with mode: 0644]
src/feature/rend/rendservice.c
src/test/test_controller.c
src/test/test_hs_config.c

diff --git a/changes/bug27044 b/changes/bug27044
new file mode 100644 (file)
index 0000000..0ce9c48
--- /dev/null
@@ -0,0 +1,5 @@
+  o Minor bugfixes (configuration, Onion Services):
+    - In rend_service_parse_port_config(), disallow any input to
+      remain after address-port pair was parsed. This will catch
+      address and port being whitespace-separated by mistake of
+      the user. Fixes bug 27044; bugfix on 0.2.9.10.
index 1a99bd56edce9099beeac6a7eddad599a85c842c..beb0040e5fd51d55f2e6e4eed7940ef85d3862c5 100644 (file)
@@ -451,11 +451,19 @@ rend_service_parse_port_config(const char *string, const char *sep,
     int is_unix;
     ret = port_cfg_line_extract_addrport(addrport_element, &addrport,
                                          &is_unix, &rest);
+
     if (ret < 0) {
       tor_asprintf(&err_msg, "Couldn't process address <%s> from hidden "
                    "service configuration", addrport_element);
       goto err;
     }
+
+    if (rest && strlen(rest)) {
+      err_msg = tor_strdup("HiddenServicePort parse error: invalid port "
+                           "mapping");
+      goto err;
+    }
+
     if (is_unix) {
       socket_path = addrport;
       is_unix_addr = 1;
index d0aa86844899b6bea86d4d5585c5392a36c41afd..7cdd435faabe11437f0cf61d350841772738d951 100644 (file)
@@ -346,6 +346,13 @@ test_rend_service_parse_port_config(void *arg)
             "in hidden service port configuration.");
   tor_free(err_msg);
 
+  /* Wrong target address and port separation */
+  cfg = rend_service_parse_port_config("80,127.0.0.1 1234", sep,
+                                       &err_msg);
+  tt_ptr_op(cfg, OP_EQ, NULL);
+  tt_assert(err_msg);
+  tor_free(err_msg);
+
  done:
   rend_service_port_config_free(cfg);
   tor_free(err_msg);
index 498d2df197bdf86c0ca9c0c001e1aa1f42e45fce..553b96758a085cb78f85663c42e600e0ac1621fd 100644 (file)
@@ -139,6 +139,20 @@ test_invalid_service(void *arg)
     teardown_capture_of_logs();
   }
 
+  /* Bad target addr:port separation. */
+  {
+    const char *conf =
+      "HiddenServiceDir /tmp/tor-test-hs-RANDOM/hs1\n"
+      "HiddenServiceVersion 2\n"
+      "HiddenServicePort 80 127.0.0.1 8000\n";
+    setup_full_capture_of_logs(LOG_WARN);
+    ret = helper_config_service(conf, 1);
+    tt_int_op(ret, OP_EQ, -1);
+    expect_log_msg_containing("HiddenServicePort parse error: "
+                              "invalid port mapping");
+    teardown_capture_of_logs();
+  }
+
   /* Out of order directives. */
   {
     const char *conf =