Merge remote-tracking branch 'ffmancera/github/bug23271'

This commit is contained in:
Nick Mathewson 2017-12-20 10:40:32 -05:00
commit 18543c2c9b
3 changed files with 28 additions and 13 deletions

6
changes/ticket23271 Normal file
View File

@ -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.

View File

@ -3397,6 +3397,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)
@ -3406,19 +3418,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. */

View File

@ -73,6 +73,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);