aboutsummaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2005-10-25 07:05:03 +0000
committerNick Mathewson <nickm@torproject.org>2005-10-25 07:05:03 +0000
commit932106f54c35b815756d518b236448b9884d6bde (patch)
tree1cb7ab000289de706e5813dfe764a2b3644db797 /src/common
parent452f4cfa09dffc8f9235c9a9bb1bd3e30aee6aa2 (diff)
downloadtor-932106f54c35b815756d518b236448b9884d6bde.tar.gz
tor-932106f54c35b815756d518b236448b9884d6bde.zip
Efficiency hack: call tor_fix_source_file late, not early. Add "BUG" domain. Domains are now bitmasks... just in case. Make some err msgs non-general.
svn:r5309
Diffstat (limited to 'src/common')
-rw-r--r--src/common/compat.c23
-rw-r--r--src/common/compat.h9
-rw-r--r--src/common/log.c20
-rw-r--r--src/common/log.h56
-rw-r--r--src/common/tortls.c4
-rw-r--r--src/common/tortls.h2
-rw-r--r--src/common/util.c14
-rw-r--r--src/common/util.h32
8 files changed, 84 insertions, 76 deletions
diff --git a/src/common/compat.c b/src/common/compat.c
index 6a8368fef0..69b58b619a 100644
--- a/src/common/compat.c
+++ b/src/common/compat.c
@@ -177,6 +177,7 @@ tor_memmem(const void *_haystack, size_t hlen, const void *_needle, size_t nlen)
#endif
}
+#ifdef MS_WINDOWS
/** Take a filename and return a pointer to its final element. This
* function is called on __FILE__ to fix a MSVC nit where __FILE__
* contains the full path to the file. This is bad, because it
@@ -184,7 +185,7 @@ tor_memmem(const void *_haystack, size_t hlen, const void *_needle, size_t nlen)
* compiled the binary in their warrning messages.
*/
const char *
-_tor_fix_source_file(const char *fname)
+tor_fix_source_file(const char *fname)
{
const char *cp1, *cp2, *r;
cp1 = strrchr(fname, '/');
@@ -200,6 +201,7 @@ _tor_fix_source_file(const char *fname)
}
return r;
}
+#endif
#ifndef UNALIGNED_INT_ACCESS_OK
/**
@@ -499,7 +501,7 @@ switch_id(char *user, char *group)
if (user) {
pw = getpwnam(user);
if (pw == NULL) {
- err("User '%s' not found.", user);
+ err(LD_CONFIG,"User '%s' not found.", user);
return -1;
}
}
@@ -508,17 +510,17 @@ switch_id(char *user, char *group)
if (group) {
gr = getgrnam(group);
if (gr == NULL) {
- err("Group '%s' not found.", group);
+ err(LD_CONFIG,"Group '%s' not found.", group);
return -1;
}
if (setgid(gr->gr_gid) != 0) {
- err("Error setting GID: %s", strerror(errno));
+ err(LD_GENERAL,"Error setting GID: %s", strerror(errno));
return -1;
}
} else if (user) {
if (setgid(pw->pw_gid) != 0) {
- err("Error setting GID: %s", strerror(errno));
+ err(LD_GENERAL,"Error setting GID: %s", strerror(errno));
return -1;
}
}
@@ -527,7 +529,7 @@ switch_id(char *user, char *group)
privileges */
if (user) {
if (setuid(pw->pw_uid) != 0) {
- err("Error setting UID: %s", strerror(errno));
+ err(LD_GENERAL,"Error setting UID: %s", strerror(errno));
return -1;
}
}
@@ -535,8 +537,7 @@ switch_id(char *user, char *group)
return 0;
#endif
- err("User or group specified, but switching users is not supported.");
-
+ err(LD_CONFIG,"User or group specified, but switching users is not supported.");
return -1;
}
@@ -550,7 +551,7 @@ get_user_homedir(const char *username)
tor_assert(username);
if (!(pw = getpwnam(username))) {
- err("User \"%s\" not found.", username);
+ err(LD_CONFIG,"User \"%s\" not found.", username);
return NULL;
}
return tor_strdup(pw->pw_dir);
@@ -894,7 +895,7 @@ tor_gettimeofday(struct timeval *timeval)
/* number of 100-nsec units since Jan 1, 1601 */
GetSystemTimeAsFileTime(&ft.ft_ft);
if (ft.ft_64 < EPOCH_BIAS) {
- err("System time is before 1970; failing.");
+ err(LD_GENERAL,"System time is before 1970; failing.");
exit(1);
}
ft.ft_64 -= EPOCH_BIAS;
@@ -902,7 +903,7 @@ tor_gettimeofday(struct timeval *timeval)
timeval->tv_usec = (unsigned) ((ft.ft_64 / UNITS_PER_USEC) % USEC_PER_SEC);
#elif defined(HAVE_GETTIMEOFDAY)
if (gettimeofday(timeval, NULL)) {
- err("gettimeofday failed.");
+ err(LD_GENERAL,"gettimeofday failed.");
/* If gettimeofday dies, we have either given a bad timezone (we didn't),
or segfaulted.*/
exit(1);
diff --git a/src/common/compat.h b/src/common/compat.h
index 4e8d4b1805..314477894a 100644
--- a/src/common/compat.h
+++ b/src/common/compat.h
@@ -100,8 +100,13 @@ const void *tor_memmem(const void *haystack, size_t hlen, const void *needle,
#define TOR_ISDIGIT(c) isdigit((int)(unsigned char)(c))
#define TOR_ISPRINT(c) isprint((int)(unsigned char)(c))
-#define _SHORT_FILE_ (_tor_fix_source_file(__FILE__))
-const char *_tor_fix_source_file(const char *fname);
+#ifdef MS_WINDOWS
+#define _SHORT_FILE_ (tor_fix_source_file(__FILE__))
+const char *tor_fix_source_file(const char *fname);
+#else
+#define _SHORT_FILE_ (__FILE__)
+#define tor_fix_source_file(s) (s)
+#endif
/* ===== Time compatibility */
#if !defined(HAVE_GETTIMEOFDAY) && !defined(HAVE_STRUCT_TIMEVAL_TV_SEC)
diff --git a/src/common/log.c b/src/common/log.c
index 3bdd55a481..aa167ac57f 100644
--- a/src/common/log.c
+++ b/src/common/log.c
@@ -184,7 +184,7 @@ format_msg(char *buf, size_t buf_len,
* message. The actual message is derived as from tor_snprintf(format,ap).
*/
static void
-logv(int severity, int domain, const char *funcname, const char *format,
+logv(int severity, unsigned int domain, const char *funcname, const char *format,
va_list ap)
{
char buf[10024];
@@ -234,7 +234,7 @@ logv(int severity, int domain, const char *funcname, const char *format,
/** Output a message to the log. */
void
-_log(int severity, int domain, const char *format, ...)
+_log(int severity, unsigned int domain, const char *format, ...)
{
va_list ap;
va_start(ap,format);
@@ -245,7 +245,7 @@ _log(int severity, int domain, const char *format, ...)
/** Output a message to the log, prefixed with a function name <b>fn</b>. */
#ifdef __GNUC__
void
-_log_fn(int severity, int domain, const char *fn, const char *format, ...)
+_log_fn(int severity, unsigned int domain, const char *fn, const char *format, ...)
{
va_list ap;
va_start(ap,format);
@@ -255,7 +255,7 @@ _log_fn(int severity, int domain, const char *fn, const char *format, ...)
#else
const char *_log_fn_function_name=NULL;
void
-_log_fn(int severity, int domain, const char *format, ...)
+_log_fn(int severity, unsigned int domain, const char *format, ...)
{
va_list ap;
va_start(ap,format);
@@ -264,7 +264,7 @@ _log_fn(int severity, int domain, const char *format, ...)
_log_fn_function_name = NULL;
}
void
-_debug(int domain, const char *format, ...)
+_debug(unsigned int domain, const char *format, ...)
{
va_list ap;
va_start(ap,format);
@@ -273,7 +273,7 @@ _debug(int domain, const char *format, ...)
_log_fn_function_name = NULL;
}
void
-_info(int domain, const char *format, ...)
+_info(unsigned int domain, const char *format, ...)
{
va_list ap;
va_start(ap,format);
@@ -282,7 +282,7 @@ _info(int domain, const char *format, ...)
_log_fn_function_name = NULL;
}
void
-_notice(int domain, const char *format, ...)
+_notice(unsigned int domain, const char *format, ...)
{
va_list ap;
va_start(ap,format);
@@ -291,7 +291,7 @@ _notice(int domain, const char *format, ...)
_log_fn_function_name = NULL;
}
void
-_warn(int domain, const char *format, ...)
+_warn(unsigned int domain, const char *format, ...)
{
va_list ap;
va_start(ap,format);
@@ -300,11 +300,11 @@ _warn(int domain, const char *format, ...)
_log_fn_function_name = NULL;
}
void
-_err(const char *format, ...)
+_err(unsigned int domain, const char *format, ...)
{
va_list ap;
va_start(ap,format);
- logv(LOG_ERR, LD_GENERAL, _log_fn_function_name, format, ap);
+ logv(LOG_ERR, domain, _log_fn_function_name, format, ap);
va_end(ap);
_log_fn_function_name = NULL;
}
diff --git a/src/common/log.h b/src/common/log.h
index b06ea248f9..0cd6dd442a 100644
--- a/src/common/log.h
+++ b/src/common/log.h
@@ -53,39 +53,41 @@
/* Logging domains */
/** Catch-all for miscellaneous events and fatal errors */
-#define LD_GENERAL 0
+#define LD_GENERAL (1u<<0)
/** The cryptography subsytem */
-#define LD_CRYPTO 1
+#define LD_CRYPTO (1u<<1)
/** Networking */
-#define LD_NET 2
+#define LD_NET (1u<<2)
/** Parsing and acting on our configuration */
-#define LD_CONFIG 3
+#define LD_CONFIG (1u<<3)
/** Reading and writing from the filesystem */
-#define LD_FS 4
+#define LD_FS (1u<<4)
/** Other servers' (non)compliance with the Tor protocol */
-#define LD_PROTOCOL 5
+#define LD_PROTOCOL (1u<<5)
/** Memory management */
-#define LD_MM 6
+#define LD_MM (1u<<6)
/** HTTP implementation */
-#define LD_HTTP 7
+#define LD_HTTP (1u<<7)
/** Application (socks) requests */
-#define LD_APP 8
+#define LD_APP (1u<<8)
/** Communication via the controller protocol */
-#define LD_CONTROL 9
+#define LD_CONTROL (1u<<9)
/** Building, using, and managing circuits */
-#define LD_CIRC 10
+#define LD_CIRC (1u<<10)
/** Hidden services */
-#define LD_REND 11
+#define LD_REND (1u<<11)
/** Internal errors in this Tor process. */
-#define LD_BUG 12
+#define LD_BUG (1u<<12)
/** Learning and using information about Tor servers. */
-#define LD_DIR 13
+#define LD_DIR (1u<<13)
/** Learning and using information about Tor servers. */
-#define LD_DIRSERV 14
+#define LD_DIRSERV (1u<<14)
/** Onion routing protocol. */
-#define LD_OR 15
+#define LD_OR (1u<<15)
+/** Connections leaving Tor, other exit stuff. */
+#define LD_EXIT (1u<<16)
-typedef void (*log_callback)(int severity, int domain, const char *msg);
+typedef void (*log_callback)(int severity, unsigned int domain, const char *msg);
int parse_log_level(const char *level);
const char *log_level_to_string(int level);
@@ -108,10 +110,10 @@ void change_callback_log_severity(int loglevelMin, int loglevelMax,
log_callback cb);
/* Outputs a message to stdout */
-void _log(int severity, int domain, const char *format, ...) CHECK_PRINTF(3,4);
+void _log(int severity, unsigned int domain, const char *format, ...) CHECK_PRINTF(3,4);
#ifdef __GNUC__
-void _log_fn(int severity, int domain,
+void _log_fn(int severity, unsigned int domain,
const char *funcname, const char *format, ...)
CHECK_PRINTF(4,5);
/** Log a message at level <b>severity</b>, using a pretty-printed version
@@ -134,16 +136,16 @@ void _log_fn(int severity, int domain,
_log_fn(LOG_INFO, domain, __PRETTY_FUNCTION__, args)
#define warn(domain, args...) \
_log_fn(LOG_INFO, domain, __PRETTY_FUNCTION__, args)
-#define err(args...) \
- _log_fn(LOG_ERR, LD_GENERAL, __PRETTY_FUNCTION__, args)
+#define err(domain, args...) \
+ _log_fn(LOG_ERR, domain, __PRETTY_FUNCTION__, args)
#else
-void _log_fn(int severity, int domain, const char *format, ...);
-void _debug(int domain, const char *format, ...);
-void _info(int domain, const char *format, ...);
-void _notice(int domain, const char *format, ...);
-void _warn(int domain, const char *format, ...);
-void _err(const char *format, ...);
+void _log_fn(int severity, unsigned int domain, const char *format, ...);
+void _debug(unsigned int domain, const char *format, ...);
+void _info(unsigned int domain, const char *format, ...);
+void _notice(unsigned int domain, const char *format, ...);
+void _warn(unsigned int domain, const char *format, ...);
+void _err(unsigned int domain, const char *format, ...);
#define log _log /* hack it so we don't conflict with log() as much */
diff --git a/src/common/tortls.c b/src/common/tortls.c
index a4cd730b38..00e7d22e91 100644
--- a/src/common/tortls.c
+++ b/src/common/tortls.c
@@ -866,8 +866,8 @@ _check_no_tls_errors(const char *fname, int line)
{
if (ERR_peek_error() == 0)
return;
- log_fn(LOG_WARN, LD_CRYPTO, "Unhandled OpenSSL errors found at %s:%d: ",
- fname, line);
+ log(LOG_WARN, LD_CRYPTO, "Unhandled OpenSSL errors found at %s:%d: ",
+ tor_fix_source_file(fname), line);
tls_log_errors(LOG_WARN, NULL);
}
diff --git a/src/common/tortls.h b/src/common/tortls.h
index 8166a8dbb7..95545fe97f 100644
--- a/src/common/tortls.h
+++ b/src/common/tortls.h
@@ -46,7 +46,7 @@ unsigned long tor_tls_get_n_bytes_written(tor_tls_t *tls);
/* Log and abort if there are unhandled TLS errors in OpenSSL's error stack.
*/
-#define check_no_tls_errors() _check_no_tls_errors(_SHORT_FILE_,__LINE__)
+#define check_no_tls_errors() _check_no_tls_errors(__FILE__,__LINE__)
void _check_no_tls_errors(const char *fname, int line);
diff --git a/src/common/util.c b/src/common/util.c
index 09fdd98416..dd289ff258 100644
--- a/src/common/util.c
+++ b/src/common/util.c
@@ -127,7 +127,7 @@ _tor_malloc(size_t size DMALLOC_PARAMS)
result = dmalloc_malloc(file, line, size, DMALLOC_FUNC_MALLOC, 0, 0);
if (!result) {
- err("Out of memory. Dying.");
+ err(LD_MM,"Out of memory. Dying.");
/* XXX if these functions die within a worker process, they won't
* call spawn_exit */
exit(1);
@@ -159,7 +159,7 @@ _tor_realloc(void *ptr, size_t size DMALLOC_PARAMS)
result = dmalloc_realloc(file, line, ptr, size, DMALLOC_FUNC_REALLOC, 0);
if (!result) {
- err("Out of memory. Dying.");
+ err(LD_MM,"Out of memory. Dying.");
exit(1);
}
return result;
@@ -177,7 +177,7 @@ _tor_strdup(const char *s DMALLOC_PARAMS)
dup = dmalloc_strdup(file, line, s, 0);
if (!dup) {
- err("Out of memory. Dying.");
+ err(LD_MM,"Out of memory. Dying.");
exit(1);
}
return dup;
@@ -1594,7 +1594,7 @@ start_daemon(void)
pipe(daemon_filedes);
pid = fork();
if (pid < 0) {
- err("fork failed. Exiting.");
+ err(LD_GENERAL,"fork failed. Exiting.");
exit(1);
}
if (pid) { /* Parent */
@@ -1649,14 +1649,14 @@ finish_daemon(const char *desired_cwd)
desired_cwd = "/";
/* Don't hold the wrong FS mounted */
if (chdir(desired_cwd) < 0) {
- err("chdir to \"%s\" failed. Exiting.",desired_cwd);
+ err(LD_GENERAL,"chdir to \"%s\" failed. Exiting.",desired_cwd);
exit(1);
}
nullfd = open("/dev/null",
O_CREAT | O_RDWR | O_APPEND);
if (nullfd < 0) {
- err("/dev/null can't be opened. Exiting.");
+ err(LD_GENERAL,"/dev/null can't be opened. Exiting.");
exit(1);
}
/* close fds linking to invoking terminal, but
@@ -1666,7 +1666,7 @@ finish_daemon(const char *desired_cwd)
if (dup2(nullfd,0) < 0 ||
dup2(nullfd,1) < 0 ||
dup2(nullfd,2) < 0) {
- err("dup2 failed. Exiting.");
+ err(LD_GENERAL,"dup2 failed. Exiting.");
exit(1);
}
if (nullfd > 2)
diff --git a/src/common/util.h b/src/common/util.h
index 1019b5807d..c80bbd6666 100644
--- a/src/common/util.h
+++ b/src/common/util.h
@@ -39,23 +39,23 @@
#error "Sorry; we don't support building with NDEBUG."
#else
#ifdef OLD_LOG_INTERFACE
-#define tor_assert(expr) do { \
- if (!(expr)) { \
- log(LOG_ERR, "%s:%d: %s: Assertion %s failed; aborting.", \
- _SHORT_FILE_, __LINE__, __FUNCTION__, #expr); \
- fprintf(stderr,"%s:%d %s: Assertion %s failed; aborting.\n", \
- _SHORT_FILE_, __LINE__, __FUNCTION__, #expr); \
- abort(); /* unreached */ \
- } } while (0)
+#define tor_assert(expr) do { \
+ if (!(expr)) { \
+ log(LOG_ERR, "%s:%d: %s: Assertion %s failed; aborting.", \
+ _SHORT_FILE_, __LINE__, __FUNCTION__, #expr); \
+ fprintf(stderr,"%s:%d %s: Assertion %s failed; aborting.\n", \
+ _SHORT_FILE_, __LINE__, __FUNCTION__, #expr); \
+ abort(); /* unreached */ \
+ } } while (0)
#else
-#define tor_assert(expr) do { \
- if (!(expr)) { \
- log(LOG_ERR, LD_GENERAL, "%s:%d: %s: Assertion %s failed; aborting.", \
- _SHORT_FILE_, __LINE__, __FUNCTION__, #expr); \
- fprintf(stderr,"%s:%d %s: Assertion %s failed; aborting.\n", \
- _SHORT_FILE_, __LINE__, __FUNCTION__, #expr); \
- abort(); /* unreached */ \
- } } while (0)
+#define tor_assert(expr) do { \
+ if (!(expr)) { \
+ log(LOG_ERR, LD_BUG, "%s:%d: %s: Assertion %s failed; aborting.", \
+ _SHORT_FILE_, __LINE__, __FUNCTION__, #expr); \
+ fprintf(stderr,"%s:%d %s: Assertion %s failed; aborting.\n", \
+ _SHORT_FILE_, __LINE__, __FUNCTION__, #expr); \
+ abort(); /* unreached */ \
+ } } while (0)
#endif
#endif