diff options
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | doc/spec/control-spec.txt | 10 | ||||
-rw-r--r-- | src/or/config.c | 1 | ||||
-rw-r--r-- | src/or/main.c | 20 | ||||
-rw-r--r-- | src/or/or.h | 4 |
5 files changed, 30 insertions, 7 deletions
@@ -19,6 +19,8 @@ Changes in version 0.2.1.9-alpha - 200?-??-?? - When we realize that another process has modified our cached descriptors, print out a more useful error message rather than triggering an assertion. Fixes bug 885. Patch from Karsten. + - Add an internal-use-only __ReloadTorrcOnSIGHUP option for controllers + to prevent SIGHUP from reloading the configuration. Fixes bug 856. o Minor bugfixes: - Resume using the correct "REASON=" stream when telling the diff --git a/doc/spec/control-spec.txt b/doc/spec/control-spec.txt index 9ad1c4e7a2..4d1a7eb514 100644 --- a/doc/spec/control-spec.txt +++ b/doc/spec/control-spec.txt @@ -1650,6 +1650,16 @@ $Id$ As HashedControlPassword, but is not saved to the torrc file by SAVECONF. Added in Tor 0.2.0.20-rc. + __ReloadTorrcOnSIGHUP + + If this option is true (the default), we reload the torrc from disk + every time we get a SIGHUP (from the controller or via a signal). + Otherwise, we don't. This option exists so that controllers can keep + their options from getting overwritten when a user sends Tor a HUP for + some other reason (for example, to rotate the logs). + + (Boolean. Default: "1") + 5.5. Phases from the Bootstrap status event. This section describes the various bootstrap phases currently reported diff --git a/src/or/config.c b/src/or/config.c index 2ed610c337..f35c180068 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -333,6 +333,7 @@ static config_var_t _option_vars[] = { VAR("VersioningAuthoritativeDirectory",BOOL,VersioningAuthoritativeDir, "0"), V(VirtualAddrNetwork, STRING, "127.192.0.0/10"), V(WarnPlaintextPorts, CSV, "23,109,110,143"), + VAR("__ReloadTorrcOnSIGHUP", BOOL, ReloadTorrcOnSIGHUP, "1"), VAR("__AllDirActionsPrivate", BOOL, AllDirActionsPrivate, "0"), VAR("__DisablePredictedCircuits",BOOL,DisablePredictedCircuits, "0"), VAR("__LeaveStreamsUnattached",BOOL, LeaveStreamsUnattached, "0"), diff --git a/src/or/main.c b/src/or/main.c index 7872229f42..3d02d2e871 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -1321,7 +1321,8 @@ do_hup(void) dmalloc_log_changed(0, 1, 0, 0); #endif - log_notice(LD_GENERAL,"Received reload signal (hup). Reloading config."); + log_notice(LD_GENERAL,"Received reload signal (hup). Reloading config and " + "resetting internal state."); if (accounting_is_enabled(options)) accounting_record_bandwidth_usage(time(NULL), get_or_state()); @@ -1329,13 +1330,18 @@ do_hup(void) routerlist_reset_warnings(); addressmap_clear_transient(); /* first, reload config variables, in case they've changed */ - /* no need to provide argc/v, they've been cached inside init_from_config */ - if (options_init_from_torrc(0, NULL) < 0) { - log_err(LD_CONFIG,"Reading config failed--see warnings above. " - "For usage, try -h."); - return -1; + if (options->ReloadTorrcOnSIGHUP) { + /* no need to provide argc/v, they've been cached inside init_from_config */ + if (options_init_from_torrc(0, NULL) < 0) { + log_err(LD_CONFIG,"Reading config failed--see warnings above. " + "For usage, try -h."); + return -1; + } + options = get_options(); /* they have changed now */ + } else { + log_notice(LD_GENERAL, "Not reloading config file: the controller told " + "us not to."); } - options = get_options(); /* they have changed now */ if (authdir_mode_handles_descs(options, -1)) { /* reload the approved-routers file */ if (dirserv_load_fingerprint_file() < 0) { diff --git a/src/or/or.h b/src/or/or.h index ac384421a9..96af19e1f7 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -2496,6 +2496,10 @@ typedef struct { /** Optionally, a file with GeoIP data. */ char *GeoIPFile; + /** If true, SIGHUP should reload the torrc. Sometimes controllers want + * to make this false. */ + int ReloadTorrcOnSIGHUP; + } or_options_t; /** Persistent state for an onion router, as saved to disk. */ |