From: Daan De Meyer Date: Tue, 2 Sep 2025 09:58:17 +0000 (+0200) Subject: install: Fall back to system presets if there are no initrd presets X-Git-Tag: v258-rc4~15^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F38790%2Fhead;p=thirdparty%2Fsystemd.git install: Fall back to system presets if there are no initrd presets We might be operating with a newer systemctl on an image with older systemd and thus without an initrd-preset directory. Before 4a8c395167c1631224c02d990c847955a2bf23b0, we would use the system presets, let's make sure we keep doing that if we're operating on an image without initrd presets. Follow up for 4a8c395167c1631224c02d990c847955a2bf23b0. --- diff --git a/src/shared/install.c b/src/shared/install.c index 4ed6a0962a4..81954365642 100644 --- a/src/shared/install.c +++ b/src/shared/install.c @@ -3298,7 +3298,20 @@ static int presets_find_config(RuntimeScope scope, const char *root_dir, char ** if (r < 0 && r != -ENOENT) return r; - dirs = r >= 0 ? initrd_dirs : system_dirs; + /* Make sure that we fall back to the system preset directories if we're operating on a root + * directory without initrd preset directories. This makes sure that we don't regress when + * using a newer systemctl to operate on a root directory with an older version of systemd + * installed that doesn't yet known about initrd preset directories. */ + if (r >= 0) + STRV_FOREACH(d, initrd_dirs) { + r = chase_and_access(*d, root_dir, CHASE_PREFIX_ROOT, F_OK, /* ret_path= */ NULL); + if (r >= 0) + return conf_files_list_strv(ret, ".preset", root_dir, 0, initrd_dirs); + if (r != -ENOENT) + return r; + } + + dirs = system_dirs; } else if (IN_SET(scope, RUNTIME_SCOPE_GLOBAL, RUNTIME_SCOPE_USER)) dirs = user_dirs; else