diff options
-rw-r--r-- | Makefile.am | 48 | ||||
-rw-r--r-- | man/systemd.mount.xml | 19 | ||||
-rw-r--r-- | rules/60-drm.rules | 5 | ||||
-rw-r--r-- | src/fstab-generator/fstab-generator.c | 36 | ||||
-rw-r--r-- | src/resolve/test-dns-packet.c | 4 | ||||
-rw-r--r-- | src/shared/seccomp-util.c | 6 | ||||
-rw-r--r-- | src/shared/seccomp-util.h | 2 | ||||
-rw-r--r-- | src/shared/tests.c | 13 | ||||
-rw-r--r-- | src/shared/tests.h | 1 | ||||
-rw-r--r-- | src/test/test-cgroup-mask.c | 2 | ||||
-rw-r--r-- | src/test/test-engine.c | 2 | ||||
-rw-r--r-- | src/test/test-execute.c | 2 | ||||
-rw-r--r-- | src/test/test-helper.h | 5 | ||||
-rw-r--r-- | src/test/test-path.c | 2 | ||||
-rw-r--r-- | src/test/test-sched-prio.c | 2 | ||||
-rw-r--r-- | test/test-resolve/_443._tcp.fedoraproject.org.pkts (renamed from src/resolve/test-data/_443._tcp.fedoraproject.org.pkts) | bin | 169 -> 169 bytes | |||
-rw-r--r-- | test/test-resolve/_openpgpkey.fedoraproject.org.pkts (renamed from src/resolve/test-data/_openpgpkey.fedoraproject.org.pkts) | bin | 986 -> 986 bytes | |||
-rw-r--r-- | test/test-resolve/fake-caa.pkts (renamed from src/resolve/test-data/fake-caa.pkts) | bin | 196 -> 196 bytes | |||
-rw-r--r-- | test/test-resolve/fedoraproject.org.pkts (renamed from src/resolve/test-data/fedoraproject.org.pkts) | bin | 1483 -> 1483 bytes | |||
-rw-r--r-- | test/test-resolve/gandi.net.pkts (renamed from src/resolve/test-data/gandi.net.pkts) | bin | 1010 -> 1010 bytes | |||
-rw-r--r-- | test/test-resolve/google.com.pkts (renamed from src/resolve/test-data/google.com.pkts) | bin | 747 -> 747 bytes | |||
-rw-r--r-- | test/test-resolve/kyhwana.org.pkts (renamed from src/resolve/test-data/kyhwana.org.pkts) | bin | 1803 -> 1803 bytes | |||
-rw-r--r-- | test/test-resolve/root.pkts (renamed from src/resolve/test-data/root.pkts) | bin | 1061 -> 1061 bytes | |||
-rw-r--r-- | test/test-resolve/sw1a1aa-sw1a2aa-sw1a2ab-sw1a2ac.find.me.uk.pkts (renamed from src/resolve/test-data/sw1a1aa-sw1a2aa-sw1a2ab-sw1a2ac.find.me.uk.pkts) | bin | 330 -> 330 bytes | |||
-rw-r--r-- | test/test-resolve/teamits.com.pkts (renamed from src/resolve/test-data/teamits.com.pkts) | bin | 1021 -> 1021 bytes | |||
-rw-r--r-- | test/test-resolve/zbyszek@fedoraproject.org.pkts (renamed from src/resolve/test-data/zbyszek@fedoraproject.org.pkts) | bin | 2533 -> 2533 bytes |
26 files changed, 122 insertions, 27 deletions
diff --git a/Makefile.am b/Makefile.am index 77e5aa7402..c45755f36e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -93,6 +93,7 @@ kernelinstalldir = $(prefix)/lib/kernel/install.d factory_etcdir = $(datadir)/factory/etc factory_pamdir = $(datadir)/factory/etc/pam.d bootlibdir = $(prefix)/lib/systemd/boot/efi +testsdir = $(prefix)/lib/systemd/tests # And these are the special ones for / rootprefix=@rootprefix@ @@ -133,6 +134,7 @@ check_DATA = dist_rootlibexec_DATA = tests= manual_tests = +TEST_DATA_FILES = TEST_EXTENSIONS = .py PY_LOG_COMPILER = $(PYTHON) DISABLE_HARD_ERRORS = yes @@ -150,6 +152,7 @@ endif AM_TESTS_ENVIRONMENT = \ export SYSTEMD_KBD_MODEL_MAP=$(abs_top_srcdir)/src/locale/kbd-model-map; \ export SYSTEMD_LANGUAGE_FALLBACK_MAP=$(abs_top_srcdir)/src/locale/language-fallback-map; \ + export TEST_DIR=$(abs_top_srcdir)/test; \ export PATH=$(abs_top_builddir):$$PATH; if ENABLE_BASH_COMPLETION @@ -218,7 +221,6 @@ AM_CPPFLAGS = \ -DLIBDIR=\"$(libdir)\" \ -DROOTLIBDIR=\"$(rootlibdir)\" \ -DROOTLIBEXECDIR=\"$(rootlibexecdir)\" \ - -DTEST_DIR=\"$(abs_top_srcdir)/test\" \ -I $(top_srcdir)/src \ -I $(top_builddir)/src/basic \ -I $(top_srcdir)/src/basic \ @@ -1606,7 +1608,7 @@ tests += \ test-seccomp endif -EXTRA_DIST += \ +TEST_DATA_FILES += \ test/a.service \ test/basic.target \ test/b.service \ @@ -5638,7 +5640,7 @@ test_dns_packet_SOURCES = \ test_dns_packet_CPPFLAGS = \ $(AM_CPPFLAGS) \ - -DRESOLVE_TEST_DIR=\"$(abs_top_srcdir)/src/resolve/test-data\" + -I $(top_srcdir)/src/test test_dns_packet_CFLAGS = \ $(AM_CFLAGS) \ @@ -5649,18 +5651,20 @@ test_dns_packet_LDADD = \ $(GCRYPT_LIBS) \ -lm -EXTRA_DIST += \ - src/resolve/test-data/_openpgpkey.fedoraproject.org.pkts \ - src/resolve/test-data/fedoraproject.org.pkts \ - src/resolve/test-data/gandi.net.pkts \ - src/resolve/test-data/google.com.pkts \ - src/resolve/test-data/root.pkts \ - src/resolve/test-data/sw1a1aa-sw1a2aa-sw1a2ab-sw1a2ac.find.me.uk.pkts \ - src/resolve/test-data/teamits.com.pkts \ - src/resolve/test-data/zbyszek@fedoraproject.org.pkts \ - src/resolve/test-data/_443._tcp.fedoraproject.org.pkts \ - src/resolve/test-data/kyhwana.org.pkts \ - src/resolve/test-data/fake-caa.pkts +TEST_DATA_FILES += \ + test/test-resolve/_openpgpkey.fedoraproject.org.pkts \ + test/test-resolve/fedoraproject.org.pkts \ + test/test-resolve/gandi.net.pkts \ + test/test-resolve/google.com.pkts \ + test/test-resolve/root.pkts \ + test/test-resolve/sw1a1aa-sw1a2aa-sw1a2ab-sw1a2ac.find.me.uk.pkts \ + test/test-resolve/teamits.com.pkts \ + test/test-resolve/zbyszek@fedoraproject.org.pkts \ + test/test-resolve/_443._tcp.fedoraproject.org.pkts \ + test/test-resolve/kyhwana.org.pkts \ + test/test-resolve/fake-caa.pkts + +EXTRA_DIST += $(TEST_DATA_FILES) test_dnssec_SOURCES = \ src/resolve/test-dnssec.c \ @@ -6694,6 +6698,20 @@ tests += \ test-libsystemd-sym \ test-libudev-sym +.PHONY: install-tests +install-tests: $(tests) $(TEST_DATA_FILES) + for f in $(tests); do \ + if [ -x .libs/$$f ]; then \ + install -D -m 755 .libs/$$f $(DESTDIR)/$(testsdir)/$$f; \ + else \ + install -D -m 755 $$f $(DESTDIR)/$(testsdir)/$$f; \ + fi; \ + done + for f in $(TEST_DATA_FILES); do \ + install -D -m 644 $$f $(DESTDIR)/$(testsdir)/testdata/$${f#test/}; \ + done + + .PHONY: cppcheck cppcheck: cppcheck --enable=all -q $(top_srcdir) diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml index bb372d788a..598b5772fd 100644 --- a/man/systemd.mount.xml +++ b/man/systemd.mount.xml @@ -194,6 +194,25 @@ </varlistentry> <varlistentry> + <term><option>x-systemd.before=</option></term> + <term><option>x-systemd.after=</option></term> + + <listitem><para>Configures a <varname>Before=</varname> + dependency or <varname>After=</varname> between the created + mount unit and another systemd unit, such as a mount unit. + The argument should be a unit name or an absolute path + to a mount point. This option may be specified more than once. + This option is particularly useful for mount point declarations + with <option>nofail</option> option that are mounted + asynchronously but need to be mounted before or after some unit + start, for example, before <filename>local-fs.target</filename> + unit. + See <varname>Before=</varname> and <varname>After=</varname> in + <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry> + for details.</para></listitem> + </varlistentry> + + <varlistentry> <term><option>x-systemd.requires-mounts-for=</option></term> <listitem><para>Configures a diff --git a/rules/60-drm.rules b/rules/60-drm.rules index 1ed3e445f2..f7f3435d50 100644 --- a/rules/60-drm.rules +++ b/rules/60-drm.rules @@ -1,3 +1,8 @@ # do not edit this file, it will be overwritten on update ACTION!="remove", SUBSYSTEM=="drm", SUBSYSTEMS=="pci|usb|platform", IMPORT{builtin}="path_id" + +# by-path +ENV{ID_PATH}=="?*", KERNEL=="card*", SYMLINK+="dri/by-path/$env{ID_PATH}-card" +ENV{ID_PATH}=="?*", KERNEL=="controlD*", SYMLINK+="dri/by-path/$env{ID_PATH}-control" +ENV{ID_PATH}=="?*", KERNEL=="renderD*", SYMLINK+="dri/by-path/$env{ID_PATH}-render" diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c index d97bafd1fb..2677a3fb32 100644 --- a/src/fstab-generator/fstab-generator.c +++ b/src/fstab-generator/fstab-generator.c @@ -209,7 +209,8 @@ static int write_mount_timeout(FILE *f, const char *where, const char *opts) { "x-systemd.mount-timeout\0", "TimeoutSec"); } -static int write_requires_after(FILE *f, const char *opts) { +static int write_dependency(FILE *f, const char *opts, + const char *filter, const char *format) { _cleanup_strv_free_ char **names = NULL, **units = NULL; _cleanup_free_ char *res = NULL; char **s; @@ -218,7 +219,7 @@ static int write_requires_after(FILE *f, const char *opts) { assert(f); assert(opts); - r = fstab_extract_values(opts, "x-systemd.requires", &names); + r = fstab_extract_values(opts, filter, &names); if (r < 0) return log_warning_errno(r, "Failed to parse options: %m"); if (r == 0) @@ -239,12 +240,29 @@ static int write_requires_after(FILE *f, const char *opts) { res = strv_join(units, " "); if (!res) return log_oom(); - fprintf(f, "After=%1$s\nRequires=%1$s\n", res); +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" + fprintf(f, format, res); +#pragma GCC diagnostic pop } return 0; } +static int write_after(FILE *f, const char *opts) { + return write_dependency(f, opts, "x-systemd.after", "After=%1$s\n"); +} + +static int write_requires_after(FILE *f, const char *opts) { + return write_dependency(f, opts, + "x-systemd.requires", "After=%1$s\nRequires=%1$s\n"); +} + +static int write_before(FILE *f, const char *opts) { + return write_dependency(f, opts, + "x-systemd.before", "Before=%1$s\n"); +} + static int write_requires_mounts_for(FILE *f, const char *opts) { _cleanup_strv_free_ char **paths = NULL; _cleanup_free_ char *res = NULL; @@ -344,9 +362,15 @@ static int add_mount( fprintf(f, "Before=%s\n", post); if (!automount && opts) { + r = write_after(f, opts); + if (r < 0) + return r; r = write_requires_after(f, opts); if (r < 0) return r; + r = write_before(f, opts); + if (r < 0) + return r; r = write_requires_mounts_for(f, opts); if (r < 0) return r; @@ -421,9 +445,15 @@ static int add_mount( fprintf(f, "Before=%s\n", post); if (opts) { + r = write_after(f, opts); + if (r < 0) + return r; r = write_requires_after(f, opts); if (r < 0) return r; + r = write_before(f, opts); + if (r < 0) + return r; r = write_requires_mounts_for(f, opts); if (r < 0) return r; diff --git a/src/resolve/test-dns-packet.c b/src/resolve/test-dns-packet.c index 956b155872..3ca7e78495 100644 --- a/src/resolve/test-dns-packet.c +++ b/src/resolve/test-dns-packet.c @@ -31,6 +31,8 @@ #include "strv.h" #include "unaligned.h" +#include "test-helper.h" + #define HASH_KEY SD_ID128_MAKE(d3,1e,48,90,4b,fa,4c,fe,af,9d,d5,a1,d7,2e,8a,b1) static void verify_rr_copy(DnsResourceRecord *rr) { @@ -115,7 +117,7 @@ int main(int argc, char **argv) { N = argc - 1; fnames = argv + 1; } else { - assert_se(glob(RESOLVE_TEST_DIR "/*.pkts", GLOB_NOSORT, NULL, &g) == 0); + assert_se(glob(TEST_DATA_DIR("/test-resolve/*.pkts"), GLOB_NOSORT, NULL, &g) == 0); N = g.gl_pathc; fnames = g.gl_pathv; } diff --git a/src/shared/seccomp-util.c b/src/shared/seccomp-util.c index 84964f750f..2631856563 100644 --- a/src/shared/seccomp-util.c +++ b/src/shared/seccomp-util.c @@ -802,6 +802,8 @@ int seccomp_restrict_namespaces(unsigned long retain) { case SCMP_ARCH_X86_64: case SCMP_ARCH_X86: case SCMP_ARCH_X32: + case SCMP_ARCH_PPC64: + case SCMP_ARCH_PPC64LE: clone_reversed_order = 0; break; @@ -813,8 +815,8 @@ int seccomp_restrict_namespaces(unsigned long retain) { /* Please add more definitions here, if you port systemd to other architectures! */ -#if !defined(__i386__) && !defined(__x86_64__) && !defined(__s390__) && !defined(__s390x__) -#warning "Consider adding the right clone() syscall definitions here!" +#if SECCOMP_RESTRICT_NAMESPACES_BROKEN +# warning "Consider adding the right clone() syscall definitions here!" #endif } diff --git a/src/shared/seccomp-util.h b/src/shared/seccomp-util.h index 61f94de638..b56ac3f763 100644 --- a/src/shared/seccomp-util.h +++ b/src/shared/seccomp-util.h @@ -92,7 +92,7 @@ int seccomp_memory_deny_write_execute(void); #endif /* we don't know the right order of the clone() parameters except for these archs, for now */ -#if defined(__x86_64__) || defined(__i386__) || defined(__s390x__) || defined(__s390__) +#if defined(__x86_64__) || defined(__i386__) || defined(__s390x__) || defined(__s390__) || defined(__powerpc64__) #define SECCOMP_RESTRICT_NAMESPACES_BROKEN 0 #else #define SECCOMP_RESTRICT_NAMESPACES_BROKEN 1 diff --git a/src/shared/tests.c b/src/shared/tests.c index 409116290d..7034687725 100644 --- a/src/shared/tests.c +++ b/src/shared/tests.c @@ -17,6 +17,9 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>. ***/ +#include <alloc-util.h> +#include <fs-util.h> +#include <libgen.h> #include <stdlib.h> #include <util.h> @@ -31,3 +34,13 @@ char* setup_fake_runtime_dir(void) { return p; } + +const char* get_exe_relative_testdata_dir(void) { + _cleanup_free_ char *exedir = NULL; + /* convenience: caller does not need to free result */ + static char testdir[PATH_MAX]; + + assert_se(readlink_and_make_absolute("/proc/self/exe", &exedir) >= 0); + assert_se(snprintf(testdir, sizeof(testdir), "%s/testdata", dirname(exedir)) > 0); + return testdir; +} diff --git a/src/shared/tests.h b/src/shared/tests.h index 93f09013a1..0100b48937 100644 --- a/src/shared/tests.h +++ b/src/shared/tests.h @@ -20,3 +20,4 @@ ***/ char* setup_fake_runtime_dir(void); +const char* get_exe_relative_testdata_dir(void); diff --git a/src/test/test-cgroup-mask.c b/src/test/test-cgroup-mask.c index a027eb0fd2..630587aaf1 100644 --- a/src/test/test-cgroup-mask.c +++ b/src/test/test-cgroup-mask.c @@ -34,7 +34,7 @@ static int test_cgroup_mask(void) { int r; /* Prepare the manager. */ - assert_se(set_unit_path(TEST_DIR) >= 0); + assert_se(set_unit_path(TEST_DATA_DIR("")) >= 0); r = manager_new(UNIT_FILE_USER, true, &m); if (r == -EPERM || r == -EACCES) { puts("manager_new: Permission denied. Skipping test."); diff --git a/src/test/test-engine.c b/src/test/test-engine.c index a651f6b683..3ec2dfe10e 100644 --- a/src/test/test-engine.c +++ b/src/test/test-engine.c @@ -40,7 +40,7 @@ int main(int argc, char *argv[]) { assert_se(runtime_dir = setup_fake_runtime_dir()); /* prepare the test */ - assert_se(set_unit_path(TEST_DIR) >= 0); + assert_se(set_unit_path(TEST_DATA_DIR("")) >= 0); r = manager_new(UNIT_FILE_USER, true, &m); if (MANAGER_SKIP_TEST(r)) { log_notice_errno(r, "Skipping test: manager_new: %m"); diff --git a/src/test/test-execute.c b/src/test/test-execute.c index 3a3ab3eb94..145aa37a66 100644 --- a/src/test/test-execute.c +++ b/src/test/test-execute.c @@ -516,7 +516,7 @@ int main(int argc, char *argv[]) { } assert_se(setenv("XDG_RUNTIME_DIR", "/tmp/", 1) == 0); - assert_se(set_unit_path(TEST_DIR "/test-execute/") >= 0); + assert_se(set_unit_path(TEST_DATA_DIR("/test-execute/")) >= 0); /* Unset VAR1, VAR2 and VAR3 which are used in the PassEnvironment test * cases, otherwise (and if they are present in the environment), diff --git a/src/test/test-helper.h b/src/test/test-helper.h index ddb10f88fd..4e633ae6d8 100644 --- a/src/test/test-helper.h +++ b/src/test/test-helper.h @@ -20,6 +20,8 @@ ***/ #include "sd-daemon.h" +#include "string-util.h" +#include "tests.h" #include "macro.h" @@ -39,3 +41,6 @@ -ENOENT, \ -ENOMEDIUM /* cannot determine cgroup */ \ ) + +#define TEST_DATA_DIR(subdir) \ + strjoina(getenv("TEST_DIR") ?: get_exe_relative_testdata_dir(), subdir) diff --git a/src/test/test-path.c b/src/test/test-path.c index 5e99d478ee..d09df3e8a5 100644 --- a/src/test/test-path.c +++ b/src/test/test-path.c @@ -263,7 +263,7 @@ int main(int argc, char *argv[]) { log_open(); assert_se(runtime_dir = setup_fake_runtime_dir()); - assert_se(set_unit_path(TEST_DIR "/test-path/") >= 0); + assert_se(set_unit_path(TEST_DATA_DIR("/test-path/")) >= 0); for (test = tests; test && *test; test++) { int r; diff --git a/src/test/test-sched-prio.c b/src/test/test-sched-prio.c index 7b37910c33..dab64fea57 100644 --- a/src/test/test-sched-prio.c +++ b/src/test/test-sched-prio.c @@ -37,7 +37,7 @@ int main(int argc, char *argv[]) { assert_se(runtime_dir = setup_fake_runtime_dir()); /* prepare the test */ - assert_se(set_unit_path(TEST_DIR) >= 0); + assert_se(set_unit_path(TEST_DATA_DIR("")) >= 0); r = manager_new(UNIT_FILE_USER, true, &m); if (MANAGER_SKIP_TEST(r)) { log_notice_errno(r, "Skipping test: manager_new: %m"); diff --git a/src/resolve/test-data/_443._tcp.fedoraproject.org.pkts b/test/test-resolve/_443._tcp.fedoraproject.org.pkts Binary files differindex a383c6286d..a383c6286d 100644 --- a/src/resolve/test-data/_443._tcp.fedoraproject.org.pkts +++ b/test/test-resolve/_443._tcp.fedoraproject.org.pkts diff --git a/src/resolve/test-data/_openpgpkey.fedoraproject.org.pkts b/test/test-resolve/_openpgpkey.fedoraproject.org.pkts Binary files differindex 15de02e997..15de02e997 100644 --- a/src/resolve/test-data/_openpgpkey.fedoraproject.org.pkts +++ b/test/test-resolve/_openpgpkey.fedoraproject.org.pkts diff --git a/src/resolve/test-data/fake-caa.pkts b/test/test-resolve/fake-caa.pkts Binary files differindex 1c3ecc5491..1c3ecc5491 100644 --- a/src/resolve/test-data/fake-caa.pkts +++ b/test/test-resolve/fake-caa.pkts diff --git a/src/resolve/test-data/fedoraproject.org.pkts b/test/test-resolve/fedoraproject.org.pkts Binary files differindex 17874844d9..17874844d9 100644 --- a/src/resolve/test-data/fedoraproject.org.pkts +++ b/test/test-resolve/fedoraproject.org.pkts diff --git a/src/resolve/test-data/gandi.net.pkts b/test/test-resolve/gandi.net.pkts Binary files differindex 5ef51e0c8e..5ef51e0c8e 100644 --- a/src/resolve/test-data/gandi.net.pkts +++ b/test/test-resolve/gandi.net.pkts diff --git a/src/resolve/test-data/google.com.pkts b/test/test-resolve/google.com.pkts Binary files differindex f98c4cd855..f98c4cd855 100644 --- a/src/resolve/test-data/google.com.pkts +++ b/test/test-resolve/google.com.pkts diff --git a/src/resolve/test-data/kyhwana.org.pkts b/test/test-resolve/kyhwana.org.pkts Binary files differindex e28a725c9a..e28a725c9a 100644 --- a/src/resolve/test-data/kyhwana.org.pkts +++ b/test/test-resolve/kyhwana.org.pkts diff --git a/src/resolve/test-data/root.pkts b/test/test-resolve/root.pkts Binary files differindex 54ba668c75..54ba668c75 100644 --- a/src/resolve/test-data/root.pkts +++ b/test/test-resolve/root.pkts diff --git a/src/resolve/test-data/sw1a1aa-sw1a2aa-sw1a2ab-sw1a2ac.find.me.uk.pkts b/test/test-resolve/sw1a1aa-sw1a2aa-sw1a2ab-sw1a2ac.find.me.uk.pkts Binary files differindex a854249532..a854249532 100644 --- a/src/resolve/test-data/sw1a1aa-sw1a2aa-sw1a2ab-sw1a2ac.find.me.uk.pkts +++ b/test/test-resolve/sw1a1aa-sw1a2aa-sw1a2ab-sw1a2ac.find.me.uk.pkts diff --git a/src/resolve/test-data/teamits.com.pkts b/test/test-resolve/teamits.com.pkts Binary files differindex 11deb39677..11deb39677 100644 --- a/src/resolve/test-data/teamits.com.pkts +++ b/test/test-resolve/teamits.com.pkts diff --git a/src/resolve/test-data/zbyszek@fedoraproject.org.pkts b/test/test-resolve/zbyszek@fedoraproject.org.pkts Binary files differindex f0a6f982df..f0a6f982df 100644 --- a/src/resolve/test-data/zbyszek@fedoraproject.org.pkts +++ b/test/test-resolve/zbyszek@fedoraproject.org.pkts |