aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2008-12-10 22:17:02 +0000
committerNick Mathewson <nickm@torproject.org>2008-12-10 22:17:02 +0000
commit53d3f812bd2f97f4eb2acce73919e217baaf2772 (patch)
tree5c392e3ebe2b43a00eee5c0ab405933bb02e37ca
parent9aa706e20c3ae91f6cac95964e291076b88ecd48 (diff)
downloadtor-53d3f812bd2f97f4eb2acce73919e217baaf2772.tar
tor-53d3f812bd2f97f4eb2acce73919e217baaf2772.tar.gz
Add new internal-use-only option for controllers to use to prevent SIGHUP from reloading the configuration. Fixes bug 856.
svn:r17567
-rw-r--r--ChangeLog2
-rw-r--r--doc/spec/control-spec.txt10
-rw-r--r--src/or/config.c1
-rw-r--r--src/or/main.c20
-rw-r--r--src/or/or.h4
5 files changed, 30 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index eca662b4c..1da307157 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 9ad1c4e7a..4d1a7eb51 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 2ed610c33..f35c18006 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 7872229f4..3d02d2e87 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 ac384421a..96af19e1f 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. */