From: Yu Watanabe Date: Fri, 15 Aug 2025 06:06:53 +0000 (+0900) Subject: nss: move definition of NSS_ENTRYPOINT_BEGIN to nss-util.h X-Git-Tag: v258-rc3~33^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ea70753479fbfe19b4ae5de9db846ab9edd290a8;p=thirdparty%2Fsystemd.git nss: move definition of NSS_ENTRYPOINT_BEGIN to nss-util.h 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. --- diff --git a/src/nss-myhostname/nss-myhostname.c b/src/nss-myhostname/nss-myhostname.c index b1a4cfebb83..333e1b3ba78 100644 --- a/src/nss-myhostname/nss-myhostname.c +++ b/src/nss-myhostname/nss-myhostname.c @@ -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); diff --git a/src/nss-mymachines/nss-mymachines.c b/src/nss-mymachines/nss-mymachines.c index 2878ddc6b67..232e9cb91e2 100644 --- a/src/nss-mymachines/nss-mymachines.c +++ b/src/nss-mymachines/nss-mymachines.c @@ -17,15 +17,6 @@ #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); diff --git a/src/nss-resolve/nss-resolve.c b/src/nss-resolve/nss-resolve.c index 3a660ca8b2d..4edd6b5fda8 100644 --- a/src/nss-resolve/nss-resolve.c +++ b/src/nss-resolve/nss-resolve.c @@ -19,24 +19,6 @@ #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; diff --git a/src/nss-systemd/nss-systemd.c b/src/nss-systemd/nss-systemd.c index 3c92cc2d00b..f9a7d6caeab 100644 --- a/src/nss-systemd/nss-systemd.c +++ b/src/nss-systemd/nss-systemd.c @@ -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); diff --git a/src/shared/meson.build b/src/shared/meson.build index d4330874591..ea5aa21b0c7 100644 --- a/src/shared/meson.build +++ b/src/shared/meson.build @@ -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 index 00000000000..32a36cd57e7 --- /dev/null +++ b/src/shared/nss-util.c @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include + +#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); +} diff --git a/src/basic/nss-util.h b/src/shared/nss-util.h similarity index 95% rename from src/basic/nss-util.h rename to src/shared/nss-util.h index 2f55b7bc749..a4a4b5d9206 100644 --- a/src/basic/nss-util.h +++ b/src/shared/nss-util.h @@ -7,7 +7,27 @@ #include #include -#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