From 280b3781bd03a728e1e2f78ad85ac3df4b4b010b Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Mon, 22 Feb 2021 18:45:36 +0000 Subject: [PATCH] sysext: split parsing SYSTEMD_SYSEXT_HIERARCHIES in a common helper --- src/shared/extension-release.c | 15 +++++++++++++++ src/shared/extension-release.h | 3 +++ src/sysext/sysext.c | 8 +------- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/shared/extension-release.c b/src/shared/extension-release.c index 5eecf5a323..5676e2c063 100644 --- a/src/shared/extension-release.c +++ b/src/shared/extension-release.c @@ -77,3 +77,18 @@ int extension_release_validate( log_debug("Version info of extension '%s' matches host.", name); return 1; } + +int parse_env_extension_hierarchies(char ***ret_hierarchies) { + int r; + + r = getenv_path_list("SYSTEMD_SYSEXT_HIERARCHIES", ret_hierarchies); + if (r < 0) + return log_debug_errno(r, "Failed to parse SYSTEMD_SYSEXT_HIERARCHIES environment variable : %m"); + if (!*ret_hierarchies) { + *ret_hierarchies = strv_new("/usr", "/opt"); + if (!*ret_hierarchies) + return -ENOMEM; + } + + return 0; +} diff --git a/src/shared/extension-release.h b/src/shared/extension-release.h index 5c77010b0e..d026a9b225 100644 --- a/src/shared/extension-release.h +++ b/src/shared/extension-release.h @@ -10,3 +10,6 @@ int extension_release_validate( const char *host_os_release_version_id, const char *host_os_release_sysext_level, char **extension_release); + +/* Parse SYSTEMD_SYSEXT_HIERARCHIES and if not set, return "/usr /opt" */ +int parse_env_extension_hierarchies(char ***ret_hierarchies); diff --git a/src/sysext/sysext.c b/src/sysext/sysext.c index 60f4dee353..f68eaa12db 100644 --- a/src/sysext/sysext.c +++ b/src/sysext/sysext.c @@ -982,16 +982,10 @@ static int run(int argc, char *argv[]) { /* For debugging purposes it might make sense to do this for other hierarchies than /usr/ and * /opt/, but let's make that a hacker/debugging feature, i.e. env var instead of cmdline * switch. */ - r = getenv_path_list("SYSTEMD_SYSEXT_HIERARCHIES", &arg_hierarchies); + r = parse_env_extension_hierarchies(&arg_hierarchies); if (r < 0) return log_error_errno(r, "Failed to parse $SYSTEMD_SYSEXT_HIERARCHIES environment variable: %m"); - if (!arg_hierarchies) { - arg_hierarchies = strv_new("/usr", "/opt"); - if (!arg_hierarchies) - return log_oom(); - } - return sysext_main(argc, argv); } -- 2.25.1