diff options
author | Lennart Poettering <lennart@poettering.net> | 2018-04-17 15:54:10 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-17 15:54:10 +0200 |
commit | 2cb36f7c1e4672df2b47bffab3b7d65216915992 (patch) | |
tree | b4f0fa07c1cd3ffe34d7624efe27ad98eaa2da82 /src | |
parent | 79a4beb39f16ae47213e42145bda2ea64bee9987 (diff) | |
parent | 7e4a49b42b2f4fb3a621dc89a4a76e330a9aebe9 (diff) | |
download | systemd-2cb36f7c1e4672df2b47bffab3b7d65216915992.tar.gz systemd-2cb36f7c1e4672df2b47bffab3b7d65216915992.tar.bz2 systemd-2cb36f7c1e4672df2b47bffab3b7d65216915992.zip |
Merge pull request #8575 from keszybz/non-absolute-paths
Do not require absolute paths in ExecStart and friends
Diffstat (limited to 'src')
-rw-r--r-- | src/analyze/analyze-verify.c | 11 | ||||
-rw-r--r-- | src/basic/path-util.h | 6 | ||||
-rw-r--r-- | src/core/load-fragment.c | 46 | ||||
-rw-r--r-- | src/core/main.c | 27 | ||||
-rw-r--r-- | src/core/manager.c | 29 | ||||
-rw-r--r-- | src/core/manager.h | 1 | ||||
-rw-r--r-- | src/libsystemd/sd-path/sd-path.c | 14 | ||||
-rw-r--r-- | src/path/path.c | 1 | ||||
-rw-r--r-- | src/systemd/sd-path.h | 1 | ||||
-rw-r--r-- | src/test/meson.build | 3 | ||||
-rw-r--r-- | src/test/test-cgroup-mask.c | 15 | ||||
-rw-r--r-- | src/test/test-engine.c | 14 | ||||
-rw-r--r-- | src/test/test-execute.c | 7 | ||||
-rw-r--r-- | src/test/test-path.c | 14 | ||||
-rw-r--r-- | src/test/test-sched-prio.c | 15 |
15 files changed, 131 insertions, 73 deletions
diff --git a/src/analyze/analyze-verify.c b/src/analyze/analyze-verify.c index fdaf90c7fc..90c10f575a 100644 --- a/src/analyze/analyze-verify.c +++ b/src/analyze/analyze-verify.c @@ -231,7 +231,6 @@ static int verify_unit(Unit *u, bool check_man) { } int verify_units(char **filenames, UnitFileScope scope, bool check_man, bool run_generators) { - _cleanup_(sd_bus_error_free) sd_bus_error err = SD_BUS_ERROR_NULL; _cleanup_free_ char *var = NULL; Manager *m = NULL; FILE *serial = NULL; @@ -284,12 +283,10 @@ int verify_units(char **filenames, UnitFileScope scope, bool check_man, bool run continue; } - k = manager_load_unit(m, NULL, prepared, &err, &units[count]); - if (k < 0) { - log_error_errno(k, "Failed to load %s: %m", *filename); - if (r == 0) - r = k; - } else + k = manager_load_startable_unit_or_warn(m, NULL, prepared, &units[count]); + if (k < 0 && r == 0) + r = k; + else count++; } diff --git a/src/basic/path-util.h b/src/basic/path-util.h index 898eeb4395..9946853b41 100644 --- a/src/basic/path-util.h +++ b/src/basic/path-util.h @@ -17,17 +17,23 @@ #if HAVE_SPLIT_BIN # define PATH_SBIN_BIN(x) x "sbin:" x "bin" +# define PATH0_SBIN_BIN(x) x "sbin\0" x "bin" #else +# define PATH0_SBIN_BIN(x) x "bin" # define PATH_SBIN_BIN(x) x "bin" #endif #define DEFAULT_PATH_NORMAL PATH_SBIN_BIN("/usr/local/") ":" PATH_SBIN_BIN("/usr/") +#define DEFAULT_PATH0_NORMAL PATH0_SBIN_BIN("/usr/local/") "\0" PATH0_SBIN_BIN("/usr/") #define DEFAULT_PATH_SPLIT_USR DEFAULT_PATH_NORMAL ":" PATH_SBIN_BIN("/") +#define DEFAULT_PATH0_SPLIT_USR DEFAULT_PATH0_NORMAL "\0" PATH0_SBIN_BIN("/") #if HAVE_SPLIT_USR # define DEFAULT_PATH DEFAULT_PATH_SPLIT_USR +# define DEFAULT_PATH_NULSTR DEFAULT_PATH0_SPLIT_USR #else # define DEFAULT_PATH DEFAULT_PATH_NORMAL +# define DEFAULT_PATH_NULSTR DEFAULT_PATH0_NORMAL #endif bool is_path(const char *p) _pure_; diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index c3ff27b518..767355adf6 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -639,23 +639,51 @@ int config_parse_exec( } if (!string_is_safe(path)) { log_syntax(unit, LOG_ERR, filename, line, 0, - "Executable path contains special characters%s: %s", - ignore ? ", ignoring" : "", rvalue); - return ignore ? 0 : -ENOEXEC; - } - if (!path_is_absolute(path)) { - log_syntax(unit, LOG_ERR, filename, line, 0, - "Executable path is not absolute%s: %s", - ignore ? ", ignoring" : "", rvalue); + "Executable name contains special characters%s: %s", + ignore ? ", ignoring" : "", path); return ignore ? 0 : -ENOEXEC; } if (endswith(path, "/")) { log_syntax(unit, LOG_ERR, filename, line, 0, "Executable path specifies a directory%s: %s", - ignore ? ", ignoring" : "", rvalue); + ignore ? ", ignoring" : "", path); return ignore ? 0 : -ENOEXEC; } + if (!path_is_absolute(path)) { + const char *prefix; + bool found = false; + + if (!filename_is_valid(path)) { + log_syntax(unit, LOG_ERR, filename, line, 0, + "Neither a valid executable name nor an absolute path%s: %s", + ignore ? ", ignoring" : "", path); + return ignore ? 0 : -ENOEXEC; + } + + /* Resolve a single-component name to a full path */ + NULSTR_FOREACH(prefix, DEFAULT_PATH_NULSTR) { + _cleanup_free_ char *fullpath = NULL; + + fullpath = strjoin(prefix, "/", path); + if (!fullpath) + return log_oom(); + + if (access(fullpath, F_OK) >= 0) { + free_and_replace(path, fullpath); + found = true; + break; + } + } + + if (!found) { + log_syntax(unit, LOG_ERR, filename, line, 0, + "Executable \"%s\" not found in path \"%s\"%s", + path, DEFAULT_PATH, ignore ? ", ignoring" : ""); + return ignore ? 0 : -ENOEXEC; + } + } + if (!separate_argv0) { char *w = NULL; diff --git a/src/core/main.c b/src/core/main.c index 701cbab99b..201882ca95 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -1890,28 +1890,15 @@ static int do_queue_default_job( log_debug("Activating default unit: %s", arg_default_unit); - r = manager_load_unit(m, arg_default_unit, NULL, &error, &target); - if (r < 0) - log_error("Failed to load default target: %s", bus_error_message(&error, r)); - else if (IN_SET(target->load_state, UNIT_ERROR, UNIT_NOT_FOUND)) - log_error_errno(target->load_error, "Failed to load default target: %m"); - else if (target->load_state == UNIT_MASKED) - log_error("Default target masked."); - - if (!target || target->load_state != UNIT_LOADED) { - log_info("Trying to load rescue target..."); + r = manager_load_startable_unit_or_warn(m, arg_default_unit, NULL, &target); + if (r < 0) { + log_info("Falling back to rescue target: " SPECIAL_RESCUE_TARGET); - r = manager_load_unit(m, SPECIAL_RESCUE_TARGET, NULL, &error, &target); + r = manager_load_startable_unit_or_warn(m, SPECIAL_RESCUE_TARGET, NULL, &target); if (r < 0) { - *ret_error_message = "Failed to load rescue target"; - return log_emergency_errno(r, "Failed to load rescue target: %s", bus_error_message(&error, r)); - } else if (IN_SET(target->load_state, UNIT_ERROR, UNIT_NOT_FOUND)) { - *ret_error_message = "Failed to load rescue target"; - return log_emergency_errno(target->load_error, "Failed to load rescue target: %m"); - } else if (target->load_state == UNIT_MASKED) { - *ret_error_message = "Rescue target masked"; - log_emergency("Rescue target masked."); - return -ERFKILL; + *ret_error_message = r == -ERFKILL ? "Rescue target masked" + : "Failed to load rescue target"; + return r; } } diff --git a/src/core/manager.c b/src/core/manager.c index 74e36a7521..a42fccd8e4 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -1810,7 +1810,36 @@ int manager_load_unit( manager_dispatch_load_queue(m); *_ret = unit_follow_merge(*_ret); + return 0; +} + +int manager_load_startable_unit_or_warn( + Manager *m, + const char *name, + const char *path, + Unit **ret) { + + /* Load a unit, make sure it loaded fully and is not masked. */ + + _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; + Unit *unit; + int r; + + r = manager_load_unit(m, name, path, &error, &unit); + if (r < 0) + return log_error_errno(r, "Failed to load %s %s: %s", + name ? "unit" : "file", name ?: path, + bus_error_message(&error, r)); + else if (IN_SET(unit->load_state, UNIT_ERROR, UNIT_NOT_FOUND)) + return log_error_errno(unit->load_error, "Failed to load %s %s: %m", + name ? "unit" : "file", name ?: path); + else if (unit->load_state == UNIT_MASKED) { + log_error("%s %s is masked.", + name ? "Unit" : "File", name ?: path); + return -ERFKILL; + } + *ret = unit; return 0; } diff --git a/src/core/manager.h b/src/core/manager.h index 6047c02532..cab89d8192 100644 --- a/src/core/manager.h +++ b/src/core/manager.h @@ -383,6 +383,7 @@ int manager_get_job_from_dbus_path(Manager *m, const char *s, Job **_j); int manager_load_unit_prepare(Manager *m, const char *name, const char *path, sd_bus_error *e, Unit **_ret); int manager_load_unit(Manager *m, const char *name, const char *path, sd_bus_error *e, Unit **_ret); +int manager_load_startable_unit_or_warn(Manager *m, const char *name, const char *path, Unit **ret); int manager_load_unit_from_dbus_path(Manager *m, const char *s, sd_bus_error *e, Unit **_u); int manager_add_job(Manager *m, JobType type, Unit *unit, JobMode mode, sd_bus_error *e, Job **_ret); diff --git a/src/libsystemd/sd-path/sd-path.c b/src/libsystemd/sd-path/sd-path.c index d8867bc439..c75a39613b 100644 --- a/src/libsystemd/sd-path/sd-path.c +++ b/src/libsystemd/sd-path/sd-path.c @@ -335,6 +335,7 @@ _public_ int sd_path_home(uint64_t type, const char *suffix, char **path) { if (IN_SET(type, SD_PATH_SEARCH_BINARIES, + SD_PATH_SEARCH_BINARIES_DEFAULT, SD_PATH_SEARCH_LIBRARY_PRIVATE, SD_PATH_SEARCH_LIBRARY_ARCH, SD_PATH_SEARCH_SHARED, @@ -553,7 +554,17 @@ static int get_search(uint64_t type, char ***list) { false, "/etc", NULL); - } + + case SD_PATH_SEARCH_BINARIES_DEFAULT: { + char **t; + + t = strv_split_nulstr(DEFAULT_PATH_NULSTR); + if (!t) + return -ENOMEM; + + *list = t; + return 0; + }} return -EOPNOTSUPP; } @@ -566,6 +577,7 @@ _public_ int sd_path_search(uint64_t type, const char *suffix, char ***paths) { if (!IN_SET(type, SD_PATH_SEARCH_BINARIES, + SD_PATH_SEARCH_BINARIES_DEFAULT, SD_PATH_SEARCH_LIBRARY_PRIVATE, SD_PATH_SEARCH_LIBRARY_ARCH, SD_PATH_SEARCH_SHARED, diff --git a/src/path/path.c b/src/path/path.c index 16a12875a8..5275845750 100644 --- a/src/path/path.c +++ b/src/path/path.c @@ -54,6 +54,7 @@ static const char* const path_table[_SD_PATH_MAX] = { [SD_PATH_USER_TEMPLATES] = "user-templates", [SD_PATH_USER_DESKTOP] = "user-desktop", [SD_PATH_SEARCH_BINARIES] = "search-binaries", + [SD_PATH_SEARCH_BINARIES_DEFAULT] = "search-binaries-default", [SD_PATH_SEARCH_LIBRARY_PRIVATE] = "search-library-private", [SD_PATH_SEARCH_LIBRARY_ARCH] = "search-library-arch", [SD_PATH_SEARCH_SHARED] = "search-shared", diff --git a/src/systemd/sd-path.h b/src/systemd/sd-path.h index 2dfc8967b4..19f48b73eb 100644 --- a/src/systemd/sd-path.h +++ b/src/systemd/sd-path.h @@ -74,6 +74,7 @@ enum { /* Search paths */ SD_PATH_SEARCH_BINARIES, + SD_PATH_SEARCH_BINARIES_DEFAULT, SD_PATH_SEARCH_LIBRARY_PRIVATE, SD_PATH_SEARCH_LIBRARY_ARCH, SD_PATH_SEARCH_SHARED, diff --git a/src/test/meson.build b/src/test/meson.build index c138481df8..61bb23ef7e 100644 --- a/src/test/meson.build +++ b/src/test/meson.build @@ -553,7 +553,8 @@ tests += [ libseccomp, libselinux, libmount, - libblkid]], + libblkid], + '', 'timeout=360'], [['src/test/test-siphash24.c'], [], diff --git a/src/test/test-cgroup-mask.c b/src/test/test-cgroup-mask.c index 1e59bb02bb..90e2cc8edb 100644 --- a/src/test/test-cgroup-mask.c +++ b/src/test/test-cgroup-mask.c @@ -53,16 +53,11 @@ static int test_cgroup_mask(void) { assert_se(manager_startup(m, serial, fdset) >= 0); /* Load units and verify hierarchy. */ - assert_se(manager_load_unit(m, "parent.slice", NULL, NULL, &parent) >= 0); - assert_se(manager_load_unit(m, "son.service", NULL, NULL, &son) >= 0); - assert_se(manager_load_unit(m, "daughter.service", NULL, NULL, &daughter) >= 0); - assert_se(manager_load_unit(m, "grandchild.service", NULL, NULL, &grandchild) >= 0); - assert_se(manager_load_unit(m, "parent-deep.slice", NULL, NULL, &parent_deep) >= 0); - assert_se(parent->load_state == UNIT_LOADED); - assert_se(son->load_state == UNIT_LOADED); - assert_se(daughter->load_state == UNIT_LOADED); - assert_se(grandchild->load_state == UNIT_LOADED); - assert_se(parent_deep->load_state == UNIT_LOADED); + assert_se(manager_load_startable_unit_or_warn(m, "parent.slice", NULL, &parent) >= 0); + assert_se(manager_load_startable_unit_or_warn(m, "son.service", NULL, &son) >= 0); + assert_se(manager_load_startable_unit_or_warn(m, "daughter.service", NULL, &daughter) >= 0); + assert_se(manager_load_startable_unit_or_warn(m, "grandchild.service", NULL, &grandchild) >= 0); + assert_se(manager_load_startable_unit_or_warn(m, "parent-deep.slice", NULL, &parent_deep) >= 0); assert_se(UNIT_DEREF(son->slice) == parent); assert_se(UNIT_DEREF(daughter->slice) == parent); assert_se(UNIT_DEREF(parent_deep->slice) == parent); diff --git a/src/test/test-engine.c b/src/test/test-engine.c index 1c12a8644d..6d3b0a1627 100644 --- a/src/test/test-engine.c +++ b/src/test/test-engine.c @@ -47,9 +47,9 @@ int main(int argc, char *argv[]) { assert_se(manager_startup(m, serial, fdset) >= 0); printf("Load1:\n"); - assert_se(manager_load_unit(m, "a.service", NULL, NULL, &a) >= 0); - assert_se(manager_load_unit(m, "b.service", NULL, NULL, &b) >= 0); - assert_se(manager_load_unit(m, "c.service", NULL, NULL, &c) >= 0); + assert_se(manager_load_startable_unit_or_warn(m, "a.service", NULL, &a) >= 0); + assert_se(manager_load_startable_unit_or_warn(m, "b.service", NULL, &b) >= 0); + assert_se(manager_load_startable_unit_or_warn(m, "c.service", NULL, &c) >= 0); manager_dump_units(m, stdout, "\t"); printf("Test1: (Trivial)\n"); @@ -61,8 +61,8 @@ int main(int argc, char *argv[]) { printf("Load2:\n"); manager_clear_jobs(m); - assert_se(manager_load_unit(m, "d.service", NULL, NULL, &d) >= 0); - assert_se(manager_load_unit(m, "e.service", NULL, NULL, &e) >= 0); + assert_se(manager_load_startable_unit_or_warn(m, "d.service", NULL, &d) >= 0); + assert_se(manager_load_startable_unit_or_warn(m, "e.service", NULL, &e) >= 0); manager_dump_units(m, stdout, "\t"); printf("Test2: (Cyclic Order, Unfixable)\n"); @@ -78,7 +78,7 @@ int main(int argc, char *argv[]) { manager_dump_jobs(m, stdout, "\t"); printf("Load3:\n"); - assert_se(manager_load_unit(m, "g.service", NULL, NULL, &g) >= 0); + assert_se(manager_load_startable_unit_or_warn(m, "g.service", NULL, &g) >= 0); manager_dump_units(m, stdout, "\t"); printf("Test5: (Colliding transaction, fail)\n"); @@ -100,7 +100,7 @@ int main(int argc, char *argv[]) { manager_dump_jobs(m, stdout, "\t"); printf("Load4:\n"); - assert_se(manager_load_unit(m, "h.service", NULL, NULL, &h) >= 0); + assert_se(manager_load_startable_unit_or_warn(m, "h.service", NULL, &h) >= 0); manager_dump_units(m, stdout, "\t"); printf("Test10: (Unmergeable job type of auxiliary job, fail)\n"); diff --git a/src/test/test-execute.c b/src/test/test-execute.c index 0bb2b85918..59d996c11b 100644 --- a/src/test/test-execute.c +++ b/src/test/test-execute.c @@ -132,7 +132,7 @@ static void test(Manager *m, const char *unit_name, int status_expected, int cod assert_se(unit_name); - assert_se(manager_load_unit(m, unit_name, NULL, NULL, &unit) >= 0); + assert_se(manager_load_startable_unit_or_warn(m, unit_name, NULL, &unit) >= 0); assert_se(UNIT_VTABLE(unit)->start(unit) >= 0); check(m, unit, status_expected, code_expected); } @@ -536,6 +536,10 @@ static void test_exec_capabilityboundingset(Manager *m) { test(m, "exec-capabilityboundingset-invert.service", 0, CLD_EXITED); } +static void test_exec_basic(Manager *m) { + test(m, "exec-basic.service", 0, CLD_EXITED); +} + static void test_exec_ambientcapabilities(Manager *m) { int r; @@ -635,6 +639,7 @@ static int run_tests(UnitFileScope scope, const test_function_t *tests) { int main(int argc, char *argv[]) { _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL; static const test_function_t user_tests[] = { + test_exec_basic, test_exec_ambientcapabilities, test_exec_bindpaths, test_exec_capabilityboundingset, diff --git a/src/test/test-path.c b/src/test/test-path.c index 1fd1a75990..3d990407b3 100644 --- a/src/test/test-path.c +++ b/src/test/test-path.c @@ -121,7 +121,7 @@ static void test_path_exists(Manager *m) { assert_se(m); - assert_se(manager_load_unit(m, "path-exists.path", NULL, NULL, &unit) >= 0); + assert_se(manager_load_startable_unit_or_warn(m, "path-exists.path", NULL, &unit) >= 0); assert_se(UNIT_VTABLE(unit)->start(unit) >= 0); assert_se(touch(test_path) >= 0); @@ -134,7 +134,7 @@ static void test_path_existsglob(Manager *m) { Unit *unit = NULL; assert_se(m); - assert_se(manager_load_unit(m, "path-existsglob.path", NULL, NULL, &unit) >= 0); + assert_se(manager_load_startable_unit_or_warn(m, "path-existsglob.path", NULL, &unit) >= 0); assert_se(UNIT_VTABLE(unit)->start(unit) >= 0); assert_se(touch(test_path) >= 0); @@ -151,7 +151,7 @@ static void test_path_changed(Manager *m) { assert_se(touch(test_path) >= 0); - assert_se(manager_load_unit(m, "path-changed.path", NULL, NULL, &unit) >= 0); + assert_se(manager_load_startable_unit_or_warn(m, "path-changed.path", NULL, &unit) >= 0); assert_se(UNIT_VTABLE(unit)->start(unit) >= 0); f = fopen(test_path, "w"); @@ -170,7 +170,7 @@ static void test_path_modified(Manager *m) { assert_se(touch(test_path) >= 0); - assert_se(manager_load_unit(m, "path-modified.path", NULL, NULL, &unit) >= 0); + assert_se(manager_load_startable_unit_or_warn(m, "path-modified.path", NULL, &unit) >= 0); assert_se(UNIT_VTABLE(unit)->start(unit) >= 0); f = fopen(test_path, "w"); @@ -186,7 +186,7 @@ static void test_path_unit(Manager *m) { assert_se(m); - assert_se(manager_load_unit(m, "path-unit.path", NULL, NULL, &unit) >= 0); + assert_se(manager_load_startable_unit_or_warn(m, "path-unit.path", NULL, &unit) >= 0); assert_se(UNIT_VTABLE(unit)->start(unit) >= 0); assert_se(touch(test_path) >= 0); @@ -202,7 +202,7 @@ static void test_path_directorynotempty(Manager *m) { assert_se(access(test_path, F_OK) < 0); - assert_se(manager_load_unit(m, "path-directorynotempty.path", NULL, NULL, &unit) >= 0); + assert_se(manager_load_startable_unit_or_warn(m, "path-directorynotempty.path", NULL, &unit) >= 0); assert_se(UNIT_VTABLE(unit)->start(unit) >= 0); /* MakeDirectory default to no */ @@ -223,7 +223,7 @@ static void test_path_makedirectory_directorymode(Manager *m) { assert_se(access(test_path, F_OK) < 0); - assert_se(manager_load_unit(m, "path-makedirectory.path", NULL, NULL, &unit) >= 0); + assert_se(manager_load_startable_unit_or_warn(m, "path-makedirectory.path", NULL, &unit) >= 0); assert_se(UNIT_VTABLE(unit)->start(unit) >= 0); /* Check if the directory has been created */ diff --git a/src/test/test-sched-prio.c b/src/test/test-sched-prio.c index cede70b053..7d8fc445ec 100644 --- a/src/test/test-sched-prio.c +++ b/src/test/test-sched-prio.c @@ -40,8 +40,7 @@ int main(int argc, char *argv[]) { assert_se(manager_startup(m, serial, fdset) >= 0); /* load idle ok */ - assert_se(manager_load_unit(m, "sched_idle_ok.service", NULL, NULL, &idle_ok) >= 0); - assert_se(idle_ok->load_state == UNIT_LOADED); + assert_se(manager_load_startable_unit_or_warn(m, "sched_idle_ok.service", NULL, &idle_ok) >= 0); ser = SERVICE(idle_ok); assert_se(ser->exec_context.cpu_sched_policy == SCHED_OTHER); assert_se(ser->exec_context.cpu_sched_priority == 0); @@ -49,8 +48,7 @@ int main(int argc, char *argv[]) { /* * load idle bad. This should print a warning but we have no way to look at it. */ - assert_se(manager_load_unit(m, "sched_idle_bad.service", NULL, NULL, &idle_bad) >= 0); - assert_se(idle_bad->load_state == UNIT_LOADED); + assert_se(manager_load_startable_unit_or_warn(m, "sched_idle_bad.service", NULL, &idle_bad) >= 0); ser = SERVICE(idle_ok); assert_se(ser->exec_context.cpu_sched_policy == SCHED_OTHER); assert_se(ser->exec_context.cpu_sched_priority == 0); @@ -59,8 +57,7 @@ int main(int argc, char *argv[]) { * load rr ok. * Test that the default priority is moving from 0 to 1. */ - assert_se(manager_load_unit(m, "sched_rr_ok.service", NULL, NULL, &rr_ok) >= 0); - assert_se(rr_ok->load_state == UNIT_LOADED); + assert_se(manager_load_startable_unit_or_warn(m, "sched_rr_ok.service", NULL, &rr_ok) >= 0); ser = SERVICE(rr_ok); assert_se(ser->exec_context.cpu_sched_policy == SCHED_RR); assert_se(ser->exec_context.cpu_sched_priority == 1); @@ -69,8 +66,7 @@ int main(int argc, char *argv[]) { * load rr bad. * Test that the value of 0 and 100 is ignored. */ - assert_se(manager_load_unit(m, "sched_rr_bad.service", NULL, NULL, &rr_bad) >= 0); - assert_se(rr_bad->load_state == UNIT_LOADED); + assert_se(manager_load_startable_unit_or_warn(m, "sched_rr_bad.service", NULL, &rr_bad) >= 0); ser = SERVICE(rr_bad); assert_se(ser->exec_context.cpu_sched_policy == SCHED_RR); assert_se(ser->exec_context.cpu_sched_priority == 1); @@ -79,8 +75,7 @@ int main(int argc, char *argv[]) { * load rr change. * Test that anything between 1 and 99 can be set. */ - assert_se(manager_load_unit(m, "sched_rr_change.service", NULL, NULL, &rr_sched) >= 0); - assert_se(rr_sched->load_state == UNIT_LOADED); + assert_se(manager_load_startable_unit_or_warn(m, "sched_rr_change.service", NULL, &rr_sched) >= 0); ser = SERVICE(rr_sched); assert_se(ser->exec_context.cpu_sched_policy == SCHED_RR); assert_se(ser->exec_context.cpu_sched_priority == 99); |