aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoão Valverde <j@v6e.pt>2021-12-02 16:33:45 +0000
committerJoão Valverde <j@v6e.pt>2021-12-03 12:30:53 +0000
commite921b804d0174b2bb5a118df8b454c0dc2e69369 (patch)
tree641c6457402144c306a6872bb8d39690738dc9c5
parent5d30f773917f08cecee64d31db97ef420f8ef647 (diff)
Fix logging with extcaps
Extcaps require a log file when invoked in child mode. It also has a specific flag to enable debugging, other that the wslog options. Fix the logging to: 1. Enable debug log level if --debug is used. 2. Do not emit messages to the stderr if debug is enabled. This brings extcap logging to the same feature level it had before wslog replaced GLib logging.
-rw-r--r--debian/libwsutil0.symbols3
-rw-r--r--dumpcap.c6
-rw-r--r--extcap/androiddump.c5
-rw-r--r--extcap/ciscodump.c5
-rw-r--r--extcap/dpauxmon.c5
-rw-r--r--extcap/etwdump.c5
-rw-r--r--extcap/extcap-base.c25
-rw-r--r--extcap/extcap-base.h1
-rw-r--r--extcap/randpktdump.c5
-rw-r--r--extcap/sdjournal.c5
-rw-r--r--extcap/sshdump.c5
-rw-r--r--extcap/udpdump.c5
-rw-r--r--ui/console.c4
-rw-r--r--wsutil/wslog.c18
-rw-r--r--wsutil/wslog.h12
15 files changed, 63 insertions, 46 deletions
diff --git a/debian/libwsutil0.symbols b/debian/libwsutil0.symbols
index 7d58b374c4..30938f2f0c 100644
--- a/debian/libwsutil0.symbols
+++ b/debian/libwsutil0.symbols
@@ -380,7 +380,8 @@ libwsutil.so.0 libwsutil0 #MINVER#
ws_log@Base 3.5.0
ws_log_add_custom_file@Base 3.5.0
ws_log_buffer_full@Base 3.5.1
- ws_log_default_writer@Base 3.5.0
+ ws_log_console_writer@Base 3.7.0
+ ws_log_file_writer@Base 3.7.0
ws_log_full@Base 3.5.0
ws_log_get_level@Base 3.5.0
ws_log_init@Base 3.5.0
diff --git a/dumpcap.c b/dumpcap.c
index 0c92995106..2691fb6958 100644
--- a/dumpcap.c
+++ b/dumpcap.c
@@ -5581,10 +5581,10 @@ dumpcap_log_writer(const char *domain, enum ws_log_level level,
{
#if defined(DEBUG_DUMPCAP) || defined(DEBUG_CHILD_DUMPCAP)
#ifdef DEBUG_DUMPCAP
- ws_log_default_writer(domain, level, timestamp, file, line, func, user_format, user_ap, NULL);
+ ws_log_console_writer(domain, level, timestamp, file, line, func, user_format, user_ap, NULL);
#endif
#ifdef DEBUG_CHILD_DUMPCAP
- ws_log_default_writer(domain, level, timestamp, file, line, func, user_format, user_ap, NULL);
+ ws_log_console_writer(domain, level, timestamp, file, line, func, user_format, user_ap, NULL);
#endif
#else
/* Messages goto stderr or to parent especially formatted if dumpcap
@@ -5594,7 +5594,7 @@ dumpcap_log_writer(const char *domain, enum ws_log_level level,
sync_pipe_errmsg_to_parent(2, msg, "");
g_free(msg);
} else {
- ws_log_default_writer(domain, level, timestamp, file, line, func, user_format, user_ap, NULL);
+ ws_log_console_writer(domain, level, timestamp, file, line, func, user_format, user_ap);
}
#endif
}
diff --git a/extcap/androiddump.c b/extcap/androiddump.c
index 278e4b75fd..97cfbf19a0 100644
--- a/extcap/androiddump.c
+++ b/extcap/androiddump.c
@@ -2527,10 +2527,7 @@ int main(int argc, char *argv[]) {
cmdarg_err_init(androiddump_cmdarg_err, androiddump_cmdarg_err);
/* Initialize log handler early so we can have proper logging during startup. */
- ws_log_init("androiddump", NULL);
-
- /* Early logging command-line initialization. */
- ws_log_parse_args(&argc, argv, NULL, LOG_ARGS_NOEXIT);
+ extcap_log_init("androiddump");
/*
* Get credential information for later use.
diff --git a/extcap/ciscodump.c b/extcap/ciscodump.c
index abcfc6b270..182ff0b369 100644
--- a/extcap/ciscodump.c
+++ b/extcap/ciscodump.c
@@ -535,10 +535,7 @@ int main(int argc, char *argv[])
char* help_header = NULL;
/* Initialize log handler early so we can have proper logging during startup. */
- ws_log_init("ciscodump", NULL);
-
- /* Early logging command-line initialization. */
- ws_log_parse_args(&argc, argv, NULL, LOG_ARGS_NOEXIT);
+ extcap_log_init("ciscodump");
/*
* Get credential information for later use.
diff --git a/extcap/dpauxmon.c b/extcap/dpauxmon.c
index f33819048f..27941295b6 100644
--- a/extcap/dpauxmon.c
+++ b/extcap/dpauxmon.c
@@ -495,10 +495,7 @@ int main(int argc, char *argv[])
char* help_header = NULL;
/* Initialize log handler early so we can have proper logging during startup. */
- ws_log_init("dpauxmon", NULL);
-
- /* Early logging command-line initialization. */
- ws_log_parse_args(&argc, argv, NULL, LOG_ARGS_NOEXIT);
+ extcap_log_init("dpauxmon");
/*
* Get credential information for later use.
diff --git a/extcap/etwdump.c b/extcap/etwdump.c
index f8b9a68a3b..fd0d1a03c0 100644
--- a/extcap/etwdump.c
+++ b/extcap/etwdump.c
@@ -123,10 +123,7 @@ int main(int argc, char* argv[])
char* help_header = NULL;
/* Initialize log handler early so we can have proper logging during startup. */
- ws_log_init("etwdump", NULL);
-
- /* Early logging command-line initialization. */
- ws_log_parse_args(&argc, argv, NULL, LOG_ARGS_NOEXIT);
+ extcap_log_init("etwdump");
/*
* Get credential information for later use.
diff --git a/extcap/extcap-base.c b/extcap/extcap-base.c
index 2ec44fe82a..2ebbad9665 100644
--- a/extcap/extcap-base.c
+++ b/extcap/extcap-base.c
@@ -43,6 +43,8 @@ typedef struct _extcap_option {
char * optdesc;
} extcap_option_t;
+static FILE *custom_log = NULL;
+
void extcap_base_register_interface(extcap_parameters * extcap, const char * interface, const char * ifdescription, uint16_t dlt, const char * dltdescription )
{
extcap_base_register_interface_ext(extcap, interface, ifdescription, dlt, NULL, dltdescription );
@@ -104,6 +106,26 @@ void extcap_base_set_running_with(extcap_parameters * extcap, const char *fmt, .
va_end(ap);
}
+static void extcap_custom_log(const char *domain, enum ws_log_level level,
+ ws_log_time_t timestamp,
+ const char *file, int line, const char *func,
+ const char *user_format, va_list user_ap,
+ void *user_data _U_)
+{
+ if (level <= LOG_LEVEL_DEBUG) {
+ if (!custom_log)
+ return;
+ ws_log_file_writer(custom_log, domain, level, timestamp, file, line, func, user_format, user_ap);
+ } else {
+ ws_log_console_writer(domain, level, timestamp, file, line, func, user_format, user_ap);
+ }
+}
+
+void extcap_log_init(const char *progname)
+{
+ ws_log_init_with_writer(progname, extcap_custom_log, NULL);
+}
+
uint8_t extcap_base_parse_options(extcap_parameters * extcap, int result, char * optargument)
{
uint8_t ret = 1;
@@ -111,6 +133,7 @@ uint8_t extcap_base_parse_options(extcap_parameters * extcap, int result, char *
switch (result) {
case EXTCAP_OPT_DEBUG:
extcap->debug = TRUE;
+ ws_log_set_level(LOG_LEVEL_DEBUG);
break;
case EXTCAP_OPT_DEBUG_FILE:
extcap_init_custom_log(optargument);
@@ -304,13 +327,11 @@ void extcap_help_add_header(extcap_parameters * extcap, char * help_header)
void extcap_init_custom_log(const char* filename)
{
- FILE *custom_log;
if (!filename || strlen(filename) == 0)
return;
custom_log = fopen(filename, "w");
if (!custom_log)
ws_error("Can't open custom log file: %s (%s)", filename, strerror(errno));
- ws_log_add_custom_file(custom_log);
}
void extcap_config_debug(unsigned* count)
diff --git a/extcap/extcap-base.h b/extcap/extcap-base.h
index d405e2896d..3a456fafc5 100644
--- a/extcap/extcap-base.h
+++ b/extcap/extcap-base.h
@@ -96,6 +96,7 @@ void extcap_cmdline_debug(char** ar, const unsigned n);
void extcap_init_custom_log(const char* filename);
void extcap_config_debug(unsigned* count);
void extcap_base_help(void);
+void extcap_log_init(const char *progname);
#endif
diff --git a/extcap/randpktdump.c b/extcap/randpktdump.c
index 73d4db6012..1da3443bac 100644
--- a/extcap/randpktdump.c
+++ b/extcap/randpktdump.c
@@ -154,10 +154,7 @@ int main(int argc, char *argv[])
cmdarg_err_init(randpktdump_cmdarg_err, randpktdump_cmdarg_err);
/* Initialize log handler early so we can have proper logging during startup. */
- ws_log_init("randpktdump", NULL);
-
- /* Early logging command-line initialization. */
- ws_log_parse_args(&argc, argv, NULL, LOG_ARGS_NOEXIT);
+ extcap_log_init("randpktdump");
/*
* Get credential information for later use.
diff --git a/extcap/sdjournal.c b/extcap/sdjournal.c
index 0b29727ee3..90a330c64c 100644
--- a/extcap/sdjournal.c
+++ b/extcap/sdjournal.c
@@ -342,10 +342,7 @@ int main(int argc, char **argv)
char* help_header = NULL;
/* Initialize log handler early so we can have proper logging during startup. */
- ws_log_init("sdjournal", NULL);
-
- /* Early logging command-line initialization. */
- ws_log_parse_args(&argc, argv, NULL, LOG_ARGS_NOEXIT);
+ extcap_log_init("sdjournal");
/*
* Get credential information for later use.
diff --git a/extcap/sshdump.c b/extcap/sshdump.c
index e7390ee3e5..ed5fad81ca 100644
--- a/extcap/sshdump.c
+++ b/extcap/sshdump.c
@@ -363,10 +363,7 @@ int main(int argc, char *argv[])
gchar* interface_description = g_strdup("SSH remote capture");
/* Initialize log handler early so we can have proper logging during startup. */
- ws_log_init("sshdump", NULL);
-
- /* Early logging command-line initialization. */
- ws_log_parse_args(&argc, argv, NULL, LOG_ARGS_NOEXIT);
+ extcap_log_init("sshdump");
sshdump_extcap_interface = g_path_get_basename(argv[0]);
diff --git a/extcap/udpdump.c b/extcap/udpdump.c
index 50cbd75854..283f8f0930 100644
--- a/extcap/udpdump.c
+++ b/extcap/udpdump.c
@@ -358,10 +358,7 @@ int main(int argc, char *argv[])
char* port_msg = NULL;
/* Initialize log handler early so we can have proper logging during startup. */
- ws_log_init("udpdump", NULL);
-
- /* Early logging command-line initialization. */
- ws_log_parse_args(&argc, argv, NULL, LOG_ARGS_NOEXIT);
+ extcap_log_init("udpdump");
/*
* Get credential information for later use.
diff --git a/ui/console.c b/ui/console.c
index 67c7efbd7e..b8d185fea5 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -37,8 +37,8 @@ console_log_writer(const char *domain, enum ws_log_level level,
(void)fatal;
#endif /* _WIN32 */
- ws_log_default_writer(domain, level, timestamp, file, line, func,
- user_format, user_ap, NULL);
+ ws_log_console_writer(domain, level, timestamp, file, line, func,
+ user_format, user_ap);
#ifdef _WIN32
if (fatal) {
diff --git a/wsutil/wslog.c b/wsutil/wslog.c
index 01332f651a..0724748345 100644
--- a/wsutil/wslog.c
+++ b/wsutil/wslog.c
@@ -939,11 +939,23 @@ void ws_log_buffer_full(const char *domain, enum ws_log_level level,
}
-void ws_log_default_writer(const char *domain, enum ws_log_level level,
+void ws_log_file_writer(FILE *fp, const char *domain, enum ws_log_level level,
ws_log_time_t timestamp,
const char *file, int line, const char *func,
- const char *user_format, va_list user_ap,
- void *user_data _U_)
+ const char *user_format, va_list user_ap)
+{
+ log_write_do_work(fp, FALSE,
+ get_localtime(timestamp.tv_sec, NULL),
+ timestamp.tv_nsec,
+ domain, level, file, line, func,
+ user_format, user_ap);
+}
+
+
+void ws_log_console_writer(const char *domain, enum ws_log_level level,
+ ws_log_time_t timestamp,
+ const char *file, int line, const char *func,
+ const char *user_format, va_list user_ap)
{
log_write_do_work(stderr, color_enabled,
get_localtime(timestamp.tv_sec, NULL),
diff --git a/wsutil/wslog.h b/wsutil/wslog.h
index e52c18625b..0af6d517b0 100644
--- a/wsutil/wslog.h
+++ b/wsutil/wslog.h
@@ -56,11 +56,17 @@ typedef void (ws_log_writer_free_data_cb)(void *user_data);
WS_DLL_PUBLIC
-void ws_log_default_writer(const char *domain, enum ws_log_level level,
+void ws_log_file_writer(FILE *fp, const char *domain, enum ws_log_level level,
ws_log_time_t timestamp,
const char *file, int line, const char *func,
- const char *user_format, va_list user_ap,
- void *user_data);
+ const char *user_format, va_list user_ap);
+
+
+WS_DLL_PUBLIC
+void ws_log_console_writer(const char *domain, enum ws_log_level level,
+ ws_log_time_t timestamp,
+ const char *file, int line, const char *func,
+ const char *user_format, va_list user_ap);
/** Convert a numerical level to its string representation. */