aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--changes/bug171947
-rw-r--r--doc/tor.1.txt4
-rw-r--r--src/common/log.c13
-rw-r--r--src/common/torlog.h2
-rw-r--r--src/or/config.c3
-rw-r--r--src/or/or.h1
6 files changed, 25 insertions, 5 deletions
diff --git a/changes/bug17194 b/changes/bug17194
new file mode 100644
index 0000000000..26549b307f
--- /dev/null
+++ b/changes/bug17194
@@ -0,0 +1,7 @@
+ o Minor feature:
+ - When logging to syslog, allow a tag to be added to the syslog
+ identity ("Tor"), i.e. the string prepended to every log message.
+ The tag can be configured by setting SyslogIdentityTag and defaults
+ to none. Setting it to "foo" will cause logs to be tagged as
+ "Tor-foo".
+
diff --git a/doc/tor.1.txt b/doc/tor.1.txt
index 954c8fa243..b04d57b0d1 100644
--- a/doc/tor.1.txt
+++ b/doc/tor.1.txt
@@ -580,6 +580,10 @@ GENERAL OPTIONS
If 1, Tor will overwrite logs at startup and in response to a HUP signal,
instead of appending to them. (Default: 0)
+[[SyslogIdentityTag]] **SyslogIdentityTag** __tag__::
+ When logging to syslog, adds a tag to the syslog identity such that
+ log entries are marked with "Tor-__tag__". (Default: none)
+
[[SafeLogging]] **SafeLogging** **0**|**1**|**relay**::
Tor can scrub potentially sensitive strings from log messages (e.g.
addresses) by replacing them with the string [scrubbed]. This way logs can
diff --git a/src/common/log.c b/src/common/log.c
index e23691b6ab..8d1c40c36e 100644
--- a/src/common/log.c
+++ b/src/common/log.c
@@ -1099,12 +1099,19 @@ add_file_log(const log_severity_list_t *severity, const char *filename,
* Add a log handler to send messages to they system log facility.
*/
int
-add_syslog_log(const log_severity_list_t *severity)
+add_syslog_log(const log_severity_list_t *severity, const char* syslog_identity_tag)
{
logfile_t *lf;
- if (syslog_count++ == 0)
+ if (syslog_count++ == 0) {
/* This is the first syslog. */
- openlog("Tor", LOG_PID | LOG_NDELAY, LOGFACILITY);
+ static char buf[256];
+ if (syslog_identity_tag) {
+ tor_snprintf(buf, sizeof(buf), "Tor-%s", syslog_identity_tag);
+ } else {
+ tor_snprintf(buf, sizeof(buf), "Tor");
+ }
+ openlog(buf, LOG_PID | LOG_NDELAY, LOGFACILITY);
+ }
lf = tor_malloc_zero(sizeof(logfile_t));
lf->fd = -1;
diff --git a/src/common/torlog.h b/src/common/torlog.h
index 67edf14c04..57679b5f5c 100644
--- a/src/common/torlog.h
+++ b/src/common/torlog.h
@@ -135,7 +135,7 @@ void add_stream_log(const log_severity_list_t *severity, const char *name,
int add_file_log(const log_severity_list_t *severity, const char *filename,
const int truncate);
#ifdef HAVE_SYSLOG_H
-int add_syslog_log(const log_severity_list_t *severity);
+int add_syslog_log(const log_severity_list_t *severity, const char* syslog_identity_tag);
#endif
int add_callback_log(const log_severity_list_t *severity, log_callback cb);
void logs_set_domain_logging(int enabled);
diff --git a/src/or/config.c b/src/or/config.c
index fa860af337..9b65addeeb 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -312,6 +312,7 @@ static config_var_t option_vars_[] = {
V(LogMessageDomains, BOOL, "0"),
V(LogTimeGranularity, MSEC_INTERVAL, "1 second"),
V(TruncateLogFile, BOOL, "0"),
+ V(SyslogIdentityTag, STRING, NULL),
V(LongLivedPorts, CSV,
"21,22,706,1863,5050,5190,5222,5223,6523,6667,6697,8300"),
VAR("MapAddress", LINELIST, AddressMap, NULL),
@@ -4937,7 +4938,7 @@ options_init_logs(const or_options_t *old_options, or_options_t *options,
!strcasecmp(smartlist_get(elts,0), "syslog")) {
#ifdef HAVE_SYSLOG_H
if (!validate_only) {
- add_syslog_log(severity);
+ add_syslog_log(severity, options->SyslogIdentityTag);
}
#else
log_warn(LD_CONFIG, "Syslog is not supported on this system. Sorry.");
diff --git a/src/or/or.h b/src/or/or.h
index 4496cbcec3..a80cd55b53 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -3424,6 +3424,7 @@ typedef struct {
* each log message occurs? */
int TruncateLogFile; /**< Boolean: Should we truncate the log file
before we start writing? */
+ char *SyslogIdentityTag; /**< Identity tag to add for syslog logging. */
char *DebugLogFile; /**< Where to send verbose log messages. */
char *DataDirectory; /**< OR only: where to store long-term data. */