From: dongshengyuan <545258830@qq.com> Date: Wed, 15 Jul 2026 08:50:12 +0000 (+0800) Subject: portable: honor --force for directory extensions X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=75d26867942991e3e1d2e8424da734ed417d7bc3;p=thirdparty%2Fsystemd.git portable: honor --force for directory extensions Pass relax_extension_release_check through the directory extraction path instead of hardcoding false. Directory extensions now honor the same --force relaxation as dissected images. Reproducer: cp -a /tmp/app0 /tmp/app10 sudo portablectl attach --force --runtime \ --extension /tmp/app10 /tmp/rootdir app0 Before: directory image extraction always used strict extension-release name checks. --force relaxed other extension paths but still rejected a renamed directory extension with matching metadata. Follow-up: 06768b90a32ac0d36252ebc5f426ad471bf29fce --- diff --git a/src/portable/portable.c b/src/portable/portable.c index f0af728d487..e95f6604b4a 100644 --- a/src/portable/portable.c +++ b/src/portable/portable.c @@ -541,7 +541,7 @@ static int portable_extract_by_path( matches, image_name, path_is_extension, - /* relax_extension_release_check= */ false, + relax_extension_release_check, seq[1], /* ret_os_release= */ NULL, /* ret_unit_files= */ NULL); @@ -571,7 +571,7 @@ static int portable_extract_by_path( matches, image_name, path_is_extension, - /* relax_extension_release_check= */ false, + relax_extension_release_check, /* socket_fd= */ -EBADF, &os_release, &unit_files); diff --git a/test/units/TEST-29-PORTABLE.directory.sh b/test/units/TEST-29-PORTABLE.directory.sh index a1951ee6e1f..998e6ce40eb 100755 --- a/test/units/TEST-29-PORTABLE.directory.sh +++ b/test/units/TEST-29-PORTABLE.directory.sh @@ -157,6 +157,13 @@ grep -q -F "ExtensionDirectories=" /run/systemd/system.attached/app0.service.d/2 portablectl detach --now --runtime --extension /tmp/app0 /tmp/rootdir app0 +rm -rf /tmp/app10 +cp -a /tmp/app0 /tmp/app10 +portablectl "${ARGS[@]}" attach --force --copy=symlink --runtime --extension /tmp/app10 /tmp/rootdir app0 +portablectl inspect --force --cat --extension /tmp/app10 /tmp/rootdir app0 | grep -f /tmp/app10/usr/lib/extension-release.d/extension-release.app0 >/dev/null +portablectl detach --runtime --extension /tmp/app10 /tmp/rootdir app0 +rm -rf /tmp/app10 + # Attempt to disable the app unit during detaching. Requires --copy=symlink to reproduce. # Provides coverage for https://github.com/systemd/systemd/issues/23481 portablectl "${ARGS[@]}" attach --copy=symlink --now --runtime /tmp/rootdir minimal-app0