Browse Source

Add remove file function and remove ephemeral files.

Adding tor_remove_file(filename) and refactoring tor_cleanup().

Removing CookieAuthFile and ExtORPortCookieAuthFile when tor_cleanup() is
called.

Fixes #23271.

Signed-off-by: Fernando Fernandez Mancera <ffernandezmancera@gmail.com>
Fernando Fernandez Mancera 6 years ago
parent
commit
61c721f145
3 changed files with 28 additions and 13 deletions
  1. 6 0
      changes/ticket23271
  2. 20 13
      src/or/main.c
  3. 2 0
      src/or/main.h

+ 6 - 0
changes/ticket23271

@@ -0,0 +1,6 @@
+  o Code simplification and refactoring:
+    - Separate the function that deletes ephemeral files when Tor stops
+      gracefully.
+  o Minor features (cleanup):
+    - Tor now deletes the CookieAuthFile and ExtORPortCookieAuthFile when it
+      stops. Closes ticket 23271.

+ 20 - 13
src/or/main.c

@@ -3303,6 +3303,18 @@ tor_free_all(int postfork)
   }
 }
 
+/** Remove the specified file. */
+void
+tor_remove_file(const char *filename)
+{
+  if (file_status(filename) == FN_FILE) {
+    if (tor_unlink(filename) != 0) {
+      log_warn(LD_FS, "Couldn't unlink %s: %s",
+               filename, strerror(errno));
+    }
+  }
+}
+
 /** Do whatever cleanup is necessary before shutting Tor down. */
 void
 tor_cleanup(void)
@@ -3312,19 +3324,14 @@ tor_cleanup(void)
     time_t now = time(NULL);
     /* Remove our pid file. We don't care if there was an error when we
      * unlink, nothing we could do about it anyways. */
-    if (options->PidFile) {
-      if (unlink(options->PidFile) != 0) {
-        log_warn(LD_FS, "Couldn't unlink pid file %s: %s",
-                 options->PidFile, strerror(errno));
-      }
-    }
-    if (options->ControlPortWriteToFile) {
-      if (unlink(options->ControlPortWriteToFile) != 0) {
-        log_warn(LD_FS, "Couldn't unlink control port file %s: %s",
-                 options->ControlPortWriteToFile,
-                 strerror(errno));
-      }
-    }
+    tor_remove_file(options->PidFile);
+    /* Remove control port file */
+    tor_remove_file(options->ControlPortWriteToFile);
+    /* Remove cookie authentication file */
+    tor_remove_file(get_controller_cookie_file_name());
+    /* Remove Extended ORPort cookie authentication file */
+    tor_remove_file(get_ext_or_auth_cookie_file_name());
+
     if (accounting_is_enabled(options))
       accounting_record_bandwidth_usage(now, get_or_state());
     or_state_mark_dirty(get_or_state(), 0); /* force an immediate save. */

+ 2 - 0
src/or/main.h

@@ -71,6 +71,8 @@ int try_locking(const or_options_t *options, int err_if_locked);
 int have_lockfile(void);
 void release_lockfile(void);
 
+void tor_remove_file(const char *filename);
+
 void tor_cleanup(void);
 void tor_free_all(int postfork);