]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
portable: properly handle if the unit file directory for portable service images...
authorLennart Poettering <lennart@poettering.net>
Mon, 8 Oct 2018 15:25:15 +0000 (17:25 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 8 Oct 2018 16:49:45 +0000 (18:49 +0200)
if the dir doesn#t exist then let's consider this indication for "this
image isn't attached".

src/portable/portable.c

index 03eeb111ce86637cfd9bec7c43fd1e5745765da6..49eaf84b1aa8175aa42e11d6a9f1fac18710751d 100644 (file)
@@ -1150,8 +1150,12 @@ int portable_detach(
         where = attached_path(&paths, flags);
 
         d = opendir(where);
-        if (!d)
+        if (!d) {
+                if (errno == ENOENT)
+                        goto not_found;
+
                 return log_debug_errno(errno, "Failed to open '%s' directory: %m", where);
+        }
 
         unit_files = set_new(&string_hash_ops);
         if (!unit_files)
@@ -1213,10 +1217,8 @@ int portable_detach(
                 }
         }
 
-        if (set_isempty(unit_files)) {
-                log_debug("No unit files associated with '%s' found. Image not attached?", name_or_path);
-                return sd_bus_error_setf(error, BUS_ERROR_NO_SUCH_UNIT, "No unit files associated with '%s' found. Image not attached?", name_or_path);
-        }
+        if (set_isempty(unit_files))
+                goto not_found;
 
         SET_FOREACH(item, unit_files, iterator) {
                 _cleanup_free_ char *md = NULL;
@@ -1290,6 +1292,10 @@ int portable_detach(
         }
 
         return ret;
+
+not_found:
+        log_debug("No unit files associated with '%s' found. Image not attached?", name_or_path);
+        return sd_bus_error_setf(error, BUS_ERROR_NO_SUCH_UNIT, "No unit files associated with '%s' found. Image not attached?", name_or_path);
 }
 
 static int portable_get_state_internal(
@@ -1317,8 +1323,15 @@ static int portable_get_state_internal(
         where = attached_path(&paths, flags);
 
         d = opendir(where);
-        if (!d)
+        if (!d) {
+                if (errno == ENOENT) {
+                        /* If the 'attached' directory doesn't exist at all, then we know for sure this image isn't attached. */
+                        *ret = PORTABLE_DETACHED;
+                        return 0;
+                }
+
                 return log_debug_errno(errno, "Failed to open '%s' directory: %m", where);
+        }
 
         unit_files = set_new(&string_hash_ops);
         if (!unit_files)