[tor-commits] [tor/master] Revert "Restore feature where nt-services detect non-"run_tor" modes."

teor at torproject.org teor at torproject.org
Mon Jan 20 05:53:03 UTC 2020


commit d7a22160f54dfa90702cfd6d6f83a0a75909edcb
Author: Nick Mathewson <nickm at torproject.org>
Date:   Fri Jan 17 08:39:49 2020 -0500

    Revert "Restore feature where nt-services detect non-"run_tor" modes."
    
    This reverts commit 5c240db0bf7751d74ba438a1ca4ef0d051a53df7.
---
 src/app/main/main.c                |  7 -----
 src/app/main/ntmain.c              | 52 +++++++++++++++++++++++++-------------
 src/feature/api/tor_api_internal.h |  5 ----
 3 files changed, 35 insertions(+), 29 deletions(-)

diff --git a/src/app/main/main.c b/src/app/main/main.c
index b533406ea..dad977726 100644
--- a/src/app/main/main.c
+++ b/src/app/main/main.c
@@ -1274,13 +1274,6 @@ tor_run_main(const tor_main_configuration_t *tor_cfg)
 #endif
   }
 
-  if (tor_cfg->run_tor_only && get_options()->command != CMD_RUN_TOR) {
-    log_err(LD_CONFIG, "Unsupported command when running as an NT service.");
-    result = -1;
-    tor_cleanup();
-    goto done;
-  }
-
   switch (get_options()->command) {
   case CMD_RUN_TOR:
     nt_service_set_state(SERVICE_RUNNING);
diff --git a/src/app/main/ntmain.c b/src/app/main/ntmain.c
index 96da1690f..ced158e68 100644
--- a/src/app/main/ntmain.c
+++ b/src/app/main/ntmain.c
@@ -29,8 +29,6 @@
 #include "lib/evloop/compat_libevent.h"
 #include "lib/fs/winlib.h"
 #include "lib/log/win32err.h"
-#include "feature/api/tor_api.h"
-#include "feature/api/tor_api_internal.h"
 
 #include <windows.h>
 #define GENSRV_SERVICENAME  "tor"
@@ -265,6 +263,7 @@ nt_service_control(DWORD request)
 static void
 nt_service_body(int argc, char **argv)
 {
+  int r;
   (void) argc; /* unused */
   (void) argv; /* unused */
   nt_service_loadlibrary();
@@ -284,20 +283,24 @@ nt_service_body(int argc, char **argv)
     return;
   }
 
-  tor_main_configuration_t *cfg = tor_main_configuration_new();
-  cfg->run_tor_only = 1;
-  if (tor_main_configuration_set_command_line(cfg, backup_argc,
-                                              backup_argv) < 0)
+  r = tor_init(backup_argc, backup_argv);
+  if (r) {
+    /* Failed to start the Tor service */
+    r = NT_SERVICE_ERROR_TORINIT_FAILED;
+    service_status.dwCurrentState = SERVICE_STOPPED;
+    service_status.dwWin32ExitCode = r;
+    service_status.dwServiceSpecificExitCode = r;
+    service_fns.SetServiceStatus_fn(hStatus, &service_status);
     return;
+  }
 
   /* Set the service's status to SERVICE_RUNNING and start the main
    * event loop */
   service_status.dwCurrentState = SERVICE_RUNNING;
   service_fns.SetServiceStatus_fn(hStatus, &service_status);
-
-  tor_run_main(cfg);
-
-  tor_main_configuration_free(cfg);
+  set_main_thread();
+  run_tor_main_loop();
+  tor_cleanup();
 }
 
 /** Main service entry point. Starts the service control dispatcher and waits
@@ -320,14 +323,29 @@ nt_service_main(void)
     printf("Service error %d : %s\n", (int) result, errmsg);
     tor_free(errmsg);
     if (result == ERROR_FAILED_SERVICE_CONTROLLER_CONNECT) {
-      tor_main_configuration_t *cfg = tor_main_configuration_new();
-      cfg->run_tor_only = 1;
-      if (tor_main_configuration_set_command_line(cfg, backup_argc,
-                                                  backup_argv) < 0)
+      if (tor_init(backup_argc, backup_argv))
         return;
-
-      tor_run_main(cfg);
-      tor_main_configuration_free(cfg);
+      switch (get_options()->command) {
+      case CMD_RUN_TOR:
+        run_tor_main_loop();
+        break;
+      case CMD_LIST_FINGERPRINT:
+      case CMD_HASH_PASSWORD:
+      case CMD_VERIFY_CONFIG:
+      case CMD_DUMP_CONFIG:
+      case CMD_KEYGEN:
+      case CMD_KEY_EXPIRATION:
+        log_err(LD_CONFIG, "Unsupported command (--list-fingerprint, "
+               "--hash-password, --keygen, --dump-config, --verify-config, "
+               "or --key-expiration) in NT service.");
+        break;
+      case CMD_RUN_UNITTESTS:
+      case CMD_IMMEDIATE:
+      default:
+        log_err(LD_CONFIG, "Illegal command number %d: internal error.",
+                get_options()->command);
+      }
+      tor_cleanup();
     }
   }
 }
diff --git a/src/feature/api/tor_api_internal.h b/src/feature/api/tor_api_internal.h
index ef06cd7e6..d52b2caf4 100644
--- a/src/feature/api/tor_api_internal.h
+++ b/src/feature/api/tor_api_internal.h
@@ -29,11 +29,6 @@ struct tor_main_configuration_t {
 
   /** Socket that Tor will use as an owning control socket. Owned. */
   tor_socket_t owning_controller_socket;
-
-  /** Disable commands other than "run tor". Not for use from outside Tor
-   * itself; if you need to use this for embedding, please contact the tor
-   * developers.  */
-  int run_tor_only;
 };
 
 #endif /* !defined(TOR_API_INTERNAL_H) */





More information about the tor-commits mailing list