mirror of
https://github.com/systemd/systemd.git
synced 2024-12-23 21:35:11 +03:00
shared/dropin: fix assert for invalid drop-in
Don't try to show top level drop-in for non-existent units or when trying to instantiate non-instantiated units: $ systemctl cat nonexistent@.service Assertion 'name' failed at src/shared/dropin.c:143, function unit_file_find_dirs(). Aborting. $ systemctl cat systemd-journald@.service Assertion 'name' failed at src/shared/dropin.c:143, function unit_file_find_dirs(). Aborting.
This commit is contained in:
parent
51692fab56
commit
7a670b1dd9
@ -230,7 +230,6 @@ int unit_file_find_dropin_paths(
|
||||
char ***ret) {
|
||||
|
||||
_cleanup_strv_free_ char **dirs = NULL;
|
||||
UnitType type = _UNIT_TYPE_INVALID;
|
||||
char *name, **p;
|
||||
Iterator i;
|
||||
int r;
|
||||
@ -240,22 +239,24 @@ int unit_file_find_dropin_paths(
|
||||
/* All the names in the unit are of the same type so just grab one. */
|
||||
name = (char*) set_first(names);
|
||||
if (name) {
|
||||
UnitType type = _UNIT_TYPE_INVALID;
|
||||
|
||||
type = unit_name_to_type(name);
|
||||
if (type < 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
"Failed to to derive unit type from unit name: %s",
|
||||
name);
|
||||
}
|
||||
|
||||
/* Special top level drop in for "<unit type>.<suffix>". Add this first as it's the most generic
|
||||
* and should be able to be overridden by more specific drop-ins. */
|
||||
STRV_FOREACH(p, lookup_path)
|
||||
(void) unit_file_find_dirs(original_root,
|
||||
unit_path_cache,
|
||||
*p,
|
||||
unit_type_to_string(type),
|
||||
dir_suffix,
|
||||
&dirs);
|
||||
/* Special top level drop in for "<unit type>.<suffix>". Add this first as it's the most generic
|
||||
* and should be able to be overridden by more specific drop-ins. */
|
||||
STRV_FOREACH(p, lookup_path)
|
||||
(void) unit_file_find_dirs(original_root,
|
||||
unit_path_cache,
|
||||
*p,
|
||||
unit_type_to_string(type),
|
||||
dir_suffix,
|
||||
&dirs);
|
||||
}
|
||||
|
||||
SET_FOREACH(name, names, i)
|
||||
STRV_FOREACH(p, lookup_path)
|
||||
|
@ -419,9 +419,23 @@ EOF
|
||||
clear_services a b
|
||||
}
|
||||
|
||||
test_invalid_dropins () {
|
||||
echo "Testing invalid dropins..."
|
||||
# Assertion failed on earlier versions, command exits unsuccessfully on later versions
|
||||
systemctl cat nonexistent@.service || true
|
||||
create_services a
|
||||
systemctl daemon-reload
|
||||
# Assertion failed on earlier versions, command exits unsuccessfully on later versions
|
||||
systemctl cat a@.service || true
|
||||
systemctl stop a
|
||||
clear_services a
|
||||
return 0
|
||||
}
|
||||
|
||||
test_basic_dropins
|
||||
test_template_dropins
|
||||
test_alias_dropins
|
||||
test_masked_dropins
|
||||
test_invalid_dropins
|
||||
|
||||
touch /testok
|
||||
|
Loading…
Reference in New Issue
Block a user