|
|
594167 |
From fb51d78042fec1a2df2a7da1f9a759875bd7e07e Mon Sep 17 00:00:00 2001
|
|
|
594167 |
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
|
594167 |
Date: Tue, 8 Mar 2022 11:38:46 +0100
|
|
|
594167 |
Subject: [PATCH] shared/specifier: clarify and add test for missing data
|
|
|
594167 |
|
|
|
594167 |
In systemd.unit we document that unset fields resolve to "". But we didn't
|
|
|
594167 |
directly test this, so let's do that. Also, we return -ENOENT if the file
|
|
|
594167 |
is missing, which we didn't document or test.
|
|
|
594167 |
|
|
|
594167 |
(cherry picked from commit 7962116fc8a2572c5c89904ac50fe99c8101f28f)
|
|
|
594167 |
|
|
|
594167 |
Related: #2082131
|
|
|
594167 |
---
|
|
|
594167 |
src/shared/specifier.c | 4 +++-
|
|
|
594167 |
src/test/test-specifier.c | 14 ++++++++++++++
|
|
|
594167 |
2 files changed, 17 insertions(+), 1 deletion(-)
|
|
|
594167 |
|
|
|
594167 |
diff --git a/src/shared/specifier.c b/src/shared/specifier.c
|
|
|
594167 |
index f8ab98541f..c26628975c 100644
|
|
|
594167 |
--- a/src/shared/specifier.c
|
|
|
594167 |
+++ b/src/shared/specifier.c
|
|
|
594167 |
@@ -213,7 +213,9 @@ int specifier_architecture(char specifier, const void *data, const char *root, c
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
/* Note: fields in /etc/os-release might quite possibly be missing, even if everything is entirely valid
|
|
|
594167 |
- * otherwise. We'll return an empty value or NULL in that case from the functions below. */
|
|
|
594167 |
+ * otherwise. We'll return an empty value or NULL in that case from the functions below. But if the
|
|
|
594167 |
+ * os-release file is missing, we'll return -ENOENT. This means that something is seriously wrong with the
|
|
|
594167 |
+ * installation. */
|
|
|
594167 |
|
|
|
594167 |
int specifier_os_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
|
|
|
594167 |
return parse_os_release(root, "ID", ret);
|
|
|
594167 |
diff --git a/src/test/test-specifier.c b/src/test/test-specifier.c
|
|
|
594167 |
index dda993ce9d..790f0252d7 100644
|
|
|
594167 |
--- a/src/test/test-specifier.c
|
|
|
594167 |
+++ b/src/test/test-specifier.c
|
|
|
594167 |
@@ -96,4 +96,18 @@ TEST(specifiers) {
|
|
|
594167 |
}
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
+TEST(specifiers_missing_data_ok) {
|
|
|
594167 |
+ _cleanup_free_ char *resolved = NULL;
|
|
|
594167 |
+
|
|
|
594167 |
+ assert_se(setenv("SYSTEMD_OS_RELEASE", "/dev/null", 1) == 0);
|
|
|
594167 |
+ assert_se(specifier_printf("%A-%B-%M-%o-%w-%W", SIZE_MAX, specifier_table, NULL, NULL, &resolved) >= 0);
|
|
|
594167 |
+ assert_se(streq(resolved, "-----"));
|
|
|
594167 |
+
|
|
|
594167 |
+ assert_se(setenv("SYSTEMD_OS_RELEASE", "/nosuchfileordirectory", 1) == 0);
|
|
|
594167 |
+ assert_se(specifier_printf("%A-%B-%M-%o-%w-%W", SIZE_MAX, specifier_table, NULL, NULL, &resolved) == -ENOENT);
|
|
|
594167 |
+ assert_se(streq(resolved, "-----"));
|
|
|
594167 |
+
|
|
|
594167 |
+ assert_se(unsetenv("SYSTEMD_OS_RELEASE") == 0);
|
|
|
594167 |
+}
|
|
|
594167 |
+
|
|
|
594167 |
DEFINE_TEST_MAIN(LOG_DEBUG);
|