]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
nss: move definition of NSS_ENTRYPOINT_BEGIN to nss-util.h
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 15 Aug 2025 06:06:53 +0000 (15:06 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 16 Aug 2025 15:14:42 +0000 (00:14 +0900)
Then, also make nss modules parse $SYSTEMD_ASSERT_RETURN_IS_CRITICAL
environment variable.

This also moves nss-util.c and nss-util.h from src/basic/ to src/shared/,
as they are not used by libsystemd.

src/nss-myhostname/nss-myhostname.c
src/nss-mymachines/nss-mymachines.c
src/nss-resolve/nss-resolve.c
src/nss-systemd/nss-systemd.c
src/shared/meson.build
src/shared/nss-util.c [new file with mode: 0644]
src/shared/nss-util.h [moved from src/basic/nss-util.h with 95% similarity]

index b1a4cfebb838ee5c19db1a9a9d35111f8e568c2c..333e1b3ba78327671d1a607eb0ec73dbc2c7c614 100644 (file)
@@ -43,7 +43,7 @@ enum nss_status _nss_myhostname_gethostbyname4_r(
         char *r_name;
 
         PROTECT_ERRNO;
-        BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+        NSS_ENTRYPOINT_BEGIN;
 
         assert(name);
         assert(pat);
@@ -326,7 +326,7 @@ enum nss_status _nss_myhostname_gethostbyname3_r(
         int n_addresses = 0;
 
         PROTECT_ERRNO;
-        BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+        NSS_ENTRYPOINT_BEGIN;
 
         assert(name);
         assert(host);
@@ -425,7 +425,7 @@ enum nss_status _nss_myhostname_gethostbyaddr2_r(
         unsigned n;
 
         PROTECT_ERRNO;
-        BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+        NSS_ENTRYPOINT_BEGIN;
 
         assert(addr);
         assert(host);
index 2878ddc6b676b1474987c24e536eede8ba7d43d7..232e9cb91e2b17cb5c88544b1767138d799a6de8 100644 (file)
 #include "signal-util.h"
 #include "string-util.h"
 
-static void setup_logging_once(void) {
-        static pthread_once_t once = PTHREAD_ONCE_INIT;
-        assert_se(pthread_once(&once, log_parse_environment_variables) == 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);
index 3a660ca8b2d9eb90cf043143692bae0454bd1c3a..4edd6b5fda8097759d8fae0afb6fe781d0f3a678 100644 (file)
 #include "strv.h"
 #include "time-util.h"
 
-static sd_json_dispatch_flags_t json_dispatch_flags = SD_JSON_ALLOW_EXTENSIONS;
-
-static void setup_logging(void) {
-        log_parse_environment_variables();
-
-        if (DEBUG_LOGGING)
-                json_dispatch_flags = SD_JSON_LOG;
-}
-
-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(resolve);
 NSS_GETHOSTBYADDR_PROTOTYPES(resolve);
 
@@ -258,7 +240,7 @@ enum nss_status _nss_resolve_gethostbyname4_r(
                 goto not_found;
         }
 
-        r = sd_json_dispatch(rparams, resolve_hostname_reply_dispatch_table, json_dispatch_flags, &p);
+        r = sd_json_dispatch(rparams, resolve_hostname_reply_dispatch_table, nss_json_dispatch_flags, &p);
         if (r < 0)
                 goto fail;
         if (sd_json_variant_is_blank_object(p.addresses))
@@ -268,7 +250,7 @@ enum nss_status _nss_resolve_gethostbyname4_r(
         JSON_VARIANT_ARRAY_FOREACH(entry, p.addresses) {
                 AddressParameters q = {};
 
-                r = sd_json_dispatch(entry, address_parameters_dispatch_table, json_dispatch_flags, &q);
+                r = sd_json_dispatch(entry, address_parameters_dispatch_table, nss_json_dispatch_flags, &q);
                 if (r < 0)
                         goto fail;
 
@@ -306,7 +288,7 @@ enum nss_status _nss_resolve_gethostbyname4_r(
         JSON_VARIANT_ARRAY_FOREACH(entry, p.addresses) {
                 AddressParameters q = {};
 
-                r = sd_json_dispatch(entry, address_parameters_dispatch_table, json_dispatch_flags, &q);
+                r = sd_json_dispatch(entry, address_parameters_dispatch_table, nss_json_dispatch_flags, &q);
                 if (r < 0)
                         goto fail;
 
@@ -422,7 +404,7 @@ enum nss_status _nss_resolve_gethostbyname3_r(
                 goto not_found;
         }
 
-        r = sd_json_dispatch(rparams, resolve_hostname_reply_dispatch_table, json_dispatch_flags, &p);
+        r = sd_json_dispatch(rparams, resolve_hostname_reply_dispatch_table, nss_json_dispatch_flags, &p);
         if (r < 0)
                 goto fail;
         if (sd_json_variant_is_blank_object(p.addresses))
@@ -432,7 +414,7 @@ enum nss_status _nss_resolve_gethostbyname3_r(
         JSON_VARIANT_ARRAY_FOREACH(entry, p.addresses) {
                 AddressParameters q = {};
 
-                r = sd_json_dispatch(entry, address_parameters_dispatch_table, json_dispatch_flags, &q);
+                r = sd_json_dispatch(entry, address_parameters_dispatch_table, nss_json_dispatch_flags, &q);
                 if (r < 0)
                         goto fail;
 
@@ -478,7 +460,7 @@ enum nss_status _nss_resolve_gethostbyname3_r(
         JSON_VARIANT_ARRAY_FOREACH(entry, p.addresses) {
                 AddressParameters q = {};
 
-                r = sd_json_dispatch(entry, address_parameters_dispatch_table, json_dispatch_flags, &q);
+                r = sd_json_dispatch(entry, address_parameters_dispatch_table, nss_json_dispatch_flags, &q);
                 if (r < 0)
                         goto fail;
 
@@ -640,7 +622,7 @@ enum nss_status _nss_resolve_gethostbyaddr2_r(
                 goto not_found;
         }
 
-        r = sd_json_dispatch(rparams, resolve_address_reply_dispatch_table, json_dispatch_flags, &p);
+        r = sd_json_dispatch(rparams, resolve_address_reply_dispatch_table, nss_json_dispatch_flags, &p);
         if (r < 0)
                 goto fail;
         if (sd_json_variant_is_blank_object(p.names))
@@ -651,7 +633,7 @@ enum nss_status _nss_resolve_gethostbyaddr2_r(
         JSON_VARIANT_ARRAY_FOREACH(entry, p.names) {
                 _cleanup_(name_parameters_destroy) NameParameters q = {};
 
-                r = sd_json_dispatch(entry, name_parameters_dispatch_table, json_dispatch_flags, &q);
+                r = sd_json_dispatch(entry, name_parameters_dispatch_table, nss_json_dispatch_flags, &q);
                 if (r < 0)
                         goto fail;
 
@@ -692,7 +674,7 @@ enum nss_status _nss_resolve_gethostbyaddr2_r(
         JSON_VARIANT_ARRAY_FOREACH(entry, p.names) {
                 _cleanup_(name_parameters_destroy) NameParameters q = {};
 
-                r = sd_json_dispatch(entry, name_parameters_dispatch_table, json_dispatch_flags, &q);
+                r = sd_json_dispatch(entry, name_parameters_dispatch_table, nss_json_dispatch_flags, &q);
                 if (r < 0)
                         goto fail;
 
index 3c92cc2d00b0acbffcf610dba049ecce8614448b..f9a7d6caeab7f9cb9b51e2168fcbbe5bf751fca6 100644 (file)
@@ -122,15 +122,6 @@ static GetentData getsgent_data = {
 };
 REENABLE_WARNING;
 
-static void setup_logging_once(void) {
-        static pthread_once_t once = PTHREAD_ONCE_INIT;
-        assert_se(pthread_once(&once, log_parse_environment_variables) == 0);
-}
-
-#define NSS_ENTRYPOINT_BEGIN                    \
-        BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);       \
-        setup_logging_once()
-
 NSS_GETPW_PROTOTYPES(systemd);
 NSS_GETSP_PROTOTYPES(systemd);
 NSS_GETGR_PROTOTYPES(systemd);
index d4330874591dbd1554f3ab213ae976c0650f68e4..ea5aa21b0c766f0f020380c5ae2a3e39f6b118c8 100644 (file)
@@ -137,6 +137,7 @@ shared_sources = files(
         'notify-recv.c',
         'nsflags.c',
         'nsresource.c',
+        'nss-util.c',
         'numa-util.c',
         'open-file.c',
         'openssl-util.c',
diff --git a/src/shared/nss-util.c b/src/shared/nss-util.c
new file mode 100644 (file)
index 0000000..32a36cd
--- /dev/null
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <pthread.h>
+
+#include "sd-json.h"
+
+#include "assert-util.h"
+#include "log.h"
+#include "nss-util.h"
+
+sd_json_dispatch_flags_t nss_json_dispatch_flags = SD_JSON_ALLOW_EXTENSIONS;
+
+static void log_setup_nss_internal(void) {
+        log_set_assert_return_is_critical_from_env();
+        log_parse_environment_variables();
+        if (DEBUG_LOGGING)
+                nss_json_dispatch_flags = SD_JSON_LOG;
+}
+
+void log_setup_nss(void) {
+        static pthread_once_t once = PTHREAD_ONCE_INIT;
+        assert_se(pthread_once(&once, log_setup_nss_internal) == 0);
+}
similarity index 95%
rename from src/basic/nss-util.h
rename to src/shared/nss-util.h
index 2f55b7bc749f5fa50e47582beee4424479fb6444..a4a4b5d92060ffeeceab5b5b015b23cf18ea53f5 100644 (file)
@@ -7,7 +7,27 @@
 #include <pwd.h>
 #include <resolv.h>
 
-#define NSS_SIGNALS_BLOCK SIGALRM,SIGVTALRM,SIGPIPE,SIGCHLD,SIGTSTP,SIGIO,SIGHUP,SIGUSR1,SIGUSR2,SIGPROF,SIGURG,SIGWINCH
+#include "forward.h"
+#include "signal-util.h"
+
+extern sd_json_dispatch_flags_t nss_json_dispatch_flags;
+
+void log_setup_nss(void);
+
+#define NSS_ENTRYPOINT_BEGIN        \
+        log_setup_nss();            \
+        BLOCK_SIGNALS(SIGALRM,      \
+                      SIGVTALRM,    \
+                      SIGPIPE,      \
+                      SIGCHLD,      \
+                      SIGTSTP,      \
+                      SIGIO,        \
+                      SIGHUP,       \
+                      SIGUSR1,      \
+                      SIGUSR2,      \
+                      SIGPROF,      \
+                      SIGURG,       \
+                      SIGWINCH)
 
 #ifndef DEPRECATED_RES_USE_INET6
 #  define DEPRECATED_RES_USE_INET6 0x00002000