From d357562c48ac71e2197ea63bc57671a29ba12cf6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 13 Mar 2015 21:07:45 -0500 Subject: [PATCH] =?utf8?q?=C2=B5http-util:=20setup=20gnutls=20logs=20in=20?= =?utf8?q?one=20function?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/journal-remote/journal-gatewayd.c | 7 ++--- src/journal-remote/journal-remote.c | 34 ++++------------------ src/journal-remote/microhttpd-util.c | 42 +++++++++++++++++++++------ src/journal-remote/microhttpd-util.h | 16 +++++----- 4 files changed, 49 insertions(+), 50 deletions(-) diff --git a/src/journal-remote/journal-gatewayd.c b/src/journal-remote/journal-gatewayd.c index 576f7cae7..b4bc8ccf8 100644 --- a/src/journal-remote/journal-gatewayd.c +++ b/src/journal-remote/journal-gatewayd.c @@ -982,10 +982,9 @@ int main(int argc, char *argv[]) { sigbus_install(); -#ifdef HAVE_GNUTLS - gnutls_global_set_log_function(log_func_gnutls); - log_reset_gnutls_level(); -#endif + r = setup_gnutls_logger(NULL); + if (r < 0) + return EXIT_FAILURE; n = sd_listen_fds(1); if (n < 0) { diff --git a/src/journal-remote/journal-remote.c b/src/journal-remote/journal-remote.c index 2e1c798fc..82291a4f7 100644 --- a/src/journal-remote/journal-remote.c +++ b/src/journal-remote/journal-remote.c @@ -1503,31 +1503,6 @@ static int load_certificates(char **key, char **cert, char **trust) { return 0; } -static int setup_gnutls_logger(char **categories) { - if (!arg_listen_http && !arg_listen_https) - return 0; - -#ifdef HAVE_GNUTLS - { - char **cat; - int r; - - gnutls_global_set_log_function(log_func_gnutls); - - if (categories) { - STRV_FOREACH(cat, categories) { - r = log_enable_gnutls_category(*cat); - if (r < 0) - return r; - } - } else - log_reset_gnutls_level(); - } -#endif - - return 0; -} - int main(int argc, char **argv) { RemoteServer s = {}; int r; @@ -1544,9 +1519,12 @@ int main(int argc, char **argv) { if (r <= 0) return r == 0 ? EXIT_SUCCESS : EXIT_FAILURE; - r = setup_gnutls_logger(arg_gnutls_log); - if (r < 0) - return EXIT_FAILURE; + + if (arg_listen_http || arg_listen_https) { + r = setup_gnutls_logger(arg_gnutls_log); + if (r < 0) + return EXIT_FAILURE; + } if (arg_listen_https || https_socket >= 0) if (load_certificates(&key, &cert, &trust) < 0) diff --git a/src/journal-remote/microhttpd-util.c b/src/journal-remote/microhttpd-util.c index b45c38d68..8a11fba04 100644 --- a/src/journal-remote/microhttpd-util.c +++ b/src/journal-remote/microhttpd-util.c @@ -121,7 +121,7 @@ static struct { { {"9", "enc", "int"}, LOG_DEBUG }, }; -void log_func_gnutls(int level, const char *message) { +static void log_func_gnutls(int level, const char *message) { assert_se(message); if (0 <= level && level < (int) ELEMENTSOF(gnutls_log_map)) { @@ -133,7 +133,18 @@ void log_func_gnutls(int level, const char *message) { } } -int log_enable_gnutls_category(const char *cat) { +static void log_reset_gnutls_level(void) { + int i; + + for (i = ELEMENTSOF(gnutls_log_map) - 1; i >= 0; i--) + if (gnutls_log_map[i].enabled) { + log_debug("Setting gnutls log level to %d", i); + gnutls_global_set_log_level(i); + break; + } +} + +static int log_enable_gnutls_category(const char *cat) { unsigned i; if (streq(cat, "all")) { @@ -152,15 +163,22 @@ int log_enable_gnutls_category(const char *cat) { return -EINVAL; } -void log_reset_gnutls_level(void) { - int i; +int setup_gnutls_logger(char **categories) { + char **cat; + int r; - for (i = ELEMENTSOF(gnutls_log_map) - 1; i >= 0; i--) - if (gnutls_log_map[i].enabled) { - log_debug("Setting gnutls log level to %d", i); - gnutls_global_set_log_level(i); - break; + gnutls_global_set_log_function(log_func_gnutls); + + if (categories) { + STRV_FOREACH(cat, categories) { + r = log_enable_gnutls_category(*cat); + if (r < 0) + return r; } + } else + log_reset_gnutls_level(); + + return 0; } static int verify_cert_authorized(gnutls_session_t session) { @@ -300,4 +318,10 @@ int check_permissions(struct MHD_Connection *connection, int *code, char **hostn int check_permissions(struct MHD_Connection *connection, int *code, char **hostname) { return -EPERM; } + +int setup_gnutls_logger(char **categories) { + if (categories) + log_notice("Ignoring specified gnutls logging categories — gnutls not available."); + return 0; +} #endif diff --git a/src/journal-remote/microhttpd-util.h b/src/journal-remote/microhttpd-util.h index c43d7f75a..b2feb9180 100644 --- a/src/journal-remote/microhttpd-util.h +++ b/src/journal-remote/microhttpd-util.h @@ -43,13 +43,11 @@ int mhd_respond_oom(struct MHD_Connection *connection); int check_permissions(struct MHD_Connection *connection, int *code, char **hostname); -#ifdef HAVE_GNUTLS -void log_func_gnutls(int level, const char *message); -int log_enable_gnutls_category(const char *cat); -void log_reset_gnutls_level(void); - -/* This is additionally filtered by our internal log level, so it - * should be set fairly high to capture all potentially interesting - * events without overwhelming detail. +/* Set gnutls internal logging function to a callback which uses our + * own logging framework. + * + * gnutls categories are additionally filtered by our internal log + * level, so it should be set fairly high to capture all potentially + * interesting events without overwhelming detail. */ -#endif +int setup_gnutls_logger(char **categories); -- 2.30.2