diff options
author | Nick Mathewson <nickm@torproject.org> | 2008-12-18 17:18:06 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2008-12-18 17:18:06 +0000 |
commit | b6f89a647a300c6427cdc6796008275447d7ec93 (patch) | |
tree | 9f525ca2d728a9e795f8e3433cec491af5e40438 /src/common/log.c | |
parent | 122170c1d3333185bacf361c523c8e19f0a5e8ba (diff) | |
download | tor-b6f89a647a300c6427cdc6796008275447d7ec93.tar.gz tor-b6f89a647a300c6427cdc6796008275447d7ec93.zip |
One log.c XXX021 was a misunderstanding. Also, clip log messages passed to syslog to their maximum length when there is a maximum.
svn:r17688
Diffstat (limited to 'src/common/log.c')
-rw-r--r-- | src/common/log.c | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/src/common/log.c b/src/common/log.c index d93bc8a556..d4894baef4 100644 --- a/src/common/log.c +++ b/src/common/log.c @@ -299,9 +299,23 @@ logv(int severity, log_domain_mask_t domain, const char *funcname, } if (lf->is_syslog) { #ifdef HAVE_SYSLOG_H - /* XXXX Some syslog implementations have scary limits on the length of - * what you can pass them. Can/should we detect this? */ - syslog(severity, "%s", end_of_prefix); + char *m = end_of_prefix; +#ifdef MAXLINE + /* Some syslog implementations have limits on the length of what you can + * pass them, and some very old ones do not detect overflow so well. + * Regrettably, they call their maximum line length MAXLINE. */ +#if MAXLINE < 64 +#warn "MAXLINE is a very low number; it might not be from syslog.h after all" +#endif + if (msg_len >= MAXLINE) + m = tor_strndup(end_of_prefix, MAXLINE-1); +#endif + syslog(severity, "%s", m); +#ifdef MAXLINE + if (m != end_of_prefix) { + tor_free(m); + } +#endif #endif lf = lf->next; continue; @@ -739,9 +753,8 @@ static const char *domain_list[] = { "OR", "EDGE", "ACCT", "HIST", NULL }; -/** Return the log domain for which <b>domain</b> is the name, or 0 if there - * is no such name. */ -/*XXXX021 0 could mean "no such domain" or LD_GENERAL. Fix that. */ +/** Return a bitmask for the log domain for which <b>domain</b> is the name, + * or 0 if there is no such name. */ static log_domain_mask_t parse_log_domain(const char *domain) { |