From 2494dc196199ade968c817d68e6fe43ae851d3a3 Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Thu, 12 Sep 2024 18:46:04 +0200 Subject: [PATCH] core: do not fail if ignorable img.v/ vpick dir is empty If the vpick directory is configured to be ignored if missing, do not fail and just skip ahead. Follow-up for 5e79dd96a88 Follow-up for 622efc544dc (cherry picked from commit 00f546e25e8e46e5e289e1f2fc2ed3dcc6999223) --- src/core/namespace.c | 19 +++++++++++++------ test/units/TEST-50-DISSECT.dissect.sh | 14 ++++++++------ 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/core/namespace.c b/src/core/namespace.c index b92bb012ee..77bca0b6f4 100644 --- a/src/core/namespace.c +++ b/src/core/namespace.c @@ -513,11 +513,15 @@ static int append_extensions( &result); if (r < 0) return r; - if (!result.path) + if (!result.path) { + if (m->ignore_enoent) + continue; + return log_debug_errno( SYNTHETIC_ERRNO(ENOENT), "No matching entry in .v/ directory %s found.", m->source); + } if (asprintf(&mount_point, "%s/%zu", extension_dir, i) < 0) return -ENOMEM; @@ -555,10 +559,6 @@ static int append_extensions( const char *e = *extension_directory; bool ignore_enoent = false; - /* Pick up the counter where the ExtensionImages left it. */ - if (asprintf(&mount_point, "%s/%zu", extension_dir, n++) < 0) - return -ENOMEM; - /* Look for any prefixes */ if (startswith(e, "-")) { e++; @@ -576,11 +576,18 @@ static int append_extensions( &result); if (r < 0) return r; - if (!result.path) + if (!result.path) { + if (ignore_enoent) + continue; + return log_debug_errno( SYNTHETIC_ERRNO(ENOENT), "No matching entry in .v/ directory %s found.", e); + } + /* Pick up the counter where the ExtensionImages left it. */ + if (asprintf(&mount_point, "%s/%zu", extension_dir, n++) < 0) + return -ENOMEM; for (size_t j = 0; hierarchies && hierarchies[j]; ++j) { char *prefixed_hierarchy = path_join(mount_point, hierarchies[j]); diff --git a/test/units/TEST-50-DISSECT.dissect.sh b/test/units/TEST-50-DISSECT.dissect.sh index 563206ce7e..6c79262c2d 100755 --- a/test/units/TEST-50-DISSECT.dissect.sh +++ b/test/units/TEST-50-DISSECT.dissect.sh @@ -443,14 +443,15 @@ systemctl is-active testservice-50e.service # Check vpick support in ExtensionImages= VBASE="vtest$RANDOM" VDIR="/tmp/$VBASE.v" -mkdir "$VDIR" +EMPTY_VDIR="/tmp/$VBASE-empty.v" +mkdir "$VDIR" "$EMPTY_VDIR" ln -s /tmp/app0.raw "$VDIR/${VBASE}_0.raw" ln -s /tmp/app1.raw "$VDIR/${VBASE}_1.raw" -systemd-run -P -p ExtensionImages="$VDIR" bash -c '/opt/script1.sh | grep ID' +systemd-run -P -p ExtensionImages="$VDIR -$EMPTY_VDIR" bash -c '/opt/script1.sh | grep ID' -rm -rf "$VDIR" +rm -rf "$VDIR" "$EMPTY_VDIR" # ExtensionDirectories will set up an overlay mkdir -p "$IMAGE_DIR/app0" "$IMAGE_DIR/app1" "$IMAGE_DIR/app-nodistro" "$IMAGE_DIR/service-scoped-test" @@ -529,14 +530,15 @@ systemctl is-active testservice-50f.service # Check vpick support in ExtensionDirectories= VBASE="vtest$RANDOM" VDIR="/tmp/$VBASE.v" -mkdir "$VDIR" +EMPTY_VDIR="/tmp/$VBASE-empty.v" +mkdir "$VDIR" "$EMPTY_VDIR" ln -s "$IMAGE_DIR/app0" "$VDIR/${VBASE}_0" ln -s "$IMAGE_DIR/app1" "$VDIR/${VBASE}_1" -systemd-run -P --property ExtensionDirectories="$VDIR" cat /opt/script1.sh | grep -q -F "extension-release.app2" +systemd-run -P --property ExtensionDirectories="$VDIR -$EMPTY_VDIR" cat /opt/script1.sh | grep -q -F "extension-release.app2" -rm -rf "$VDIR" +rm -rf "$VDIR" "$EMPTY_VDIR" systemd-dissect --umount "$IMAGE_DIR/app0" systemd-dissect --umount "$IMAGE_DIR/app1" -- 2.25.1