mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 12:23:32 +01:00
Merge branch 'maint-0.4.1'
This commit is contained in:
commit
cfb15d513d
4
changes/bug31080_041
Normal file
4
changes/bug31080_041
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
o Minor bugfixes (logging):
|
||||||
|
- Fix a conflict between the flag used for messaging-domain
|
||||||
|
log messages, and the LD_NO_MOCK testing flag. Fixes bug 31080;
|
||||||
|
bugfix on 0.4.1.1-alpha.
|
@ -1287,7 +1287,7 @@ enable_control_logging(void)
|
|||||||
|
|
||||||
/** We got a log message: tell any interested control connections. */
|
/** We got a log message: tell any interested control connections. */
|
||||||
void
|
void
|
||||||
control_event_logmsg(int severity, uint32_t domain, const char *msg)
|
control_event_logmsg(int severity, log_domain_mask_t domain, const char *msg)
|
||||||
{
|
{
|
||||||
int event;
|
int event;
|
||||||
|
|
||||||
|
@ -128,7 +128,8 @@ int control_event_circ_bandwidth_used_for_circ(origin_circuit_t *ocirc);
|
|||||||
int control_event_conn_bandwidth(connection_t *conn);
|
int control_event_conn_bandwidth(connection_t *conn);
|
||||||
int control_event_conn_bandwidth_used(void);
|
int control_event_conn_bandwidth_used(void);
|
||||||
int control_event_circuit_cell_stats(void);
|
int control_event_circuit_cell_stats(void);
|
||||||
void control_event_logmsg(int severity, uint32_t domain, const char *msg);
|
void control_event_logmsg(int severity, log_domain_mask_t domain,
|
||||||
|
const char *msg);
|
||||||
void control_event_logmsg_pending(void);
|
void control_event_logmsg_pending(void);
|
||||||
int control_event_descriptors_changed(smartlist_t *routers);
|
int control_event_descriptors_changed(smartlist_t *routers);
|
||||||
int control_event_address_mapped(const char *from, const char *to,
|
int control_event_address_mapped(const char *from, const char *to,
|
||||||
|
@ -3,5 +3,6 @@
|
|||||||
noinst_HEADERS += \
|
noinst_HEADERS += \
|
||||||
src/lib/defs/dh_sizes.h \
|
src/lib/defs/dh_sizes.h \
|
||||||
src/lib/defs/digest_sizes.h \
|
src/lib/defs/digest_sizes.h \
|
||||||
|
src/lib/defs/logging_types.h \
|
||||||
src/lib/defs/time.h \
|
src/lib/defs/time.h \
|
||||||
src/lib/defs/x25519_sizes.h
|
src/lib/defs/x25519_sizes.h
|
||||||
|
23
src/lib/defs/logging_types.h
Normal file
23
src/lib/defs/logging_types.h
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
/* Copyright (c) 2001, Matej Pfajfar.
|
||||||
|
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||||
|
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||||
|
* Copyright (c) 2007-2019, The Tor Project, Inc. */
|
||||||
|
/* See LICENSE for licensing information */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file logging_types.h
|
||||||
|
*
|
||||||
|
* \brief Global definition for types used by logging systems.
|
||||||
|
**/
|
||||||
|
|
||||||
|
#ifndef TOR_LOGGING_TYPES_H
|
||||||
|
#define TOR_LOGGING_TYPES_H
|
||||||
|
|
||||||
|
/* We define this here so that it can be used both by backtrace.h and
|
||||||
|
* log.h.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** Mask of zero or more log domains, OR'd together. */
|
||||||
|
typedef uint64_t log_domain_mask_t;
|
||||||
|
|
||||||
|
#endif
|
@ -1,5 +1,6 @@
|
|||||||
orconfig.h
|
orconfig.h
|
||||||
lib/cc/*.h
|
lib/cc/*.h
|
||||||
|
lib/defs/*.h
|
||||||
lib/err/*.h
|
lib/err/*.h
|
||||||
lib/subsys/*.h
|
lib/subsys/*.h
|
||||||
lib/version/*.h
|
lib/version/*.h
|
@ -115,7 +115,7 @@ clean_backtrace(void **stack, size_t depth, const ucontext_t *ctx)
|
|||||||
* that with a backtrace log. Send messages via the tor_log function at
|
* that with a backtrace log. Send messages via the tor_log function at
|
||||||
* logger". */
|
* logger". */
|
||||||
void
|
void
|
||||||
log_backtrace_impl(int severity, int domain, const char *msg,
|
log_backtrace_impl(int severity, log_domain_mask_t domain, const char *msg,
|
||||||
tor_log_fn logger)
|
tor_log_fn logger)
|
||||||
{
|
{
|
||||||
size_t depth;
|
size_t depth;
|
||||||
@ -240,7 +240,7 @@ remove_bt_handler(void)
|
|||||||
|
|
||||||
#ifdef NO_BACKTRACE_IMPL
|
#ifdef NO_BACKTRACE_IMPL
|
||||||
void
|
void
|
||||||
log_backtrace_impl(int severity, int domain, const char *msg,
|
log_backtrace_impl(int severity, log_domain_mask_t domain, const char *msg,
|
||||||
tor_log_fn logger)
|
tor_log_fn logger)
|
||||||
{
|
{
|
||||||
logger(severity, domain, "%s. (Stack trace not available)", msg);
|
logger(severity, domain, "%s. (Stack trace not available)", msg);
|
||||||
|
@ -12,11 +12,14 @@
|
|||||||
|
|
||||||
#include "orconfig.h"
|
#include "orconfig.h"
|
||||||
#include "lib/cc/compat_compiler.h"
|
#include "lib/cc/compat_compiler.h"
|
||||||
|
#include "lib/cc/torint.h"
|
||||||
|
#include "lib/defs/logging_types.h"
|
||||||
|
|
||||||
typedef void (*tor_log_fn)(int, unsigned, const char *fmt, ...)
|
typedef void (*tor_log_fn)(int, log_domain_mask_t, const char *fmt, ...)
|
||||||
CHECK_PRINTF(3,4);
|
CHECK_PRINTF(3,4);
|
||||||
|
|
||||||
void log_backtrace_impl(int severity, int domain, const char *msg,
|
void log_backtrace_impl(int severity, log_domain_mask_t domain,
|
||||||
|
const char *msg,
|
||||||
tor_log_fn logger);
|
tor_log_fn logger);
|
||||||
int configure_backtrace_handler(const char *tor_version);
|
int configure_backtrace_handler(const char *tor_version);
|
||||||
void clean_up_backtrace_handler(void);
|
void clean_up_backtrace_handler(void);
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
orconfig.h
|
orconfig.h
|
||||||
|
|
||||||
lib/cc/*.h
|
lib/cc/*.h
|
||||||
|
lib/defs/*.h
|
||||||
lib/smartlist_core/*.h
|
lib/smartlist_core/*.h
|
||||||
lib/err/*.h
|
lib/err/*.h
|
||||||
lib/fdio/*.h
|
lib/fdio/*.h
|
||||||
|
@ -1022,7 +1022,7 @@ flush_pending_log_callbacks(void)
|
|||||||
do {
|
do {
|
||||||
SMARTLIST_FOREACH_BEGIN(messages, pending_log_message_t *, msg) {
|
SMARTLIST_FOREACH_BEGIN(messages, pending_log_message_t *, msg) {
|
||||||
const int severity = msg->severity;
|
const int severity = msg->severity;
|
||||||
const int domain = msg->domain;
|
const log_domain_mask_t domain = msg->domain;
|
||||||
for (lf = logfiles; lf; lf = lf->next) {
|
for (lf = logfiles; lf; lf = lf->next) {
|
||||||
if (! lf->callback || lf->seems_dead ||
|
if (! lf->callback || lf->seems_dead ||
|
||||||
! (lf->severities->masks[SEVERITY_MASK_IDX(severity)] & domain)) {
|
! (lf->severities->masks[SEVERITY_MASK_IDX(severity)] & domain)) {
|
||||||
@ -1275,6 +1275,8 @@ static const char *domain_list[] = {
|
|||||||
|
|
||||||
CTASSERT(ARRAY_LENGTH(domain_list) == N_LOGGING_DOMAINS + 1);
|
CTASSERT(ARRAY_LENGTH(domain_list) == N_LOGGING_DOMAINS + 1);
|
||||||
|
|
||||||
|
CTASSERT((UINT64_C(1)<<(N_LOGGING_DOMAINS-1)) < LOWEST_RESERVED_LD_FLAG_);
|
||||||
|
|
||||||
/** Return a bitmask for the log domain for which <b>domain</b> is the name,
|
/** Return a bitmask for the log domain for which <b>domain</b> is the name,
|
||||||
* or 0 if there is no such name. */
|
* or 0 if there is no such name. */
|
||||||
static log_domain_mask_t
|
static log_domain_mask_t
|
||||||
@ -1375,7 +1377,7 @@ parse_log_severity_config(const char **cfg_ptr,
|
|||||||
if (!strcmp(domain, "*")) {
|
if (!strcmp(domain, "*")) {
|
||||||
domains = ~0u;
|
domains = ~0u;
|
||||||
} else {
|
} else {
|
||||||
int d;
|
log_domain_mask_t d;
|
||||||
int negate=0;
|
int negate=0;
|
||||||
if (*domain == '~') {
|
if (*domain == '~') {
|
||||||
negate = 1;
|
negate = 1;
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include "lib/cc/torint.h"
|
#include "lib/cc/torint.h"
|
||||||
#include "lib/cc/compat_compiler.h"
|
#include "lib/cc/compat_compiler.h"
|
||||||
|
#include "lib/defs/logging_types.h"
|
||||||
#include "lib/testsupport/testsupport.h"
|
#include "lib/testsupport/testsupport.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYSLOG_H
|
#ifdef HAVE_SYSLOG_H
|
||||||
@ -56,82 +57,81 @@
|
|||||||
/* Logging domains */
|
/* Logging domains */
|
||||||
|
|
||||||
/** Catch-all for miscellaneous events and fatal errors. */
|
/** Catch-all for miscellaneous events and fatal errors. */
|
||||||
#define LD_GENERAL (1u<<0)
|
#define LD_GENERAL (UINT64_C(1)<<0)
|
||||||
/** The cryptography subsystem. */
|
/** The cryptography subsystem. */
|
||||||
#define LD_CRYPTO (1u<<1)
|
#define LD_CRYPTO (UINT64_C(1)<<1)
|
||||||
/** Networking. */
|
/** Networking. */
|
||||||
#define LD_NET (1u<<2)
|
#define LD_NET (UINT64_C(1)<<2)
|
||||||
/** Parsing and acting on our configuration. */
|
/** Parsing and acting on our configuration. */
|
||||||
#define LD_CONFIG (1u<<3)
|
#define LD_CONFIG (UINT64_C(1)<<3)
|
||||||
/** Reading and writing from the filesystem. */
|
/** Reading and writing from the filesystem. */
|
||||||
#define LD_FS (1u<<4)
|
#define LD_FS (UINT64_C(1)<<4)
|
||||||
/** Other servers' (non)compliance with the Tor protocol. */
|
/** Other servers' (non)compliance with the Tor protocol. */
|
||||||
#define LD_PROTOCOL (1u<<5)
|
#define LD_PROTOCOL (UINT64_C(1)<<5)
|
||||||
/** Memory management. */
|
/** Memory management. */
|
||||||
#define LD_MM (1u<<6)
|
#define LD_MM (UINT64_C(1)<<6)
|
||||||
/** HTTP implementation. */
|
/** HTTP implementation. */
|
||||||
#define LD_HTTP (1u<<7)
|
#define LD_HTTP (UINT64_C(1)<<7)
|
||||||
/** Application (socks) requests. */
|
/** Application (socks) requests. */
|
||||||
#define LD_APP (1u<<8)
|
#define LD_APP (UINT64_C(1)<<8)
|
||||||
/** Communication via the controller protocol. */
|
/** Communication via the controller protocol. */
|
||||||
#define LD_CONTROL (1u<<9)
|
#define LD_CONTROL (UINT64_C(1)<<9)
|
||||||
/** Building, using, and managing circuits. */
|
/** Building, using, and managing circuits. */
|
||||||
#define LD_CIRC (1u<<10)
|
#define LD_CIRC (UINT64_C(1)<<10)
|
||||||
/** Hidden services. */
|
/** Hidden services. */
|
||||||
#define LD_REND (1u<<11)
|
#define LD_REND (UINT64_C(1)<<11)
|
||||||
/** Internal errors in this Tor process. */
|
/** Internal errors in this Tor process. */
|
||||||
#define LD_BUG (1u<<12)
|
#define LD_BUG (UINT64_C(1)<<12)
|
||||||
/** Learning and using information about Tor servers. */
|
/** Learning and using information about Tor servers. */
|
||||||
#define LD_DIR (1u<<13)
|
#define LD_DIR (UINT64_C(1)<<13)
|
||||||
/** Learning and using information about Tor servers. */
|
/** Learning and using information about Tor servers. */
|
||||||
#define LD_DIRSERV (1u<<14)
|
#define LD_DIRSERV (UINT64_C(1)<<14)
|
||||||
/** Onion routing protocol. */
|
/** Onion routing protocol. */
|
||||||
#define LD_OR (1u<<15)
|
#define LD_OR (UINT64_C(1)<<15)
|
||||||
/** Generic edge-connection functionality. */
|
/** Generic edge-connection functionality. */
|
||||||
#define LD_EDGE (1u<<16)
|
#define LD_EDGE (UINT64_C(1)<<16)
|
||||||
#define LD_EXIT LD_EDGE
|
#define LD_EXIT LD_EDGE
|
||||||
/** Bandwidth accounting. */
|
/** Bandwidth accounting. */
|
||||||
#define LD_ACCT (1u<<17)
|
#define LD_ACCT (UINT64_C(1)<<17)
|
||||||
/** Router history */
|
/** Router history */
|
||||||
#define LD_HIST (1u<<18)
|
#define LD_HIST (UINT64_C(1)<<18)
|
||||||
/** OR handshaking */
|
/** OR handshaking */
|
||||||
#define LD_HANDSHAKE (1u<<19)
|
#define LD_HANDSHAKE (UINT64_C(1)<<19)
|
||||||
/** Heartbeat messages */
|
/** Heartbeat messages */
|
||||||
#define LD_HEARTBEAT (1u<<20)
|
#define LD_HEARTBEAT (UINT64_C(1)<<20)
|
||||||
/** Abstract channel_t code */
|
/** Abstract channel_t code */
|
||||||
#define LD_CHANNEL (1u<<21)
|
#define LD_CHANNEL (UINT64_C(1)<<21)
|
||||||
/** Scheduler */
|
/** Scheduler */
|
||||||
#define LD_SCHED (1u<<22)
|
#define LD_SCHED (UINT64_C(1)<<22)
|
||||||
/** Guard nodes */
|
/** Guard nodes */
|
||||||
#define LD_GUARD (1u<<23)
|
#define LD_GUARD (UINT64_C(1)<<23)
|
||||||
/** Generation and application of consensus diffs. */
|
/** Generation and application of consensus diffs. */
|
||||||
#define LD_CONSDIFF (1u<<24)
|
#define LD_CONSDIFF (UINT64_C(1)<<24)
|
||||||
/** Denial of Service mitigation. */
|
/** Denial of Service mitigation. */
|
||||||
#define LD_DOS (1u<<25)
|
#define LD_DOS (UINT64_C(1)<<25)
|
||||||
/** Processes */
|
/** Processes */
|
||||||
#define LD_PROCESS (1u<<26)
|
#define LD_PROCESS (UINT64_C(1)<<26)
|
||||||
/** Pluggable Transports. */
|
/** Pluggable Transports. */
|
||||||
#define LD_PT (1u<<27)
|
#define LD_PT (UINT64_C(1)<<27)
|
||||||
/** Bootstrap tracker. */
|
/** Bootstrap tracker. */
|
||||||
#define LD_BTRACK (1u<<28)
|
#define LD_BTRACK (UINT64_C(1)<<28)
|
||||||
/** Message-passing backend. */
|
/** Message-passing backend. */
|
||||||
#define LD_MESG (1u<<29)
|
#define LD_MESG (UINT64_C(1)<<29)
|
||||||
#define N_LOGGING_DOMAINS 30
|
#define N_LOGGING_DOMAINS 30
|
||||||
|
|
||||||
|
/** First bit that is reserved in log_domain_mask_t for non-domain flags. */
|
||||||
|
#define LOWEST_RESERVED_LD_FLAG_ (UINT64_C(1)<<61)
|
||||||
|
#ifdef TOR_UNIT_TESTS
|
||||||
|
/** This log message should not be intercepted by mock_saving_logv */
|
||||||
|
#define LD_NO_MOCK (UINT64_C(1)<<61)
|
||||||
|
#endif
|
||||||
|
|
||||||
/** This log message is not safe to send to a callback-based logger
|
/** This log message is not safe to send to a callback-based logger
|
||||||
* immediately. Used as a flag, not a log domain. */
|
* immediately. Used as a flag, not a log domain. */
|
||||||
#define LD_NOCB (1u<<31)
|
#define LD_NOCB (UINT64_C(1)<<62)
|
||||||
/** This log message should not include a function name, even if it otherwise
|
/** This log message should not include a function name, even if it otherwise
|
||||||
* would. Used as a flag, not a log domain. */
|
* would. Used as a flag, not a log domain. */
|
||||||
#define LD_NOFUNCNAME (1u<<30)
|
#define LD_NOFUNCNAME (UINT64_C(1)<<63)
|
||||||
|
|
||||||
#ifdef TOR_UNIT_TESTS
|
|
||||||
/** This log message should not be intercepted by mock_saving_logv */
|
|
||||||
#define LD_NO_MOCK (1u<<29)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** Mask of zero or more log domains, OR'd together. */
|
|
||||||
typedef uint32_t log_domain_mask_t;
|
|
||||||
|
|
||||||
/** Configures which severities are logged for each logging domain for a given
|
/** Configures which severities are logged for each logging domain for a given
|
||||||
* log target. */
|
* log target. */
|
||||||
@ -142,7 +142,8 @@ typedef struct log_severity_list_t {
|
|||||||
} log_severity_list_t;
|
} log_severity_list_t;
|
||||||
|
|
||||||
/** Callback type used for add_callback_log. */
|
/** Callback type used for add_callback_log. */
|
||||||
typedef void (*log_callback)(int severity, uint32_t domain, const char *msg);
|
typedef void (*log_callback)(int severity, log_domain_mask_t domain,
|
||||||
|
const char *msg);
|
||||||
|
|
||||||
void init_logging(int disable_startup_queue);
|
void init_logging(int disable_startup_queue);
|
||||||
int parse_log_level(const char *level);
|
int parse_log_level(const char *level);
|
||||||
|
@ -99,14 +99,14 @@ pub mod log {
|
|||||||
/// Domain log types. These mirror definitions in src/lib/log/log.h
|
/// Domain log types. These mirror definitions in src/lib/log/log.h
|
||||||
/// C_RUST_COUPLED: src/lib/log/log.c, log severity types
|
/// C_RUST_COUPLED: src/lib/log/log.c, log severity types
|
||||||
extern "C" {
|
extern "C" {
|
||||||
static LD_NET_: u32;
|
static LD_NET_: u64;
|
||||||
static LD_GENERAL_: u32;
|
static LD_GENERAL_: u64;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Translate Rust defintions of log domain levels to C. This exposes a 1:1
|
/// Translate Rust defintions of log domain levels to C. This exposes a 1:1
|
||||||
/// mapping between types.
|
/// mapping between types.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub unsafe fn translate_domain(domain: LogDomain) -> u32 {
|
pub unsafe fn translate_domain(domain: LogDomain) -> u64 {
|
||||||
match domain {
|
match domain {
|
||||||
LogDomain::Net => LD_NET_,
|
LogDomain::Net => LD_NET_,
|
||||||
LogDomain::General => LD_GENERAL_,
|
LogDomain::General => LD_GENERAL_,
|
||||||
@ -128,7 +128,7 @@ pub mod log {
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
pub fn tor_log_string(
|
pub fn tor_log_string(
|
||||||
severity: c_int,
|
severity: c_int,
|
||||||
domain: u32,
|
domain: u64,
|
||||||
function: *const c_char,
|
function: *const c_char,
|
||||||
string: *const c_char,
|
string: *const c_char,
|
||||||
);
|
);
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dummy_cb_fn(int severity, uint32_t domain, const char *msg)
|
dummy_cb_fn(int severity, log_domain_mask_t domain, const char *msg)
|
||||||
{
|
{
|
||||||
(void)severity; (void)domain; (void)msg;
|
(void)severity; (void)domain; (void)msg;
|
||||||
}
|
}
|
||||||
|
@ -31,14 +31,14 @@
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int severity;
|
int severity;
|
||||||
uint32_t domain;
|
log_domain_mask_t domain;
|
||||||
char *msg;
|
char *msg;
|
||||||
} logmsg_t;
|
} logmsg_t;
|
||||||
|
|
||||||
static smartlist_t *messages = NULL;
|
static smartlist_t *messages = NULL;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
log_cback(int severity, uint32_t domain, const char *msg)
|
log_cback(int severity, log_domain_mask_t domain, const char *msg)
|
||||||
{
|
{
|
||||||
logmsg_t *x = tor_malloc(sizeof(*x));
|
logmsg_t *x = tor_malloc(sizeof(*x));
|
||||||
x->severity = severity;
|
x->severity = severity;
|
||||||
|
@ -243,7 +243,7 @@ tinytest_postfork(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
log_callback_failure(int severity, uint32_t domain, const char *msg)
|
log_callback_failure(int severity, log_domain_mask_t domain, const char *msg)
|
||||||
{
|
{
|
||||||
(void)msg;
|
(void)msg;
|
||||||
if (severity == LOG_ERR || (domain & LD_BUG)) {
|
if (severity == LOG_ERR || (domain & LD_BUG)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user