1
0
mirror of https://github.com/systemd/systemd.git synced 2025-08-30 05:49:54 +03:00

portable: properly handle if the unit file directory for portable service images doesn't exist

if the dir doesn#t exist then let's consider this indication for "this
image isn't attached".
This commit is contained in:
Lennart Poettering
2018-10-08 17:25:15 +02:00
parent 40a7b232de
commit 339731dba1

View File

@ -1150,8 +1150,12 @@ int portable_detach(
where = attached_path(&paths, flags); where = attached_path(&paths, flags);
d = opendir(where); 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); return log_debug_errno(errno, "Failed to open '%s' directory: %m", where);
}
unit_files = set_new(&string_hash_ops); unit_files = set_new(&string_hash_ops);
if (!unit_files) if (!unit_files)
@ -1213,10 +1217,8 @@ int portable_detach(
} }
} }
if (set_isempty(unit_files)) { if (set_isempty(unit_files))
log_debug("No unit files associated with '%s' found. Image not attached?", name_or_path); goto not_found;
return sd_bus_error_setf(error, BUS_ERROR_NO_SUCH_UNIT, "No unit files associated with '%s' found. Image not attached?", name_or_path);
}
SET_FOREACH(item, unit_files, iterator) { SET_FOREACH(item, unit_files, iterator) {
_cleanup_free_ char *md = NULL; _cleanup_free_ char *md = NULL;
@ -1290,6 +1292,10 @@ int portable_detach(
} }
return ret; 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( static int portable_get_state_internal(
@ -1317,8 +1323,15 @@ static int portable_get_state_internal(
where = attached_path(&paths, flags); where = attached_path(&paths, flags);
d = opendir(where); 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); return log_debug_errno(errno, "Failed to open '%s' directory: %m", where);
}
unit_files = set_new(&string_hash_ops); unit_files = set_new(&string_hash_ops);
if (!unit_files) if (!unit_files)