]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
assert-util: introduce log_set_assert_return_is_critical_from_env()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 15 Aug 2025 06:24:07 +0000 (15:24 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 16 Aug 2025 15:14:42 +0000 (00:14 +0900)
It will be used for testing nss modules.

docs/ENVIRONMENT.md
src/basic/assert-util.c
src/basic/assert-util.h

index d423d9cd9c8b4413aaab8cb55c57feff16b37d59..d95ac4c430dd08612074469b0a8f3a76edb95df6 100644 (file)
@@ -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
index a1aa5c82e23e1878f9a50213d8f81a6800070a26..87b760e8fea8fb2b91d5665d4f69e7307eecfaf0 100644 (file)
@@ -4,6 +4,7 @@
 #include <stdlib.h>
 
 #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;
 }
index beb52ba88494f1f7c32752c9e2fe6bb265c3df28..fa3e13b220a7ef59e539a4b52bc6a4bbb6bfb85c 100644 (file)
@@ -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);