[tor-commits] [tor/master] Add an option to start tor in dormant mode for the first time.

nickm at torproject.org nickm at torproject.org
Thu Dec 13 13:26:24 UTC 2018


commit 4f558843151f0c49c077d3d9a1cd8a187904a024
Author: Nick Mathewson <nickm at torproject.org>
Date:   Tue Dec 4 12:07:23 2018 -0500

    Add an option to start tor in dormant mode for the first time.
---
 doc/tor.1.txt                  | 11 ++++++++++-
 src/app/config/config.c        |  1 +
 src/app/config/or_options_st.h |  4 ++++
 src/core/mainloop/netstatus.c  | 10 ++++++++--
 4 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/doc/tor.1.txt b/doc/tor.1.txt
index 8e6ec7f1a..82c9e34de 100644
--- a/doc/tor.1.txt
+++ b/doc/tor.1.txt
@@ -1803,11 +1803,20 @@ The following options are useful only for clients (that is, if
     Does not affect servers or onion services. Must be at least 10 minutes.
     (Default: 24 hours)
 
-[[DormantTimeoutDisabledByIdleStreams]] **DormantTimeoutDisabledByIdleStreams  **0**|**1**::
+[[DormantTimeoutDisabledByIdleStreams]] **DormantTimeoutDisabledByIdleStreams**  **0**|**1**::
     If true, then any open client stream (even one not reading or writing)
     counts as client activity for the purpose of DormantClientTimeout.
     If false, then only network activity counts. (Default: 1)
 
+[[DormantOnFirstStartup]] **DormantOnFirstStartup** **0**|**1**::
+    If true, then the first time Tor starts up with a fresh DataDirectory,
+    it starts in dormant mode, and takes no actions until the user has made
+    a request.  (This mode is recommended if installing a Tor client for a
+    user who might not actually use it.)  If false, Tor bootstraps the first
+    time it is started, whether it sees a user request or not.
+ +
+    After the first time Tor starts, it begins in dormant mode if it was
+    dormant before, and not otherwise. (Default: 0)
 
 SERVER OPTIONS
 --------------
diff --git a/src/app/config/config.c b/src/app/config/config.c
index d40e362b3..dcefa3d6a 100644
--- a/src/app/config/config.c
+++ b/src/app/config/config.c
@@ -392,6 +392,7 @@ static config_var_t option_vars_[] = {
   OBSOLETE("DNSListenAddress"),
   V(DormantClientTimeout,         INTERVAL, "24 hours"),
   V(DormantTimeoutDisabledByIdleStreams, BOOL,     "1"),
+  V(DormantOnFirstStartup,       BOOL,      "0"),
   /* DoS circuit creation options. */
   V(DoSCircuitCreationEnabled,   AUTOBOOL, "auto"),
   V(DoSCircuitCreationMinConnections,      UINT, "0"),
diff --git a/src/app/config/or_options_st.h b/src/app/config/or_options_st.h
index 9065248a9..c2bc1079a 100644
--- a/src/app/config/or_options_st.h
+++ b/src/app/config/or_options_st.h
@@ -1085,6 +1085,10 @@ struct or_options_t {
    * from becoming dormant.
    **/
   int DormantTimeoutDisabledByIdleStreams;
+
+  /** Boolean: true if Tor should be dormant the first time it starts with
+   * a datadirectory; false otherwise. */
+  int DormantOnFirstStartup;
 };
 
 #endif
diff --git a/src/core/mainloop/netstatus.c b/src/core/mainloop/netstatus.c
index 59fd8f803..2426baae3 100644
--- a/src/core/mainloop/netstatus.c
+++ b/src/core/mainloop/netstatus.c
@@ -129,8 +129,14 @@ netstatus_load_from_state(const or_state_t *state, time_t now)
 {
   time_t last_activity;
   if (state->Dormant == -1) { // Initial setup.
-    last_activity = now;
-    participating_on_network = true;
+    if (get_options()->DormantOnFirstStartup) {
+      last_activity = 0;
+      participating_on_network = false;
+    } else {
+      // Start up as active, treat activity as happening now.
+      last_activity = now;
+      participating_on_network = true;
+    }
   } else if (state->Dormant) {
     last_activity = 0;
     participating_on_network = false;





More information about the tor-commits mailing list