relay: Simplify some relay_config code

Part of 32213.
This commit is contained in:
teor 2019-10-31 12:19:56 +10:00
parent d3c8486724
commit 4d9a5c77f8

View File

@ -242,6 +242,7 @@ parse_ports_relay(or_options_t *options,
{
int retval = -1;
smartlist_t *ports = smartlist_new();
int n_low_ports = 0;
if (BUG(!options))
goto err;
@ -255,40 +256,40 @@ parse_ports_relay(or_options_t *options,
if (BUG(!have_low_ports_out))
goto err;
if (! options->ClientOnly) {
if (parse_port_config(ports,
options->ORPort_lines,
"OR", CONN_TYPE_OR_LISTENER,
"0.0.0.0", 0,
CL_PORT_SERVER_OPTIONS) < 0) {
*msg = tor_strdup("Invalid ORPort configuration");
goto err;
}
if (parse_port_config(ports,
options->ExtORPort_lines,
"ExtOR", CONN_TYPE_EXT_OR_LISTENER,
"127.0.0.1", 0,
CL_PORT_SERVER_OPTIONS|CL_PORT_WARN_NONLOCAL) < 0) {
*msg = tor_strdup("Invalid ExtORPort configuration");
goto err;
}
if (parse_port_config(ports,
options->DirPort_lines,
"Dir", CONN_TYPE_DIR_LISTENER,
"0.0.0.0", 0,
CL_PORT_SERVER_OPTIONS) < 0) {
*msg = tor_strdup("Invalid DirPort configuration");
goto err;
}
if (options->ClientOnly) {
retval = 0;
goto err;
}
if (parse_port_config(ports,
options->ORPort_lines,
"OR", CONN_TYPE_OR_LISTENER,
"0.0.0.0", 0,
CL_PORT_SERVER_OPTIONS) < 0) {
*msg = tor_strdup("Invalid ORPort configuration");
goto err;
}
if (parse_port_config(ports,
options->ExtORPort_lines,
"ExtOR", CONN_TYPE_EXT_OR_LISTENER,
"127.0.0.1", 0,
CL_PORT_SERVER_OPTIONS|CL_PORT_WARN_NONLOCAL) < 0) {
*msg = tor_strdup("Invalid ExtORPort configuration");
goto err;
}
if (parse_port_config(ports,
options->DirPort_lines,
"Dir", CONN_TYPE_DIR_LISTENER,
"0.0.0.0", 0,
CL_PORT_SERVER_OPTIONS) < 0) {
*msg = tor_strdup("Invalid DirPort configuration");
goto err;
}
int n_low_ports = 0;
if (check_server_ports(ports, options, &n_low_ports) < 0) {
*msg = tor_strdup("Misconfigured server ports");
goto err;
}
if (*have_low_ports_out < 0)
*have_low_ports_out = (n_low_ports > 0);
smartlist_add_all(ports_out, ports);
smartlist_free(ports);
@ -296,6 +297,8 @@ parse_ports_relay(or_options_t *options,
retval = 0;
err:
if (*have_low_ports_out < 0)
*have_low_ports_out = (n_low_ports > 0);
if (ports) {
SMARTLIST_FOREACH(ports, port_cfg_t *, p, port_cfg_free(p));
smartlist_free(ports);
@ -314,6 +317,9 @@ update_port_set_relay(or_options_t *options,
if (BUG(!ports))
return;
if (options->ClientOnly)
return;
/* Update the relay *Port_set options. The !! here is to force a boolean
* out of an integer. */
options->ORPort_set =
@ -343,12 +349,14 @@ options_validate_relay_os(const or_options_t *old_options,
if (BUG(!msg))
return -1;
if (!server_mode(options))
return 0;
const char *uname = get_uname();
if (server_mode(options) &&
(!strcmpstart(uname, "Windows 95") ||
!strcmpstart(uname, "Windows 98") ||
!strcmpstart(uname, "Windows Me"))) {
if (!strcmpstart(uname, "Windows 95") ||
!strcmpstart(uname, "Windows 98") ||
!strcmpstart(uname, "Windows Me")) {
log_warn(LD_CONFIG, "Tor is running as a server, but you are "
"running %s; this probably won't work. See "
"https://www.torproject.org/docs/faq.html#BestOSForRelay "
@ -572,19 +580,22 @@ options_validate_relay_padding(const or_options_t *old_options,
if (BUG(!msg))
return -1;
if (server_mode(options) && options->ConnectionPadding != -1) {
if (!server_mode(options))
return 0;
if (options->ConnectionPadding != -1) {
REJECT("Relays must use 'auto' for the ConnectionPadding setting.");
}
if (server_mode(options) && options->ReducedConnectionPadding != 0) {
if (options->ReducedConnectionPadding != 0) {
REJECT("Relays cannot set ReducedConnectionPadding. ");
}
if (server_mode(options) && options->CircuitPadding == 0) {
if (options->CircuitPadding == 0) {
REJECT("Relays cannot set CircuitPadding to 0. ");
}
if (server_mode(options) && options->ReducedCircuitPadding == 1) {
if (options->ReducedCircuitPadding == 1) {
REJECT("Relays cannot set ReducedCircuitPadding. ");
}
@ -1408,6 +1419,9 @@ options_act_relay_dir(const or_options_t *old_options)
const or_options_t *options = get_options();
if (!public_server_mode(options))
return 0;
/* Load the webpage we're going to serve every time someone asks for '/' on
our DirPort. */
tor_free(global_dirfrontpagecontents);