]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
nss-mymachines: initialize logging 17928/head
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 10 Dec 2020 11:46:23 +0000 (12:46 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 10 Dec 2020 19:52:03 +0000 (20:52 +0100)
No logging is done directly by nss-mymachines.c code, but we call into sd-bus,
which will log.

src/nss-mymachines/nss-mymachines.c

index 53f049211686c79c03638094f477981630178e9b..44715bb3e5d81b371d59468f99743967ea522848 100644 (file)
@@ -2,6 +2,7 @@
 
 #include <netdb.h>
 #include <nss.h>
+#include <pthread.h>
 
 #include "sd-bus.h"
 #include "sd-login.h"
 #include "format-util.h"
 #include "hostname-util.h"
 #include "in-addr-util.h"
+#include "log.h"
 #include "macro.h"
 #include "memory-util.h"
 #include "nss-util.h"
 #include "signal-util.h"
 #include "string-util.h"
 
+static void setup_logging(void) {
+        /* We need a dummy function because log_parse_environment is a macro. */
+        log_parse_environment();
+}
+
+static void setup_logging_once(void) {
+        static pthread_once_t once = PTHREAD_ONCE_INIT;
+        assert_se(pthread_once(&once, setup_logging) == 0);
+}
+
+#define NSS_ENTRYPOINT_BEGIN                    \
+        BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);       \
+        setup_logging_once()
+
 NSS_GETHOSTBYNAME_PROTOTYPES(mymachines);
 NSS_GETPW_PROTOTYPES(mymachines);
 NSS_GETGR_PROTOTYPES(mymachines);
@@ -94,7 +110,7 @@ enum nss_status _nss_mymachines_gethostbyname4_r(
         int n_ifindices, r;
 
         PROTECT_ERRNO;
-        BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+        NSS_ENTRYPOINT_BEGIN;
 
         assert(name);
         assert(pat);
@@ -244,7 +260,7 @@ enum nss_status _nss_mymachines_gethostbyname3_r(
         int r;
 
         PROTECT_ERRNO;
-        BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+        NSS_ENTRYPOINT_BEGIN;
 
         assert(name);
         assert(result);