Merge pull request #4879 from poettering/systemd
This commit is contained in:
@@ -43,7 +43,7 @@ int main(int argc, char *argv[]) {
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
r = dissect_image(d->fd, NULL, 0, &m);
|
||||
r = dissect_image(d->fd, NULL, 0, DISSECT_IMAGE_REQUIRE_ROOT, &m);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to dissect image: %m");
|
||||
return EXIT_FAILURE;
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
#ifdef HAVE_SECCOMP
|
||||
#include "seccomp-util.h"
|
||||
#endif
|
||||
#include "stat-util.h"
|
||||
#include "test-helper.h"
|
||||
#include "unit.h"
|
||||
#include "util.h"
|
||||
@@ -188,15 +189,27 @@ static void test_exec_protectkernelmodules(Manager *m) {
|
||||
}
|
||||
|
||||
static void test_exec_readonlypaths(Manager *m) {
|
||||
|
||||
if (path_is_read_only_fs("/var") > 0)
|
||||
return;
|
||||
|
||||
test(m, "exec-readonlypaths.service", 0, CLD_EXITED);
|
||||
test(m, "exec-readonlypaths-mount-propagation.service", 0, CLD_EXITED);
|
||||
}
|
||||
|
||||
static void test_exec_readwritepaths(Manager *m) {
|
||||
|
||||
if (path_is_read_only_fs("/") > 0)
|
||||
return;
|
||||
|
||||
test(m, "exec-readwritepaths-mount-propagation.service", 0, CLD_EXITED);
|
||||
}
|
||||
|
||||
static void test_exec_inaccessiblepaths(Manager *m) {
|
||||
|
||||
if (path_is_read_only_fs("/") > 0)
|
||||
return;
|
||||
|
||||
test(m, "exec-inaccessiblepaths-mount-propagation.service", 0, CLD_EXITED);
|
||||
}
|
||||
|
||||
|
||||
@@ -87,27 +87,19 @@ static void test_undecchar(void) {
|
||||
}
|
||||
|
||||
static void test_unhexmem(void) {
|
||||
const char *hex = "efa214921";
|
||||
const char *hex = "efa2149213";
|
||||
const char *hex_invalid = "efa214921o";
|
||||
_cleanup_free_ char *hex2 = NULL;
|
||||
_cleanup_free_ void *mem = NULL;
|
||||
size_t len;
|
||||
|
||||
assert_se(unhexmem(hex, strlen(hex), &mem, &len) == 0);
|
||||
assert_se(unhexmem(hex, strlen(hex) + 1, &mem, &len) == -EINVAL);
|
||||
assert_se(unhexmem(hex_invalid, strlen(hex_invalid), &mem, &len) == -EINVAL);
|
||||
assert_se(unhexmem(hex, strlen(hex) + 1, &mem, &len) == -EINVAL);
|
||||
assert_se(unhexmem(hex, strlen(hex) - 1, &mem, &len) == -EINVAL);
|
||||
assert_se(unhexmem(hex, strlen(hex), &mem, &len) == 0);
|
||||
|
||||
assert_se((hex2 = hexmem(mem, len)));
|
||||
|
||||
free(mem);
|
||||
|
||||
assert_se(memcmp(hex, hex2, strlen(hex)) == 0);
|
||||
|
||||
free(hex2);
|
||||
|
||||
assert_se(unhexmem(hex, strlen(hex) - 1, &mem, &len) == 0);
|
||||
assert_se((hex2 = hexmem(mem, len)));
|
||||
assert_se(memcmp(hex, hex2, strlen(hex) - 1) == 0);
|
||||
assert_se(streq(hex, hex2));
|
||||
}
|
||||
|
||||
/* https://tools.ietf.org/html/rfc4648#section-10 */
|
||||
|
||||
@@ -35,8 +35,8 @@ static int parse_item(const char *key, const char *value, void *data) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void test_parse_proc_cmdline(void) {
|
||||
assert_se(parse_proc_cmdline(parse_item, &obj, true) >= 0);
|
||||
static void test_proc_cmdline_parse(void) {
|
||||
assert_se(proc_cmdline_parse(parse_item, &obj, true) >= 0);
|
||||
}
|
||||
|
||||
static void test_runlevel_to_target(void) {
|
||||
@@ -55,11 +55,101 @@ static void test_runlevel_to_target(void) {
|
||||
assert_se(streq_ptr(runlevel_to_target("rd.rescue"), SPECIAL_RESCUE_TARGET));
|
||||
}
|
||||
|
||||
static void test_proc_cmdline_get_key(void) {
|
||||
_cleanup_free_ char *value = NULL;
|
||||
|
||||
putenv((char*) "SYSTEMD_PROC_CMDLINE=foo_bar=quux wuff-piep=tuet zumm");
|
||||
|
||||
assert_se(proc_cmdline_get_key("", 0, &value) == -EINVAL);
|
||||
assert_se(proc_cmdline_get_key("abc", 0, NULL) == 0);
|
||||
assert_se(proc_cmdline_get_key("abc", 0, &value) == 0 && value == NULL);
|
||||
assert_se(proc_cmdline_get_key("abc", PROC_CMDLINE_VALUE_OPTIONAL, &value) == 0 && value == NULL);
|
||||
|
||||
assert_se(proc_cmdline_get_key("foo_bar", 0, &value) > 0 && streq_ptr(value, "quux"));
|
||||
value = mfree(value);
|
||||
assert_se(proc_cmdline_get_key("foo_bar", PROC_CMDLINE_VALUE_OPTIONAL, &value) > 0 && streq_ptr(value, "quux"));
|
||||
value = mfree(value);
|
||||
assert_se(proc_cmdline_get_key("foo-bar", 0, &value) > 0 && streq_ptr(value, "quux"));
|
||||
value = mfree(value);
|
||||
assert_se(proc_cmdline_get_key("foo-bar", PROC_CMDLINE_VALUE_OPTIONAL, &value) > 0 && streq_ptr(value, "quux"));
|
||||
value = mfree(value);
|
||||
assert_se(proc_cmdline_get_key("foo-bar", 0, NULL) == 0);
|
||||
assert_se(proc_cmdline_get_key("foo-bar", PROC_CMDLINE_VALUE_OPTIONAL, NULL) == -EINVAL);
|
||||
|
||||
assert_se(proc_cmdline_get_key("wuff-piep", 0, &value) > 0 && streq_ptr(value, "tuet"));
|
||||
value = mfree(value);
|
||||
assert_se(proc_cmdline_get_key("wuff-piep", PROC_CMDLINE_VALUE_OPTIONAL, &value) > 0 && streq_ptr(value, "tuet"));
|
||||
value = mfree(value);
|
||||
assert_se(proc_cmdline_get_key("wuff_piep", 0, &value) > 0 && streq_ptr(value, "tuet"));
|
||||
value = mfree(value);
|
||||
assert_se(proc_cmdline_get_key("wuff_piep", PROC_CMDLINE_VALUE_OPTIONAL, &value) > 0 && streq_ptr(value, "tuet"));
|
||||
value = mfree(value);
|
||||
assert_se(proc_cmdline_get_key("wuff_piep", 0, NULL) == 0);
|
||||
assert_se(proc_cmdline_get_key("wuff_piep", PROC_CMDLINE_VALUE_OPTIONAL, NULL) == -EINVAL);
|
||||
|
||||
assert_se(proc_cmdline_get_key("zumm", 0, &value) == 0 && value == NULL);
|
||||
assert_se(proc_cmdline_get_key("zumm", PROC_CMDLINE_VALUE_OPTIONAL, &value) > 0 && value == NULL);
|
||||
assert_se(proc_cmdline_get_key("zumm", 0, NULL) > 0);
|
||||
}
|
||||
|
||||
static void test_proc_cmdline_get_bool(void) {
|
||||
bool value = false;
|
||||
|
||||
putenv((char*) "SYSTEMD_PROC_CMDLINE=foo_bar bar-waldo=1 x_y-z=0 quux=miep");
|
||||
|
||||
assert_se(proc_cmdline_get_bool("", &value) == -EINVAL);
|
||||
assert_se(proc_cmdline_get_bool("abc", &value) == 0 && value == false);
|
||||
assert_se(proc_cmdline_get_bool("foo_bar", &value) > 0 && value == true);
|
||||
assert_se(proc_cmdline_get_bool("foo-bar", &value) > 0 && value == true);
|
||||
assert_se(proc_cmdline_get_bool("bar-waldo", &value) > 0 && value == true);
|
||||
assert_se(proc_cmdline_get_bool("bar_waldo", &value) > 0 && value == true);
|
||||
assert_se(proc_cmdline_get_bool("x_y-z", &value) > 0 && value == false);
|
||||
assert_se(proc_cmdline_get_bool("x-y-z", &value) > 0 && value == false);
|
||||
assert_se(proc_cmdline_get_bool("x-y_z", &value) > 0 && value == false);
|
||||
assert_se(proc_cmdline_get_bool("x_y_z", &value) > 0 && value == false);
|
||||
assert_se(proc_cmdline_get_bool("quux", &value) == -EINVAL && value == false);
|
||||
}
|
||||
|
||||
static void test_proc_cmdline_key_streq(void) {
|
||||
|
||||
assert_se(proc_cmdline_key_streq("", ""));
|
||||
assert_se(proc_cmdline_key_streq("a", "a"));
|
||||
assert_se(!proc_cmdline_key_streq("", "a"));
|
||||
assert_se(!proc_cmdline_key_streq("a", ""));
|
||||
assert_se(proc_cmdline_key_streq("a", "a"));
|
||||
assert_se(!proc_cmdline_key_streq("a", "b"));
|
||||
assert_se(proc_cmdline_key_streq("x-y-z", "x-y-z"));
|
||||
assert_se(proc_cmdline_key_streq("x-y-z", "x_y_z"));
|
||||
assert_se(proc_cmdline_key_streq("x-y-z", "x-y_z"));
|
||||
assert_se(proc_cmdline_key_streq("x-y-z", "x_y-z"));
|
||||
assert_se(proc_cmdline_key_streq("x_y-z", "x-y_z"));
|
||||
assert_se(!proc_cmdline_key_streq("x_y-z", "x-z_z"));
|
||||
}
|
||||
|
||||
static void test_proc_cmdline_key_startswith(void) {
|
||||
|
||||
assert_se(proc_cmdline_key_startswith("", ""));
|
||||
assert_se(proc_cmdline_key_startswith("x", ""));
|
||||
assert_se(!proc_cmdline_key_startswith("", "x"));
|
||||
assert_se(proc_cmdline_key_startswith("x", "x"));
|
||||
assert_se(!proc_cmdline_key_startswith("x", "y"));
|
||||
assert_se(!proc_cmdline_key_startswith("foo-bar", "quux"));
|
||||
assert_se(proc_cmdline_key_startswith("foo-bar", "foo"));
|
||||
assert_se(proc_cmdline_key_startswith("foo-bar", "foo-bar"));
|
||||
assert_se(proc_cmdline_key_startswith("foo-bar", "foo_bar"));
|
||||
assert_se(proc_cmdline_key_startswith("foo-bar", "foo_"));
|
||||
assert_se(!proc_cmdline_key_startswith("foo-bar", "foo_xx"));
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
log_parse_environment();
|
||||
log_open();
|
||||
|
||||
test_parse_proc_cmdline();
|
||||
test_proc_cmdline_parse();
|
||||
test_proc_cmdline_key_streq();
|
||||
test_proc_cmdline_key_startswith();
|
||||
test_proc_cmdline_get_key();
|
||||
test_proc_cmdline_get_bool();
|
||||
test_runlevel_to_target();
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -18,12 +18,14 @@
|
||||
***/
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <linux/magic.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "fd-util.h"
|
||||
#include "fileio.h"
|
||||
#include "macro.h"
|
||||
#include "missing.h"
|
||||
#include "stat-util.h"
|
||||
|
||||
static void test_files_same(void) {
|
||||
@@ -60,9 +62,33 @@ static void test_is_symlink(void) {
|
||||
unlink(name_link);
|
||||
}
|
||||
|
||||
static void test_path_is_os_tree(void) {
|
||||
assert_se(path_is_os_tree("/") > 0);
|
||||
assert_se(path_is_os_tree("/etc") == 0);
|
||||
assert_se(path_is_os_tree("/idontexist") == -ENOENT);
|
||||
}
|
||||
|
||||
static void test_path_check_fstype(void) {
|
||||
assert_se(path_check_fstype("/run", TMPFS_MAGIC) > 0);
|
||||
assert_se(path_check_fstype("/run", BTRFS_SUPER_MAGIC) == 0);
|
||||
assert_se(path_check_fstype("/proc", PROC_SUPER_MAGIC) > 0);
|
||||
assert_se(path_check_fstype("/proc", BTRFS_SUPER_MAGIC) == 0);
|
||||
assert_se(path_check_fstype("/proc", BTRFS_SUPER_MAGIC) == 0);
|
||||
assert_se(path_check_fstype("/i-dont-exist", BTRFS_SUPER_MAGIC) == -ENOENT);
|
||||
}
|
||||
|
||||
static void test_path_is_temporary_fs(void) {
|
||||
assert_se(path_is_temporary_fs("/run") > 0);
|
||||
assert_se(path_is_temporary_fs("/proc") == 0);
|
||||
assert_se(path_is_temporary_fs("/i-dont-exist") == -ENOENT);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
test_files_same();
|
||||
test_is_symlink();
|
||||
test_path_is_os_tree();
|
||||
test_path_check_fstype();
|
||||
test_path_is_temporary_fs();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user