mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-27 22:03:31 +01:00
sandbox: support logfile rotation
Fixes bug 12032; bugfix on 0.2.5.1-alpha
This commit is contained in:
parent
29f2f7ce9a
commit
c21377e7bc
4
changes/bug12032
Normal file
4
changes/bug12032
Normal file
@ -0,0 +1,4 @@
|
||||
o Minor bugfixes (Linux syscall sandbox):
|
||||
- When we receive a SIGHUP with the sandbox enabled, correctly
|
||||
support rotating our log files. Fixes bug 12032; bugfix on
|
||||
0.2.5.1-alpha.
|
@ -562,6 +562,27 @@ tor_log_update_sigsafe_err_fds(void)
|
||||
UNLOCK_LOGS();
|
||||
}
|
||||
|
||||
/** Add to <b>out</b> a copy of every currently configured log file name. Used
|
||||
* to enable access to these filenames with the sandbox code. */
|
||||
void
|
||||
tor_log_get_logfile_names(smartlist_t *out)
|
||||
{
|
||||
logfile_t *lf;
|
||||
tor_assert(out);
|
||||
|
||||
LOCK_LOGS();
|
||||
|
||||
for (lf = logfiles; lf; lf = lf->next) {
|
||||
if (lf->is_temporary || lf->is_syslog || lf->callback)
|
||||
continue;
|
||||
if (lf->filename == NULL)
|
||||
continue;
|
||||
smartlist_add(out, tor_strdup(lf->filename));
|
||||
}
|
||||
|
||||
UNLOCK_LOGS();
|
||||
}
|
||||
|
||||
/** Output a message to the log, prefixed with a function name <b>fn</b>. */
|
||||
#ifdef __GNUC__
|
||||
/** GCC-based implementation of the log_fn backend, used when we have
|
||||
|
@ -156,6 +156,9 @@ void tor_log_err_sigsafe(const char *m, ...);
|
||||
int tor_log_get_sigsafe_err_fds(const int **out);
|
||||
void tor_log_update_sigsafe_err_fds(void);
|
||||
|
||||
struct smartlist_t;
|
||||
void tor_log_get_logfile_names(struct smartlist_t *out);
|
||||
|
||||
extern int log_global_min_severity_;
|
||||
|
||||
#if defined(__GNUC__) || defined(RUNNING_DOXYGEN)
|
||||
|
@ -1143,13 +1143,11 @@ options_act_reversible(const or_options_t *old_options, char **msg)
|
||||
if (!running_tor)
|
||||
goto commit;
|
||||
|
||||
if (!sandbox_is_active()) {
|
||||
mark_logs_temp(); /* Close current logs once new logs are open. */
|
||||
logs_marked = 1;
|
||||
if (options_init_logs(options, 0)<0) { /* Configure the tor_log(s) */
|
||||
*msg = tor_strdup("Failed to init Log options. See logs for details.");
|
||||
goto rollback;
|
||||
}
|
||||
mark_logs_temp(); /* Close current logs once new logs are open. */
|
||||
logs_marked = 1;
|
||||
if (options_init_logs(options, 0)<0) { /* Configure the tor_log(s) */
|
||||
*msg = tor_strdup("Failed to init Log options. See logs for details.");
|
||||
goto rollback;
|
||||
}
|
||||
|
||||
commit:
|
||||
|
@ -2822,6 +2822,15 @@ sandbox_init_filter(void)
|
||||
NULL, 0
|
||||
);
|
||||
|
||||
{
|
||||
smartlist_t *logfiles = smartlist_new();
|
||||
tor_log_get_logfile_names(logfiles);
|
||||
SMARTLIST_FOREACH(logfiles, char *, logfile_name, {
|
||||
sandbox_cfg_allow_open_filename(&cfg, logfile_name); /* steals reference */
|
||||
});
|
||||
smartlist_free(logfiles);
|
||||
}
|
||||
|
||||
// orport
|
||||
if (server_mode(get_options())) {
|
||||
sandbox_cfg_allow_open_filename_array(&cfg,
|
||||
|
Loading…
Reference in New Issue
Block a user