Browse Source

config: Make parse_outbound_addresses() return failures

The function was never returning an error code on failure to parse the
OutboundAddress* options.

In the process, it was making our test_options_validate__outbound_addresses()
not test the right thing.

Fixes #23366

Signed-off-by: David Goulet <dgoulet@torproject.org>
David Goulet 6 years ago
parent
commit
651629cbdf
3 changed files with 27 additions and 6 deletions
  1. 4 0
      changes/bug23366
  2. 21 6
      src/or/config.c
  3. 2 0
      src/test/test_options.c

+ 4 - 0
changes/bug23366

@@ -0,0 +1,4 @@
+  o Minor bugfixes (test):
+    - Fix a broken OutboundAddress option unit test because the parsing
+      function was never returning an error on failure. Fixes bug #23366.;
+      bugfix on tor-0.3.0.3-alpha.

+ 21 - 6
src/or/config.c

@@ -7921,13 +7921,28 @@ parse_outbound_addresses(or_options_t *options, int validate_only, char **msg)
     memset(&options->OutboundBindAddresses, 0,
            sizeof(options->OutboundBindAddresses));
   }
-  parse_outbound_address_lines(options->OutboundBindAddress,
-                      OUTBOUND_ADDR_EXIT_AND_OR, options, validate_only, msg);
-  parse_outbound_address_lines(options->OutboundBindAddressOR,
-                      OUTBOUND_ADDR_OR, options, validate_only, msg);
-  parse_outbound_address_lines(options->OutboundBindAddressExit,
-                      OUTBOUND_ADDR_EXIT, options, validate_only, msg);
+
+  if (parse_outbound_address_lines(options->OutboundBindAddress,
+                                   OUTBOUND_ADDR_EXIT_AND_OR, options,
+                                   validate_only, msg) < 0) {
+    goto err;
+  }
+
+  if (parse_outbound_address_lines(options->OutboundBindAddressOR,
+                                   OUTBOUND_ADDR_OR, options, validate_only,
+                                   msg) < 0) {
+    goto err;
+  }
+
+  if (parse_outbound_address_lines(options->OutboundBindAddressExit,
+                                   OUTBOUND_ADDR_EXIT, options, validate_only,
+                                   msg)  < 0) {
+    goto err;
+  }
+
   return 0;
+ err:
+  return -1;
 }
 
 /** Load one of the geoip files, <a>family</a> determining which

+ 2 - 0
src/test/test_options.c

@@ -528,6 +528,8 @@ test_options_validate__outbound_addresses(void *ignored)
 
   ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg);
   tt_int_op(ret, OP_EQ, -1);
+  tt_str_op(msg, OP_EQ, "Multiple outbound bind addresses configured: "
+                        "xxyy!!!sdfaf");
 
  done:
   free_options_test_data(tdata);