From ed9c82095adb25af91d2f00d923bf00a25b35567 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Fri, 15 Aug 2025 15:24:07 +0900 Subject: [PATCH] assert-util: introduce log_set_assert_return_is_critical_from_env() It will be used for testing nss modules. --- docs/ENVIRONMENT.md | 3 +++ src/basic/assert-util.c | 17 +++++++++++++++++ src/basic/assert-util.h | 1 + 3 files changed, 21 insertions(+) diff --git a/docs/ENVIRONMENT.md b/docs/ENVIRONMENT.md index d423d9cd9c8..d95ac4c430d 100644 --- a/docs/ENVIRONMENT.md +++ b/docs/ENVIRONMENT.md @@ -454,6 +454,9 @@ systemd tests: causes all non-matching test functions to be skipped. Only applies to tests using our regular test boilerplate. +* `$SYSTEMD_ASSERT_RETURN_IS_CRITICAL` — Takes a boolean to control if + `assert_return()` and friends call `abort()`. + fuzzers: * `$SYSTEMD_FUZZ_OUTPUT` — A boolean that specifies whether to write output to diff --git a/src/basic/assert-util.c b/src/basic/assert-util.c index a1aa5c82e23..87b760e8fea 100644 --- a/src/basic/assert-util.c +++ b/src/basic/assert-util.c @@ -4,6 +4,7 @@ #include #include "assert-util.h" +#include "env-util.h" #include "errno-util.h" #include "log.h" @@ -17,6 +18,22 @@ void log_set_assert_return_is_critical(bool b) { assert_return_is_critical = b; } +void log_set_assert_return_is_critical_from_env(void) { + static int cached = INT_MIN; + int r; + + if (cached == INT_MIN) { + r = secure_getenv_bool("SYSTEMD_ASSERT_RETURN_IS_CRITICAL"); + if (r < 0 && r != -ENXIO) + log_debug_errno(r, "Failed to parse $SYSTEMD_ASSERT_RETURN_IS_CRITICAL, ignoring: %m"); + + cached = r; + } + + if (cached >= 0) + log_set_assert_return_is_critical(cached); +} + bool log_get_assert_return_is_critical(void) { return assert_return_is_critical; } diff --git a/src/basic/assert-util.h b/src/basic/assert-util.h index beb52ba8849..fa3e13b220a 100644 --- a/src/basic/assert-util.h +++ b/src/basic/assert-util.h @@ -6,6 +6,7 @@ /* Logging for various assertions */ void log_set_assert_return_is_critical(bool b); +void log_set_assert_return_is_critical_from_env(void); bool log_get_assert_return_is_critical(void) _pure_; void log_assert_failed_return(const char *text, const char *file, int line, const char *func); -- 2.47.3