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:
@ -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)
|
||||||
|
Reference in New Issue
Block a user