Block certain option transitions while sandbox enabled

This commit is contained in:
Nick Mathewson 2014-04-16 21:57:45 -04:00
parent f70cf9982a
commit 2ae47d3c3a

View file

@ -3584,6 +3584,12 @@ options_transition_allowed(const or_options_t *old,
return -1; return -1;
} }
if (old->Sandbox != new_val->Sandbox) {
*msg = tor_strdup("While Tor is running, changing Sandbox "
"is not allowed.");
return -1;
}
if (strcmp(old->DataDirectory,new_val->DataDirectory)!=0) { if (strcmp(old->DataDirectory,new_val->DataDirectory)!=0) {
tor_asprintf(msg, tor_asprintf(msg,
"While Tor is running, changing DataDirectory " "While Tor is running, changing DataDirectory "
@ -3636,6 +3642,32 @@ options_transition_allowed(const or_options_t *old,
return -1; return -1;
} }
if (sandbox_is_active()) {
if (! opt_streq(old->PidFile, new_val->PidFile)) {
*msg = tor_strdup("Can't change PidFile while Sandbox is active");
return -1;
}
if (! config_lines_eq(old->Logs, new_val->Logs)) {
*msg = tor_strdup("Can't change Logs while Sandbox is active");
return -1;
}
if (old->ConnLimit != new_val->ConnLimit) {
*msg = tor_strdup("Can't change ConnLimit while Sandbox is active");
return -1;
}
if (! opt_streq(old->ServerDNSResolvConfFile,
new_val->ServerDNSResolvConfFile)) {
*msg = tor_strdup("Can't change ServerDNSResolvConfFile"
" while Sandbox is active");
return -1;
}
if (server_mode(old) != server_mode(new_val)) {
*msg = tor_strdup("Can't start/stop being a server while "
"Sandbox is active");
return -1;
}
}
return 0; return 0;
} }