|
@@ -1326,12 +1326,26 @@ options_act(const or_options_t *old_options)
|
|
|
const int transition_affects_workers =
|
|
|
old_options && options_transition_affects_workers(old_options, options);
|
|
|
|
|
|
- /* disable ptrace and later, other basic debugging techniques */
|
|
|
- if (options->DisableDebuggerAttachment) {
|
|
|
- tor_disable_debugger_attach();
|
|
|
- } else {
|
|
|
- log_notice(LD_CONFIG,"Debugger attachment enabled "
|
|
|
- "for unprivileged users.");
|
|
|
+ /* disable ptrace and later, other basic debugging techniques */
|
|
|
+ {
|
|
|
+ /* Remember if we already disabled debugger attachment */
|
|
|
+ static int disabled_debugger_attach = 0;
|
|
|
+ /* Remember if we already warned about being configured not to disable
|
|
|
+ * debugger attachment */
|
|
|
+ static int warned_debugger_attach = 0;
|
|
|
+ if (options->DisableDebuggerAttachment && !disabled_debugger_attach) {
|
|
|
+ int ok = tor_disable_debugger_attach();
|
|
|
+ if (warned_debugger_attach && ok == 1) {
|
|
|
+ log_notice(LD_CONFIG, "Disabled attaching debuggers for unprivileged "
|
|
|
+ "users.");
|
|
|
+ }
|
|
|
+ disabled_debugger_attach = (ok == 1);
|
|
|
+ } else if (!options->DisableDebuggerAttachment &&
|
|
|
+ !warned_debugger_attach) {
|
|
|
+ log_notice(LD_CONFIG, "Not disabling debugger attaching for "
|
|
|
+ "unprivileged users.");
|
|
|
+ warned_debugger_attach = 1;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if (running_tor && !have_lockfile()) {
|
|
@@ -4170,6 +4184,13 @@ options_transition_allowed(const or_options_t *old,
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
+ if (old->DisableDebuggerAttachment &&
|
|
|
+ !new_val->DisableDebuggerAttachment) {
|
|
|
+ *msg = tor_strdup("While Tor is running, disabling "
|
|
|
+ "DisableDebuggerAttachment is not allowed.");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|