diff options
383 files changed, 3537 insertions, 5420 deletions
diff --git a/.gitignore b/.gitignore index d2f1a1f9d6..ea9aacfd9f 100644 --- a/.gitignore +++ b/.gitignore @@ -38,7 +38,6 @@ /defined /exported /exported-* -/gtk-doc.make /hostnamectl /install-tree /journalctl @@ -175,6 +174,7 @@ /test-compress-benchmark /test-condition /test-conf-files +/test-conf-parser /test-copy /test-coredump-vacuum /test-daemon diff --git a/.travis.yml b/.travis.yml index 4ea2bc2d30..5d63474c1d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,8 +3,8 @@ compiler: - gcc before_install: - sudo apt-get update -qq - - sudo apt-get install autotools-dev automake autoconf libtool libdbus-1-dev libcap-dev libblkid-dev libmount-dev libpam-dev libcryptsetup-dev libaudit-dev libacl1-dev libattr1-dev libselinux-dev liblzma-dev libgcrypt-dev libqrencode-dev libmicrohttpd-dev gtk-doc-tools gperf python2.7-dev -script: ./autogen.sh && ./configure --enable-gtk-doc --enable-gtk-doc-pdf && make V=1 && sudo ./systemd-machine-id-setup && make check && make distcheck + - sudo apt-get install autotools-dev automake autoconf libtool libdbus-1-dev libcap-dev libblkid-dev libmount-dev libpam-dev libcryptsetup-dev libaudit-dev libacl1-dev libattr1-dev libselinux-dev liblzma-dev libgcrypt-dev libqrencode-dev libmicrohttpd-dev gperf python2.7-dev +script: ./autogen.sh && ./configure && make V=1 && sudo ./systemd-machine-id-setup && make check && make distcheck after_failure: cat test-suite.log notifications: irc: diff --git a/CODING_STYLE b/CODING_STYLE index 91f09e80a8..bdec988ce6 100644 --- a/CODING_STYLE +++ b/CODING_STYLE @@ -292,3 +292,24 @@ - When returning a return code from main(), please preferably use EXIT_FAILURE and EXIT_SUCCESS as defined by libc. + +- The order in which header files are included doesn't matter too + much. However, please try to include the headers of external + libraries first (these are all headers enclosed in <>), followed by + the headers of our own public headers (these are all headers + starting with "sd-"), internal utility libraries from src/shared/, + followed by the headers of the specific component. Or in other + words: + + #include <stdio.h> + #include "sd-daemon.h" + #include "util.h" + #include "frobnicator.h" + + Where stdio.h is a public glibc API, sd-daemon.h is a public API of + our own, util.h is a utility library header from src/shared, and + frobnicator.h is an placeholder name for any systemd component. The + benefit of following this ordering is that more local definitions + are always defined after more global ones. Thus, our local + definitions will never "leak" into the global header files, possibly + altering their effect due to #ifdeffery. diff --git a/Makefile.am b/Makefile.am index d6010c5cc2..7603b2c0e1 100644 --- a/Makefile.am +++ b/Makefile.am @@ -42,10 +42,6 @@ LIBUDEV_CURRENT=7 LIBUDEV_REVISION=3 LIBUDEV_AGE=6 -LIBGUDEV_CURRENT=2 -LIBGUDEV_REVISION=0 -LIBGUDEV_AGE=2 - LIBSYSTEMD_CURRENT=7 LIBSYSTEMD_REVISION=0 LIBSYSTEMD_AGE=7 @@ -627,6 +623,7 @@ systemgenerator_PROGRAMS += \ endif EXTRA_DIST += \ + src/systemctl/systemd-sysv-install.SKELETON \ units/rc-local.service.in \ units/halt-local.service.in @@ -721,12 +718,6 @@ man/systemd.directives.xml: $(top_srcdir)/tools/make-directive-index.py $(SOURCE $(AM_V_at)$(MKDIR_P) $(dir $@) $(AM_V_GEN)$(PYTHON) $< $@ $(filter-out $<,$^) -EXTRA_DIST += \ - man/systemd.index.xml \ - man/index.html \ - man/systemd.directives.xml \ - man/glib-event-glue.c - CLEANFILES += \ man/systemd.index.xml \ man/systemd.directives.xml @@ -742,7 +733,12 @@ EXTRA_DIST += \ $(man_MANS) \ tools/make-man-index.py \ tools/make-directive-index.py \ - tools/xml_helper.py + tools/xml_helper.py \ + man/systemd.index.xml \ + man/index.html \ + man/systemd.directives.xml \ + man/glib-event-glue.c \ + $(NULL) # ------------------------------------------------------------------------------ noinst_LTLIBRARIES += \ @@ -785,6 +781,8 @@ libsystemd_shared_la_SOURCES = \ src/shared/time-util.h \ src/shared/locale-util.c \ src/shared/locale-util.h \ + src/shared/signal-util.c \ + src/shared/signal-util.h \ src/shared/mempool.c \ src/shared/mempool.h \ src/shared/hashmap.c \ @@ -918,7 +916,42 @@ libsystemd_shared_la_SOURCES = \ src/shared/sysctl-util.c \ src/shared/sysctl-util.h \ src/shared/hostname-util.h \ - src/shared/hostname-util.c + src/shared/hostname-util.c \ + src/shared/socket-label.c \ + src/shared/label.c \ + src/shared/label.h \ + src/shared/selinux-util.c \ + src/shared/selinux-util.h \ + src/shared/mkdir-label.c \ + src/shared/ask-password-api.c \ + src/shared/ask-password-api.h \ + src/shared/switch-root.h \ + src/shared/switch-root.c \ + src/shared/fileio-label.c \ + src/shared/fileio-label.h \ + src/shared/dev-setup.c \ + src/shared/dev-setup.h \ + src/shared/dropin.c \ + src/shared/dropin.h \ + src/shared/condition.c \ + src/shared/condition.h \ + src/shared/generator.h \ + src/shared/generator.c \ + src/shared/btrfs-util.c \ + src/shared/btrfs-util.h \ + src/shared/btrfs-ctree.h \ + src/shared/rm-rf.c \ + src/shared/rm-rf.h \ + src/shared/copy.c \ + src/shared/copy.h \ + src/shared/install.c \ + src/shared/install.h \ + src/shared/install-printf.c \ + src/shared/install-printf.h \ + src/shared/path-lookup.c \ + src/shared/path-lookup.h \ + src/shared/specifier.c \ + src/shared/specifier.h if HAVE_UTMP libsystemd_shared_la_SOURCES += \ @@ -937,74 +970,27 @@ nodist_libsystemd_shared_la_SOURCES = \ libsystemd_shared_la_CFLAGS = \ $(AM_CFLAGS) \ + $(SELINUX_CFLAGS) \ $(CAP_CFLAGS) \ $(SECCOMP_CFLAGS) \ -pthread libsystemd_shared_la_LIBADD = \ + $(SELINUX_LIBS) \ $(CAP_LIBS) \ -lm -# ------------------------------------------------------------------------------ -noinst_LTLIBRARIES += \ - libsystemd-units.la - -libsystemd_units_la_SOURCES = \ - src/shared/install.c \ - src/shared/install.h \ - src/shared/install-printf.c \ - src/shared/install-printf.h \ - src/shared/path-lookup.c \ - src/shared/path-lookup.h \ - src/shared/specifier.c \ - src/shared/specifier.h - -# ------------------------------------------------------------------------------ +# ----------------------------------------------------------------------------- noinst_LTLIBRARIES += \ - libsystemd-label.la + libsystemd-machine.la -libsystemd_label_la_SOURCES = \ - src/shared/socket-label.c \ - src/shared/label.c \ - src/shared/label.h \ - src/shared/selinux-util.c \ - src/shared/selinux-util.h \ - src/shared/mkdir-label.c \ - src/shared/ask-password-api.c \ - src/shared/ask-password-api.h \ - src/shared/switch-root.h \ - src/shared/switch-root.c \ - src/shared/fileio-label.c \ - src/shared/fileio-label.h \ - src/shared/dev-setup.c \ - src/shared/dev-setup.h \ - src/shared/dropin.c \ - src/shared/dropin.h \ - src/shared/condition.c \ - src/shared/condition.h \ - src/shared/generator.h \ - src/shared/generator.c \ - src/shared/btrfs-util.c \ - src/shared/btrfs-util.h \ - src/shared/btrfs-ctree.h \ - src/shared/rm-rf.c \ - src/shared/rm-rf.h \ +libsystemd_machine_la_SOURCES = \ src/shared/machine-image.c \ src/shared/machine-image.h \ src/shared/machine-pool.c \ - src/shared/machine-pool.h \ - src/shared/copy.c \ - src/shared/copy.h - -libsystemd_label_la_CFLAGS = \ - $(AM_CFLAGS) \ - $(SELINUX_CFLAGS) - -libsystemd_label_la_LIBADD = \ - $(SELINUX_LIBS) + src/shared/machine-pool.h # ----------------------------------------------------------------------------- - if HAVE_LIBIPTC noinst_LTLIBRARIES += \ libsystemd-fw.la @@ -1022,7 +1008,6 @@ libsystemd_fw_la_LIBADD = \ endif # ----------------------------------------------------------------------------- - if ENABLE_LDCONFIG dist_systemunit_DATA += \ units/ldconfig.service @@ -1215,8 +1200,6 @@ libsystemd_core_la_CFLAGS = \ -pthread libsystemd_core_la_LIBADD = \ - libsystemd-units.la \ - libsystemd-label.la \ libudev-internal.la \ libsystemd-shared.la \ libsystemd-internal.la \ @@ -1451,6 +1434,7 @@ tests += \ test-socket-util \ test-fdset \ test-conf-files \ + test-conf-parser \ test-capability \ test-async \ test-ratelimit \ @@ -1654,7 +1638,6 @@ test_copy_SOURCES = \ src/test/test-copy.c test_copy_LDADD = \ - libsystemd-label.la \ libsystemd-shared.la test_sigbus_SOURCES = \ @@ -1667,9 +1650,8 @@ test_condition_SOURCES = \ src/test/test-condition.c test_condition_LDADD = \ - libsystemd-label.la \ - libsystemd-internal.la \ - libsystemd-shared.la + libsystemd-shared.la \ + libsystemd-internal.la test_fdset_SOURCES = \ src/test/test-fdset.c @@ -1694,7 +1676,6 @@ test_util_SOURCES = \ src/test/test-util.c test_util_LDADD = \ - libsystemd-label.la \ libsystemd-shared.la test_process_util_SOURCES = \ @@ -1714,8 +1695,6 @@ test_path_lookup_SOURCES = \ test_path_lookup_LDADD = \ -lm \ - libsystemd-units.la \ - libsystemd-label.la \ libsystemd-shared.la test_uid_range_SOURCES = \ @@ -1889,7 +1868,6 @@ test_btrfs_SOURCES = \ src/test/test-btrfs.c test_btrfs_LDADD = \ - libsystemd-label.la \ libsystemd-shared.la if HAVE_LIBIPTC @@ -1965,7 +1943,6 @@ test_cgroup_SOURCES = \ src/test/test-cgroup.c test_cgroup_LDADD = \ - libsystemd-label.la \ libsystemd-shared.la \ libsystemd-internal.la @@ -1987,9 +1964,8 @@ test_cgroup_util_SOURCES = \ src/test/test-cgroup-util.c test_cgroup_util_LDADD = \ - libsystemd-label.la \ - libsystemd-internal.la \ - libsystemd-shared.la + libsystemd-shared.la \ + libsystemd-internal.la test_env_replace_SOURCES = \ src/test/test-env-replace.c @@ -2007,15 +1983,13 @@ test_strv_SOURCES = \ src/test/test-strv.c test_strv_LDADD = \ - libsystemd-units.la \ - libsystemd-internal.la \ - libsystemd-shared.la + libsystemd-shared.la \ + libsystemd-internal.la test_path_util_SOURCES = \ src/test/test-path-util.c test_path_util_LDADD = \ - libsystemd-label.la \ libsystemd-shared.la test_path_SOURCES = \ @@ -2046,8 +2020,6 @@ test_install_SOURCES = \ src/test/test-install.c test_install_LDADD = \ - libsystemd-units.la \ - libsystemd-label.la \ libsystemd-shared.la \ libsystemd-internal.la @@ -2075,7 +2047,12 @@ test_conf_files_SOURCES = \ src/test/test-conf-files.c test_conf_files_LDADD = \ - libsystemd-label.la \ + libsystemd-shared.la + +test_conf_parser_SOURCES = \ + src/test/test-conf-parser.c + +test_conf_parser_LDADD = \ libsystemd-shared.la test_bus_policy_SOURCES = \ @@ -2083,8 +2060,8 @@ test_bus_policy_SOURCES = \ test_bus_policy_LDADD = \ libsystemd-proxy.la \ - libsystemd-internal.la \ - libsystemd-shared.la + libsystemd-shared.la \ + libsystemd-internal.la # ------------------------------------------------------------------------------ ## .PHONY so it always rebuilds it @@ -2131,14 +2108,14 @@ systemd_analyze_SOURCES = \ src/analyze/analyze-verify.c \ src/analyze/analyze-verify.h -systemd_verify_CFLAGS = \ +systemd_analyze_CFLAGS = \ $(AM_CFLAGS) \ $(SECCOMP_CFLAGS) systemd_analyze_LDADD = \ libsystemd-core.la \ - libsystemd-internal.la \ libsystemd-shared.la \ + libsystemd-internal.la \ $(RT_LIBS) # ------------------------------------------------------------------------------ @@ -2167,9 +2144,8 @@ systemd_update_done_SOURCES = \ src/update-done/update-done.c systemd_update_done_LDADD = \ - libsystemd-internal.la \ - libsystemd-label.la \ - libsystemd-shared.la + libsystemd-shared.la \ + libsystemd-internal.la # ------------------------------------------------------------------------------ systemd_shutdown_SOURCES = \ @@ -2182,7 +2158,6 @@ systemd_shutdown_SOURCES = \ src/core/killall.c systemd_shutdown_LDADD = \ - libsystemd-label.la \ libudev-internal.la \ libsystemd-internal.la \ libsystemd-shared.la @@ -2228,10 +2203,8 @@ systemd_tmpfiles_SOURCES = \ src/tmpfiles/tmpfiles.c systemd_tmpfiles_LDADD = \ - libsystemd-units.la \ - libsystemd-label.la \ - libsystemd-internal.la \ - libsystemd-shared.la + libsystemd-shared.la \ + libsystemd-internal.la if HAVE_ACL systemd_tmpfiles_LDADD += \ @@ -2293,10 +2266,8 @@ systemd_sysusers_SOURCES = \ src/sysusers/sysusers.c systemd_sysusers_LDADD = \ - libsystemd-units.la \ - libsystemd-label.la \ - libsystemd-internal.la \ - libsystemd-shared.la + libsystemd-shared.la \ + libsystemd-internal.la rootbin_PROGRAMS += \ systemd-sysusers @@ -2311,15 +2282,15 @@ nodist_sysusers_DATA = \ sysusers.d/systemd.conf \ sysusers.d/basic.conf +INSTALL_DIRS += \ + $(sysusersdir) +endif + EXTRA_DIST += \ units/systemd-sysusers.service.in \ sysusers.d/systemd.conf.m4 \ sysusers.d/basic.conf.in -INSTALL_DIRS += \ - $(sysusersdir) -endif - # ------------------------------------------------------------------------------ dist_factory_etc_DATA = \ factory/etc/nsswitch.conf @@ -2336,10 +2307,8 @@ systemd_firstboot_SOURCES = \ src/firstboot/firstboot.c systemd_firstboot_LDADD = \ - libsystemd-units.la \ - libsystemd-label.la \ - libsystemd-internal.la \ libsystemd-shared.la \ + libsystemd-internal.la \ -lcrypt rootbin_PROGRAMS += \ @@ -2348,13 +2317,13 @@ rootbin_PROGRAMS += \ nodist_systemunit_DATA += \ units/systemd-firstboot.service -EXTRA_DIST += \ - units/systemd-firstboot.service.in - SYSINIT_TARGET_WANTS += \ systemd-firstboot.service endif +EXTRA_DIST += \ + units/systemd-firstboot.service.in + # ------------------------------------------------------------------------------ systemd_machine_id_setup_SOURCES = \ src/machine-id-setup/machine-id-setup-main.c \ @@ -2362,9 +2331,8 @@ systemd_machine_id_setup_SOURCES = \ src/core/machine-id-setup.h systemd_machine_id_setup_LDADD = \ - libsystemd-label.la \ - libsystemd-internal.la \ - libsystemd-shared.la + libsystemd-shared.la \ + libsystemd-internal.la # ------------------------------------------------------------------------------ systemd_sysctl_SOURCES = \ @@ -2385,7 +2353,6 @@ systemd_fsck_SOURCES = \ src/fsck/fsck.c systemd_fsck_LDADD = \ - libsystemd-internal.la \ libudev-internal.la \ libsystemd-internal.la \ libsystemd-shared.la @@ -2397,9 +2364,8 @@ systemd_machine_id_commit_SOURCES = \ src/core/machine-id-setup.h systemd_machine_id_commit_LDADD = \ - libsystemd-label.la \ - libsystemd-internal.la \ - libsystemd-shared.la + libsystemd-shared.la \ + libsystemd-internal.la SYSINIT_TARGET_WANTS += \ systemd-machine-id-commit.service @@ -2410,8 +2376,8 @@ systemd_ac_power_SOURCES = \ systemd_ac_power_LDADD = \ libudev-internal.la \ - libsystemd-internal.la \ - libsystemd-shared.la + libsystemd-shared.la \ + libsystemd-internal.la # ------------------------------------------------------------------------------ systemd_detect_virt_SOURCES = \ @@ -2435,7 +2401,6 @@ systemd_getty_generator_SOURCES = \ src/getty-generator/getty-generator.c systemd_getty_generator_LDADD = \ - libsystemd-label.la \ libsystemd-shared.la # ------------------------------------------------------------------------------ @@ -2443,7 +2408,6 @@ systemd_debug_generator_SOURCES = \ src/debug-generator/debug-generator.c systemd_debug_generator_LDADD = \ - libsystemd-label.la \ libsystemd-shared.la # ------------------------------------------------------------------------------ @@ -2452,7 +2416,6 @@ systemd_fstab_generator_SOURCES = \ src/core/mount-setup.c systemd_fstab_generator_LDADD = \ - libsystemd-label.la \ libsystemd-shared.la # ------------------------------------------------------------------------------ @@ -2460,7 +2423,6 @@ systemd_system_update_generator_SOURCES = \ src/system-update-generator/system-update-generator.c systemd_system_update_generator_LDADD = \ - libsystemd-label.la \ libsystemd-shared.la # ------------------------------------------------------------------------------ @@ -2475,21 +2437,15 @@ systemd_hibernate_resume_SOURCES = \ src/hibernate-resume/hibernate-resume.c systemd_hibernate_resume_LDADD = \ - libsystemd-internal.la \ - libsystemd-shared.la + libsystemd-shared.la \ + libsystemd-internal.la systemd_hibernate_resume_generator_SOURCES = \ src/hibernate-resume/hibernate-resume-generator.c systemd_hibernate_resume_generator_LDADD = \ - libsystemd-label.la \ libsystemd-shared.la -EXTRA_DIST += \ - units/systemd-hibernate.service.in \ - units/systemd-hibernate-resume@.service.in \ - units/systemd-hybrid-sleep.service.in - dist_systemunit_DATA += \ units/hibernate.target \ units/hybrid-sleep.target @@ -2500,6 +2456,11 @@ nodist_systemunit_DATA += \ units/systemd-hybrid-sleep.service endif +EXTRA_DIST += \ + units/systemd-hibernate.service.in \ + units/systemd-hibernate-resume@.service.in \ + units/systemd-hybrid-sleep.service.in + # ------------------------------------------------------------------------------ if ENABLE_EFI systemgenerator_PROGRAMS += \ @@ -2509,7 +2470,6 @@ systemd_efi_boot_generator_SOURCES = \ src/efi-boot-generator/efi-boot-generator.c systemd_efi_boot_generator_LDADD = \ - libsystemd-label.la \ libsystemd-shared.la # ------------------------------------------------------------------------------ @@ -2527,7 +2487,6 @@ bootctl_CFLAGS = \ $(BLKID_CFLAGS) bootctl_LDADD = \ - libsystemd-label.la \ libsystemd-shared.la \ libsystemd-internal.la \ $(BLKID_LIBS) @@ -2685,7 +2644,6 @@ $(stub): $(stub_solib) # ------------------------------------------------------------------------------ CLEANFILES += test-efi-disk.img -EXTRA_DIST += test/test-efi-create-disk.sh test-efi-disk.img: $(systemd_boot) $(stub) test/test-efi-create-disk.sh $(AM_V_GEN)test/test-efi-create-disk.sh @@ -2695,6 +2653,8 @@ test-efi: test-efi-disk.img endif endif +EXTRA_DIST += test/test-efi-create-disk.sh + # ------------------------------------------------------------------------------ if HAVE_BLKID systemgenerator_PROGRAMS += \ @@ -2705,7 +2665,6 @@ systemd_gpt_auto_generator_SOURCES = \ src/shared/blkid-util.h systemd_gpt_auto_generator_LDADD = \ - libsystemd-label.la \ libudev-internal.la \ libsystemd-internal.la \ libsystemd-shared.la \ @@ -2725,7 +2684,6 @@ systemd_dbus1_generator_SOURCES = \ src/dbus1-generator/dbus1-generator.c systemd_dbus1_generator_LDADD = \ - libsystemd-label.la \ libsystemd-internal.la \ libsystemd-shared.la @@ -2750,7 +2708,6 @@ systemd_sysv_generator_SOURCES = \ systemd_sysv_generator_LDADD = \ libsystemd-core.la \ - libsystemd-label.la \ libsystemd-shared.la # ------------------------------------------------------------------------------ @@ -2758,7 +2715,6 @@ systemd_rc_local_generator_SOURCES = \ src/rc-local-generator/rc-local-generator.c systemd_rc_local_generator_LDADD = \ - libsystemd-label.la \ libsystemd-shared.la # ------------------------------------------------------------------------------ @@ -2768,7 +2724,6 @@ systemd_remount_fs_SOURCES = \ src/core/mount-setup.h systemd_remount_fs_LDADD = \ - libsystemd-label.la \ libsystemd-shared.la # ------------------------------------------------------------------------------ @@ -2791,11 +2746,9 @@ systemctl_SOURCES = \ src/systemctl/systemctl.c systemctl_LDADD = \ - libsystemd-units.la \ - libsystemd-label.la \ - libsystemd-internal.la \ libsystemd-logs.la \ libsystemd-journal-internal.la \ + libsystemd-internal.la \ libsystemd-shared.la # ------------------------------------------------------------------------------ @@ -2803,23 +2756,22 @@ systemd_notify_SOURCES = \ src/notify/notify.c systemd_notify_LDADD = \ - libsystemd-internal.la \ - libsystemd-shared.la + libsystemd-shared.la \ + libsystemd-internal.la # ------------------------------------------------------------------------------ systemd_path_SOURCES = \ src/path/path.c systemd_path_LDADD = \ - libsystemd-internal.la \ - libsystemd-shared.la + libsystemd-shared.la \ + libsystemd-internal.la # ------------------------------------------------------------------------------ systemd_ask_password_SOURCES = \ src/ask-password/ask-password.c systemd_ask_password_LDADD = \ - libsystemd-label.la \ libsystemd-shared.la # ------------------------------------------------------------------------------ @@ -2858,9 +2810,9 @@ systemd_nspawn_CFLAGS = \ $(BLKID_CFLAGS) systemd_nspawn_LDADD = \ - libsystemd-label.la \ libudev-internal.la \ libsystemd-internal.la \ + libsystemd-machine.la \ libsystemd-shared.la \ $(BLKID_LIBS) @@ -2880,7 +2832,6 @@ systemd_run_SOURCES = \ src/run/run.c systemd_run_LDADD = \ - libsystemd-label.la \ libsystemd-internal.la \ libsystemd-shared.la @@ -2956,7 +2907,6 @@ systemd_tty_ask_password_agent_SOURCES = \ src/tty-ask-password-agent/tty-ask-password-agent.c systemd_tty_ask_password_agent_LDADD = \ - libsystemd-label.la \ libsystemd-shared.la # ------------------------------------------------------------------------------ @@ -3409,7 +3359,6 @@ libsystemd_network_la_SOURCES = \ libsystemd_network_la_LIBADD = \ libudev-internal.la \ - libsystemd-label.la \ libsystemd-internal.la \ libsystemd-shared.la \ $(KMOD_LIBS) @@ -3432,7 +3381,6 @@ test_dhcp_client_SOURCES = \ test_dhcp_client_LDADD = \ libsystemd-network.la \ - libsystemd-label.la \ libsystemd-internal.la \ libsystemd-shared.la @@ -3451,7 +3399,6 @@ test_ipv4ll_SOURCES = \ test_ipv4ll_LDADD = \ libsystemd-network.la \ - libsystemd-label.la \ libsystemd-internal.la \ libsystemd-shared.la @@ -3657,15 +3604,6 @@ src/libsystemd-terminal/unifont-glyph-array.bin: tools/compile-unifont.py $(UNIF $(AM_V_GEN)$(PYTHON) $< <$(UNIFONT) >$@ # ------------------------------------------------------------------------------ -if ENABLE_GTK_DOC -SUBDIRS += \ - docs/libudev - -noinst_DATA += \ - docs/html/libudev \ - docs/html/gudev -endif - include_HEADERS += \ src/libudev/libudev.h @@ -3705,18 +3643,6 @@ pkgconfiglib_DATA += \ EXTRA_DIST += \ src/libudev/libudev.pc.in -CLEANFILES += \ - docs/html/libudev \ - docs/html/gudev - -docs/html/libudev: - $(AM_V_at)$(MKDIR_P) $(dir $@) - $(AM_V_LN)$(LN_S) -f ../libudev/html $@ - -docs/html/gudev: - $(AM_V_at)$(MKDIR_P) $(dir $@) - $(AM_V_LN)$(LN_S) -f ../gudev/html $@ - # move lib from $(libdir) to $(rootlibdir) and update devel link, if needed libudev-install-hook: libname=libudev.so && $(move-to-rootlibdir) @@ -3853,7 +3779,6 @@ libudev_core_la_CFLAGS = \ libudev_core_la_LIBADD = \ libudev-internal.la \ - libsystemd-label.la \ libsystemd-internal.la \ libsystemd-network.la \ libsystemd-shared.la \ @@ -3940,11 +3865,6 @@ dist_udevhwdb_DATA = \ hwdb/70-pointingstick.hwdb \ hwdb/70-touchpad.hwdb -EXTRA_DIST += \ - units/systemd-hwdb-update.service.in \ - hwdb/ids-update.pl \ - hwdb/sdio.ids - SYSINIT_TARGET_WANTS += \ systemd-hwdb-update.service @@ -3960,6 +3880,11 @@ hwdb-remove-hook: -test -n "$(DESTDIR)" || rm -f /etc/udev/hwdb.bin endif +EXTRA_DIST += \ + units/systemd-hwdb-update.service.in \ + hwdb/ids-update.pl \ + hwdb/sdio.ids + # ------------------------------------------------------------------------------ TESTS += \ test/udev-test.pl \ @@ -3985,7 +3910,6 @@ test_libudev_SOURCES = \ src/test/test-libudev.c test_libudev_LDADD = \ - libsystemd-label.la \ libudev-internal.la \ libsystemd-internal.la \ libsystemd-shared.la @@ -4113,151 +4037,6 @@ dist_udevrules_DATA += \ rules/61-accelerometer.rules # ------------------------------------------------------------------------------ -if ENABLE_GUDEV -if ENABLE_GTK_DOC -SUBDIRS += \ - docs/gudev -endif - -libgudev_includedir = \ - $(includedir)/gudev-1.0/gudev - -libgudev_include_HEADERS = \ - src/gudev/gudev.h \ - src/gudev/gudevenums.h \ - src/gudev/gudevenumtypes.h \ - src/gudev/gudevtypes.h \ - src/gudev/gudevclient.h \ - src/gudev/gudevdevice.h \ - src/gudev/gudevenumerator.h - -lib_LTLIBRARIES += libgudev-1.0.la - -pkgconfiglib_DATA += \ - src/gudev/gudev-1.0.pc - -libgudev_1_0_la_SOURCES = \ - src/gudev/libgudev-1.0.sym \ - src/gudev/gudevenums.h \ - src/gudev/gudevenumtypes.h \ - src/gudev/gudevenumtypes.h\ - src/gudev/gudevtypes.h \ - src/gudev/gudevclient.h \ - src/gudev/gudevclient.c \ - src/gudev/gudevdevice.h \ - src/gudev/gudevdevice.c \ - src/gudev/gudevenumerator.h \ - src/gudev/gudevenumerator.c \ - src/gudev/gudevprivate.h - -nodist_libgudev_1_0_la_SOURCES = \ - src/gudev/gudevmarshal.h \ - src/gudev/gudevmarshal.c \ - src/gudev/gudevenumtypes.h \ - src/gudev/gudevenumtypes.c - -BUILT_SOURCES += \ - $(nodist_libgudev_1_0_la_SOURCES) - -libgudev_1_0_la_CPPFLAGS = \ - $(AM_CPPFLAGS) \ - -I$(top_builddir)/src\ - -I$(top_srcdir)/src\ - -I$(top_builddir)/src/gudev \ - -I$(top_srcdir)/src/gudev \ - -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT \ - -D_GUDEV_COMPILATION \ - -DG_LOG_DOMAIN=\"GUdev\" - -libgudev_1_0_la_CFLAGS = \ - $(AM_CFLAGS) \ - -fvisibility=default \ - $(GLIB_CFLAGS) - -libgudev_1_0_la_LIBADD = \ - libudev.la \ - $(GLIB_LIBS) - -libgudev_1_0_la_LDFLAGS = \ - $(AM_LDFLAGS) \ - -version-info $(LIBGUDEV_CURRENT):$(LIBGUDEV_REVISION):$(LIBGUDEV_AGE) \ - -export-dynamic \ - -no-undefined \ - -Wl,--version-script=$(top_srcdir)/src/gudev/libgudev-1.0.sym - -src/gudev/gudevmarshal.h: src/gudev/gudevmarshal.list - $(AM_V_at)$(MKDIR_P) $(dir $@) - $(AM_V_GEN)glib-genmarshal $< --prefix=g_udev_marshal --header > $@ - -src/gudev/gudevmarshal.c: src/gudev/gudevmarshal.list - $(AM_V_at)$(MKDIR_P) $(dir $@) - $(AM_V_GEN)echo '#include "gudevmarshal.h"' > $@ && \ - glib-genmarshal $< --prefix=g_udev_marshal --body >> $@ - -src/gudev/gudevenumtypes.%: src/gudev/gudevenumtypes.%.template src/gudev/gudevenums.h - $(AM_V_at)$(MKDIR_P) $(dir $@) - $(AM_V_GEN)glib-mkenums --template $^ > $@ - -if HAVE_INTROSPECTION --include $(INTROSPECTION_MAKEFILE) - -src/gudev/GUdev-1.0.gir: libgudev-1.0.la - -src_gudev_GUdev_1_0_gir_INCLUDES = GObject-2.0 - -src_gudev_GUdev_1_0_gir_CFLAGS = \ - $(AM_CFLAGS) \ - $(INCLUDES) \ - -D_GUDEV_COMPILATION \ - -D_GUDEV_WORK_AROUND_DEV_T_BUG \ - -I$(top_srcdir)/src \ - -I$(top_builddir)/src \ - -I$(top_srcdir)/src/gudev \ - -I$(top_builddir)/src/gudev - -src_gudev_GUdev_1_0_gir_LIBS = libgudev-1.0.la - -src_gudev_GUdev_1_0_gir_SCANNERFLAGS = \ - --pkg-export=gudev-1.0 \ - --warn-all - -src_gudev_GUdev_1_0_gir_FILES = \ - src/gudev/gudev.h \ - src/gudev/gudevtypes.h \ - src/gudev/gudevenums.h \ - src/gudev/gudevenumtypes.h \ - src/gudev/gudevclient.h \ - src/gudev/gudevdevice.h \ - src/gudev/gudevenumerator.h \ - src/gudev/gudevclient.c \ - src/gudev/gudevdevice.c \ - src/gudev/gudevenumerator.c - -INTROSPECTION_GIRS = src/gudev/GUdev-1.0.gir -INTROSPECTION_SCANNER_ARGS = --c-include=gudev/gudev.h - -girdir = $(datadir)/gir-1.0 -gir_DATA = \ - src/gudev/GUdev-1.0.gir - -typelibsdir = $(libdir)/girepository-1.0 -typelibs_DATA = \ - src/gudev/GUdev-1.0.typelib - -CLEANFILES += $(gir_DATA) $(typelibs_DATA) -endif # HAVE_INTROSPECTION -endif - -EXTRA_DIST += \ - src/gudev/gudev-1.0.pc.in \ - src/gudev/gudevmarshal.list \ - src/gudev/gudevenumtypes.h.template \ - src/gudev/gudevenumtypes.c.template \ - src/gudev/gjs-example.js \ - src/gudev/seed-example-enum.js \ - src/gudev/seed-example.js - -# ------------------------------------------------------------------------------ mtd_probe_SOURCES = \ src/udev/mtd_probe/mtd_probe.c \ src/udev/mtd_probe/mtd_probe.h \ @@ -4289,7 +4068,6 @@ systemd_activate_SOURCES = \ src/activate/activate.c systemd_activate_LDADD = \ - libsystemd-label.la \ libsystemd-internal.la \ libsystemd-shared.la @@ -4357,9 +4135,6 @@ dist_systemunit_DATA += \ nodist_systemunit_DATA += \ units/systemd-journal-remote.service -EXTRA_DIST += \ - units/systemd-journal-remote.service.in - journal-remote-install-hook: journal-install-hook -$(MKDIR_P) $(DESTDIR)/var/log/journal/remote -chown 0:0 $(DESTDIR)/var/log/journal/remote @@ -4373,6 +4148,7 @@ nodist_pkgsysconf_DATA += \ src/journal-remote/journal-remote.conf EXTRA_DIST += \ + units/systemd-journal-remote.service.in \ src/journal-remote/journal-remote.conf.in endif @@ -4399,15 +4175,14 @@ systemd_journal_upload_LDADD = \ nodist_systemunit_DATA += \ units/systemd-journal-upload.service -EXTRA_DIST += \ - units/systemd-journal-upload.service.in - nodist_pkgsysconf_DATA += \ src/journal-remote/journal-upload.conf +endif + EXTRA_DIST += \ + units/systemd-journal-upload.service.in \ src/journal-remote/journal-upload.conf.in -endif # using _CFLAGS = in the conditional below would suppress AM_CFLAGS journalctl_CFLAGS = \ @@ -4562,7 +4337,6 @@ nodist_libsystemd_journal_core_la_SOURCES = \ libsystemd_journal_core_la_LIBADD = \ libsystemd-journal-internal.la \ libudev-internal.la \ - libsystemd-label.la \ libsystemd-internal.la \ libsystemd-shared.la @@ -4664,8 +4438,7 @@ gperf_txt_sources += \ libsystemd_journal_internal_la_CFLAGS = \ $(AM_CFLAGS) -libsystemd_journal_internal_la_LIBADD = \ - libsystemd-label.la +libsystemd_journal_internal_la_LIBADD = if HAVE_XZ libsystemd_journal_internal_la_CFLAGS += \ @@ -4814,7 +4587,6 @@ systemd_coredump_SOURCES = \ systemd_coredump_LDADD = \ libsystemd-journal-internal.la \ - libsystemd-label.la \ libsystemd-internal.la \ libsystemd-shared.la @@ -4955,10 +4727,10 @@ dist_pkgsysconf_DATA += \ nodist_systemunit_DATA += \ units/systemd-bootchart.service +endif EXTRA_DIST += \ units/systemd-bootchart.service.in -endif # ------------------------------------------------------------------------------ if ENABLE_QUOTACHECK @@ -4993,7 +4765,6 @@ systemd_random_seed_SOURCES = \ src/random-seed/random-seed.c systemd_random_seed_LDADD = \ - libsystemd-label.la \ libsystemd-shared.la SYSINIT_TARGET_WANTS += \ @@ -5016,7 +4787,6 @@ systemd_backlight_SOURCES = \ src/backlight/backlight.c systemd_backlight_LDADD = \ - libsystemd-label.la \ libudev-internal.la \ libsystemd-internal.la \ libsystemd-shared.la @@ -5037,7 +4807,6 @@ systemd_rfkill_SOURCES = \ src/rfkill/rfkill.c systemd_rfkill_LDADD = \ - libsystemd-label.la \ libudev-internal.la \ libsystemd-internal.la \ libsystemd-shared.la @@ -5066,7 +4835,6 @@ systemd_cryptsetup_CFLAGS = \ $(LIBCRYPTSETUP_CFLAGS) systemd_cryptsetup_LDADD = \ - libsystemd-label.la \ libudev-internal.la \ libsystemd-internal.la \ libsystemd-shared.la \ @@ -5076,7 +4844,6 @@ systemd_cryptsetup_generator_SOURCES = \ src/cryptsetup/cryptsetup-generator.c systemd_cryptsetup_generator_LDADD = \ - libsystemd-label.la \ libsystemd-shared.la SYSINIT_TARGET_WANTS += \ @@ -5090,7 +4857,6 @@ systemd_hostnamed_SOURCES = \ src/hostname/hostnamed.c systemd_hostnamed_LDADD = \ - libsystemd-label.la \ libsystemd-internal.la \ libsystemd-shared.la @@ -5155,7 +4921,6 @@ systemd_localed_SOURCES = \ src/locale/localed.c systemd_localed_LDADD = \ - libsystemd-label.la \ libsystemd-internal.la \ libsystemd-shared.la \ $(XKBCOMMON_LIBS) @@ -5224,7 +4989,6 @@ systemd_timedated_SOURCES = \ src/timedate/timedated.c systemd_timedated_LDADD = \ - libsystemd-label.la \ libsystemd-internal.la \ libsystemd-shared.la @@ -5295,7 +5059,6 @@ gperf_gperf_sources += \ systemd_timesyncd_LDADD = \ libsystemd-resolve.la \ libsystemd-network.la \ - libsystemd-label.la \ libsystemd-internal.la \ libsystemd-shared.la @@ -5363,9 +5126,9 @@ libsystemd_machine_core_la_SOURCES = \ src/machine/image-dbus.h libsystemd_machine_core_la_LIBADD = \ - libsystemd-label.la \ libudev-internal.la \ libsystemd-internal.la \ + libsystemd-machine.la \ libsystemd-shared.la noinst_LTLIBRARIES += \ @@ -5378,7 +5141,6 @@ machinectl_LDADD = \ libsystemd-internal.la \ libsystemd-logs.la \ libsystemd-journal-internal.la \ - libsystemd-units.la \ libsystemd-shared.la rootbin_PROGRAMS += \ @@ -5427,9 +5189,6 @@ SYSTEM_UNIT_ALIASES += \ BUSNAMES_TARGET_WANTS += \ org.freedesktop.machine1.busname -EXTRA_DIST += \ - units/systemd-machined.service.in - libnss_mymachines_la_SOURCES = \ src/nss-mymachines/nss-mymachines.sym \ src/nss-mymachines/nss-mymachines.c @@ -5452,6 +5211,9 @@ lib_LTLIBRARIES += \ endif +EXTRA_DIST += \ + units/systemd-machined.service.in + # ------------------------------------------------------------------------------ if ENABLE_IMPORTD @@ -5477,8 +5239,8 @@ systemd_importd_CFLAGS = \ -D SYSTEMD_EXPORT_PATH=\"$(rootlibexecdir)/systemd-export\" systemd_importd_LDADD = \ + libsystemd-machine.la \ libsystemd-internal.la \ - libsystemd-label.la \ libsystemd-shared.la systemd_pull_SOURCES = \ @@ -5514,7 +5276,7 @@ systemd_pull_CFLAGS = \ -D USER_KEYRING_PATH=\"$(pkgsysconfdir)/import-pubring.gpg\" systemd_pull_LDADD = \ - libsystemd-label.la \ + libsystemd-machine.la \ libsystemd-internal.la \ libsystemd-shared.la \ $(LIBCURL_LIBS) \ @@ -5542,7 +5304,7 @@ systemd_import_CFLAGS = \ $(ZLIB_CFLAGS) systemd_import_LDADD = \ - libsystemd-label.la \ + libsystemd-machine.la \ libsystemd-internal.la \ libsystemd-shared.la \ $(XZ_LIBS) \ @@ -5566,7 +5328,7 @@ systemd_export_CFLAGS = \ $(ZLIB_CFLAGS) systemd_export_LDADD = \ - libsystemd-label.la \ + libsystemd-machine.la \ libsystemd-internal.la \ libsystemd-shared.la \ $(XZ_LIBS) \ @@ -5579,9 +5341,6 @@ dist_rootlibexec_DATA = \ nodist_systemunit_DATA += \ units/systemd-importd.service -EXTRA_DIST += \ - units/systemd-importd.service.in - dist_systemunit_DATA_busnames += \ units/org.freedesktop.import1.busname @@ -5617,7 +5376,6 @@ test_qcow2_CFLAGS = \ test_qcow2_LDADD = \ libsystemd-internal.la \ - libsystemd-label.la \ libsystemd-shared.la \ $(ZLIB_LIBS) @@ -5629,6 +5387,11 @@ endif endif +EXTRA_DIST += \ + units/systemd-importd.service.in \ + src/resolve/resolved.conf.in + + # ------------------------------------------------------------------------------ if ENABLE_RESOLVED systemd_resolved_SOURCES = \ @@ -5682,7 +5445,6 @@ gperf_txt_sources += \ systemd_resolved_LDADD = \ libsystemd-network.la \ - libsystemd-label.la \ libsystemd-internal.la \ libsystemd-shared.la \ $(LIBIDN_LIBS) @@ -5702,9 +5464,6 @@ dist_dbuspolicy_DATA += \ dist_dbussystemservice_DATA += \ src/resolve/org.freedesktop.resolve1.service -EXTRA_DIST += \ - units/systemd-resolved.service.m4.in - SYSTEM_UNIT_ALIASES += \ systemd-resolved.service dbus-org.freedesktop.resolve1.service @@ -5717,9 +5476,6 @@ GENERAL_ALIASES += \ nodist_pkgsysconf_DATA += \ src/resolve/resolved.conf -EXTRA_DIST += \ - src/resolve/resolved.conf.in - tests += \ test-dns-domain @@ -5730,7 +5486,6 @@ test_dns_domain_SOURCES = \ test_dns_domain_LDADD = \ libsystemd-network.la \ - libsystemd-label.la \ libsystemd-internal.la \ libsystemd-shared.la \ $(LIBIDN_LIBS) @@ -5784,6 +5539,9 @@ rootlibexec_PROGRAMS += \ endif +EXTRA_DIST += \ + units/systemd-resolved.service.m4.in + # ------------------------------------------------------------------------------ if ENABLE_NETWORKD rootlibexec_PROGRAMS += \ @@ -5854,7 +5612,6 @@ libsystemd_networkd_core_la_LIBADD = \ libudev-internal.la \ libsystemd-internal.la \ libsystemd-network.la \ - libsystemd-label.la \ libsystemd-shared.la rootlibexec_PROGRAMS += \ @@ -5947,13 +5704,12 @@ BUSNAMES_TARGET_WANTS += \ gperf_gperf_sources += \ src/network/networkd-network-gperf.gperf \ src/network/networkd-netdev-gperf.gperf +endif EXTRA_DIST += \ units/systemd-networkd.service.m4.in \ units/systemd-networkd-wait-online.service.in -endif - # ------------------------------------------------------------------------------ if ENABLE_LOGIND systemd_logind_SOURCES = \ @@ -5992,7 +5748,6 @@ libsystemd_logind_core_la_SOURCES = \ src/login/logind-acl.h libsystemd_logind_core_la_LIBADD = \ - libsystemd-label.la \ libudev-internal.la \ libsystemd-internal.la \ libsystemd-shared.la @@ -6178,14 +5933,14 @@ rootlibexec_PROGRAMS += \ nodist_systemunit_DATA += \ units/systemd-user-sessions.service -EXTRA_DIST += \ - units/systemd-user-sessions.service.in - MULTI_USER_TARGET_WANTS += \ systemd-user-sessions.service endif +EXTRA_DIST += \ + units/systemd-user-sessions.service.in + # ------------------------------------------------------------------------------ if HAVE_PYTHON_DEVEL @@ -6347,9 +6102,6 @@ clean-python: # ------------------------------------------------------------------------------ if ENABLE_COMPAT_LIBS -EXTRA_DIST += \ - src/compat-libs/linkwarning.h - libsystemd-%.c: src/compat-libs/libsystemd-%.sym $(AM_V_at)$(MKDIR_P) $(dir $@) $(AM_V_GEN)sed -r -n 's/^ +(sd_.*);/obsolete_lib(\1,$(notdir $(basename $<)));/p' <$< >$@ @@ -6459,6 +6211,7 @@ UNINSTALL_EXEC_HOOKS += compat-lib-uninstall-hook endif EXTRA_DIST += \ + src/compat-libs/linkwarning.h \ src/compat-libs/libsystemd-journal.pc.in \ src/compat-libs/libsystemd-login.pc.in \ src/compat-libs/libsystemd-id128.pc.in \ @@ -6505,6 +6258,8 @@ substitutions = \ '|DEBUGTTY=$(DEBUGTTY)|' \ '|KILL=$(KILL)|' \ '|KMOD=$(KMOD)|' \ + '|MOUNT_PATH=$(MOUNT_PATH)|' \ + '|UMOUNT_PATH=$(UMOUNT_PATH)|' \ '|MKDIR_P=$(MKDIR_P)|' \ '|QUOTAON=$(QUOTAON)|' \ '|QUOTACHECK=$(QUOTACHECK)|' \ @@ -6605,7 +6360,7 @@ man/custom-entities.ent: configure.ac printf '$(subst '|,<!ENTITY ,$(subst =, ",$(subst |',">\n,$(substitutions))))') \ > $@ # ' -DISTCLEANFILES += \ +CLEANFILES += \ man/custom-entities.ent XSLTPROC_FLAGS = \ @@ -6803,7 +6558,6 @@ DISTCHECK_CONFIGURE_FLAGS = \ --with-pamlibdir=$$dc_install_base/$(pamlibdir) \ --with-pamconfdir=$$dc_install_base/$(pamconfdir) \ --with-rootprefix=$$dc_install_base \ - --disable-split-usr \ --enable-kdbus \ --enable-compat-libs @@ -6822,9 +6576,12 @@ DISTCHECK_CONFIGURE_FLAGS += \ --with-python endif -if ENABLE_GTK_DOC +if ENABLE_SPLIT_USR +DISTCHECK_CONFIGURE_FLAGS += \ + --enable-split-usr +else DISTCHECK_CONFIGURE_FLAGS += \ - --enable-gtk-doc + --disable-split-usr endif # @@ -6853,11 +6610,6 @@ dist-check-help: $(rootbin_PROGRAMS) $(bin_PROGRAMS) dist: dist-check-python dist-check-compat-libs -# check "broken" platforms limited toolchains for link breakage before we release -.PHONY: linkcheck -linkcheck: - $(MAKE) CFLAGS='-fno-lto' LDFLAGS='-Wl,-fuse-ld=gold -Wl,--as-needed -Wl,--no-gc-sections' distcheck - .PHONY: hwdb-update hwdb-update: ( cd $(top_srcdir)/hwdb && \ @@ -6883,10 +6635,6 @@ upload: all check dist .PHONY: doc-sync doc-sync: all destdir-sphinx - gtkdoc-rebase --html-dir=docs/libudev/html --online - rsync -rlv --delete docs/libudev/html/ --omit-dir-times $(www_target)/libudev/ - gtkdoc-rebase --html-dir=docs/gudev/html --online - rsync -rlv --delete docs/gudev/html/ --omit-dir-times $(www_target)/gudev/ rsync -rlv --delete-excluded --include="*.html" --exclude="*" --omit-dir-times man/ $(www_target)/man/ rsync -rlv --delete --omit-dir-times docs/html/python-systemd/ $(www_target)/python-systemd/ @@ -1,5 +1,16 @@ systemd System and Service Manager +CHANGES WITH 221: + + * Support for chkconfig (--enable-chkconfig) was removed in favour of + calling an abstraction /lib/systemd/systemd-sysv-install. This needs + to be implemented for your distribution. See "SYSV INIT.D SCRIPTS" in + README for details. + + Contributions from: ... + + -- Berlin, UNRELEASED + CHANGES WITH 220: * The gudev library has been extracted into a separate repository @@ -7,11 +7,11 @@ WEB SITE: http://www.freedesktop.org/wiki/Software/systemd GIT: - git://anongit.freedesktop.org/systemd/systemd - ssh://git.freedesktop.org/git/systemd/systemd + git@github.com:systemd/systemd.git + https://github.com/systemd/systemd.git GITWEB: - http://cgit.freedesktop.org/systemd/systemd + https://github.com/systemd/systemd MAILING LIST: http://lists.freedesktop.org/mailman/listinfo/systemd-devel @@ -21,7 +21,7 @@ IRC: #systemd on irc.freenode.org BUG REPORTS: - https://bugs.freedesktop.org/enter_bug.cgi?product=systemd + https://github.com/systemd/systemd/issues AUTHOR: Lennart Poettering @@ -129,7 +129,6 @@ REQUIREMENTS: libmicrohttpd (optional) libpython (optional) libidn (optional) - gobject-introspection > 1.40.0 (optional) elfutils >= 158 (optional) make, gcc, and similar tools @@ -152,7 +151,6 @@ REQUIREMENTS: libtool intltool gperf - gtkdocize (optional) python (optional) python-lxml (optional, but required to build the indices) sphinx (optional) @@ -222,6 +220,17 @@ NSS: hosts: files mymachines resolve myhostname +SYSV INIT.D SCRIPTS: + When calling "systemctl enable/disable/is-enabled" on a unit which is a + SysV init.d script, it calls /usr/lib/systemd/systemd-sysv-install; + this needs to translate the action into the distribution specific + mechanism such as chkconfig or update-rc.d. Packagers need to provide + this script if you need this functionality (you don't if you disabled + SysV init support). + + Please see src/systemctl/systemd-sysv-install.SKELETON for how this + needs to look like, and provide an implementation at the marked places. + WARNINGS: systemd will warn you during boot if /etc/mtab is not a symlink to /proc/mounts. Please ensure that /etc/mtab is a @@ -239,7 +248,7 @@ WARNINGS: supported anymore by the basic set of Linux OS components. systemd requires that the /run mount point exists. systemd also - requires that /var/run is a a symlink to /run. + requires that /var/run is a symlink to /run. For more information on this issue consult http://freedesktop.org/wiki/Software/systemd/separate-usr-is-broken @@ -537,8 +537,6 @@ Features: * maybe do not install getty@tty1.service symlink in /etc but in /usr? -* re-enable "make check" for gtk-doc (broken for unknown reason) - * fstab: add new mount option x-systemd-after=/foobar/waldo to allow manual dependencies to other mount points https://bugzilla.redhat.com/show_bug.cgi?id=812826 diff --git a/autogen.sh b/autogen.sh index 7b62449be8..2d4acdfef1 100755 --- a/autogen.sh +++ b/autogen.sh @@ -28,15 +28,6 @@ if [ -f .git/hooks/pre-commit.sample ] && [ ! -f .git/hooks/pre-commit ]; then echo "Activated pre-commit hook." || : fi -if which gtkdocize >/dev/null 2>/dev/null; then - gtkdocize --docdir docs/ --flavour no-tmpl - gtkdocargs=--enable-gtk-doc -else - echo "You don't have gtk-doc installed, and thus won't be able to generate the documentation." - rm -f docs/gtk-doc.make - echo 'EXTRA_DIST =' > docs/gtk-doc.make -fi - intltoolize --force --automake autoreconf --force --install --symlink @@ -48,7 +39,7 @@ args="\ --sysconfdir=/etc \ --localstatedir=/var \ --libdir=$(libdir /usr/lib) \ -$gtkdocargs" +" if [ -f "$topdir/.config.args" ]; then args="$args $(cat $topdir/.config.args)" @@ -56,7 +47,7 @@ fi if [ ! -L /bin ]; then args="$args \ ---with-rootprefix= \ +--with-rootprefix=/ \ --with-rootlibdir=$(libdir /lib) \ " fi diff --git a/catalog/systemd.ru.catalog b/catalog/systemd.ru.catalog index f99532469a..03eea04c9f 100644 --- a/catalog/systemd.ru.catalog +++ b/catalog/systemd.ru.catalog @@ -81,7 +81,7 @@ Documentation: man:core(5) Записан дамп памяти. Вероятно, это произошло из-за ошибки, допущенной в коде программы. -Рекомендуется сообщить ее разработчикам о возникшей проблеме. +Рекомендуется сообщить её разработчикам о возникшей проблеме. # Subject: A new session @SESSION_ID@ has been created for user @USER_ID@ -- 8d45620c1a4348dbb17410da57c60c66 @@ -146,7 +146,7 @@ Defined-By: systemd Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel Все системные службы, запуск которых предписан настройками, были запущены. -Впрочем, это еще не означает, что система в данный момент ничем не занята, +Впрочем, это ещё не означает, что система в данный момент ничем не занята, так как некоторые службы могут продолжать инициализацию даже после того, как отчитались о своем запуске. @@ -274,7 +274,7 @@ Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel столбце файла /etc/fstab, либо в параметре Where= файла конфигурации юнита), не является пустым. Это никак не мешает монтированию, однако ранее находившиеся в нем файлы будут недоступны. Чтобы получить к ним доступ, вы можете вручную -перемонтировать нижележащую файловую систему в другую точку. +перемонтировать эту файловую систему в другую точку. # Subject: A virtual machine or container has been started -- 24d8d4452573402496068381a6312df2 diff --git a/configure.ac b/configure.ac index 0818dd80cf..2625e0d15b 100644 --- a/configure.ac +++ b/configure.ac @@ -21,7 +21,7 @@ AC_PREREQ([2.64]) AC_INIT([systemd], [220], - [http://bugs.freedesktop.org/enter_bug.cgi?product=systemd], + [http://github.com/systemd/systemd/issues], [systemd], [http://www.freedesktop.org/wiki/Software/systemd]) @@ -107,22 +107,6 @@ AS_IF([! ln --relative --help > /dev/null 2>&1], [AC_MSG_ERROR([*** ln doesn't s M4_DEFINES= -# gtkdocize greps for '^GTK_DOC_CHECK', so it needs to be on its own line -m4_ifdef([GTK_DOC_CHECK], [ -GTK_DOC_CHECK([1.18],[--flavour no-tmpl])], - [AM_CONDITIONAL([ENABLE_GTK_DOC], [false]) - enable_gtk_doc=no]) - -AS_IF([test "x$enable_gtk_doc" = "xyes" -a "x$XSLTPROC" = x], [ - AC_MSG_ERROR([*** GTK doc requested but xsltproc not found]) -]) - -m4_ifdef([GOBJECT_INTROSPECTION_CHECK], [ -GOBJECT_INTROSPECTION_CHECK([1.31.1]) -], [ - AM_CONDITIONAL([HAVE_INTROSPECTION], [false]) - enable_introspection=no]) - AC_CHECK_TOOL(OBJCOPY, objcopy) AC_CHECK_TOOL(STRINGS, strings) AC_CHECK_TOOL(GPERF, gperf) @@ -199,8 +183,6 @@ CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\ -fdiagnostics-show-option \ -fno-strict-aliasing \ -fvisibility=hidden \ - -ffunction-sections \ - -fdata-sections \ -fstack-protector \ -fstack-protector-strong \ -fPIE \ @@ -224,10 +206,21 @@ AS_CASE([$CFLAGS], [*-O[[12345sz\ ]]*], [AC_MSG_RESULT([skipping -D_FORTIFY_SOURCE, optimization not enabled])]) AC_SUBST([OUR_CPPFLAGS], "$with_cppflags $sanitizer_cppflags") +AS_CASE([$CFLAGS], [*-O[[12345sz\ ]]*], + [CC_CHECK_FLAGS_APPEND([with_ldflags], [LDFLAGS], [\ + -Wl,--gc-sections])], + [AC_MSG_RESULT([skipping --gc-sections, optimization not enabled])]) +AC_SUBST([OUR_CFLAGS], "$with_ldflags $sanitizer_cflags") + +AS_CASE([$CFLAGS], [*-O[[12345sz\ ]]*], + [CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\ + -ffunction-sections -fdata-sections])], + [AC_MSG_RESULT([skipping -ffunction/data-section, optimization not enabled])]) +AC_SUBST([OUR_CFLAGS], "$with_cflags $sanitizer_cflags") + CC_CHECK_FLAGS_APPEND([with_ldflags], [LDFLAGS], [\ -Wl,--as-needed \ -Wl,--no-undefined \ - -Wl,--gc-sections \ -Wl,-z,relro \ -Wl,-z,now \ -pie \ @@ -491,25 +484,6 @@ if test "x${have_ima}" != xno ; then fi # ------------------------------------------------------------------------------ -have_chkconfig=yes -AC_ARG_ENABLE([chkconfig], AS_HELP_STRING([--disable-chkconfig],[Disable optional chkconfig support]), - [case "${enableval}" in - yes) have_chkconfig=yes ;; - no) have_chkconfig=no ;; - *) AC_MSG_ERROR(bad value ${enableval} for --disable-chkconfig) ;; - esac], - [AC_PATH_PROG(CHKCONFIG, chkconfig) - if test -z "$CHKCONFIG"; then - have_chkconfig=no - else - have_chkconfig=yes - fi]) - -if test "x${have_chkconfig}" != xno ; then - AC_DEFINE(HAVE_CHKCONFIG, 1, [Define if CHKCONFIG is available]) -fi - -# ------------------------------------------------------------------------------ have_selinux=no AC_ARG_ENABLE(selinux, AS_HELP_STRING([--disable-selinux], [Disable optional SELINUX support])) if test "x$enable_selinux" != "xno"; then @@ -1313,14 +1287,6 @@ fi AM_CONDITIONAL(HAVE_MYHOSTNAME, [test "$have_myhostname" = "yes"]) # ------------------------------------------------------------------------------ -AC_ARG_ENABLE([gudev], - AS_HELP_STRING([--disable-gudev], [disable Gobject libudev support @<:@default=enabled@:>@]), - [], [enable_gudev=yes]) -AS_IF([test "x$enable_gudev" = "xyes"], [ PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.22.0 gobject-2.0 >= 2.22.0 gio-2.0]) ]) -AM_CONDITIONAL([ENABLE_GUDEV], [test "x$enable_gudev" = "xyes"]) -AS_IF([test "x$enable_gudev" = "xyes"], [ AC_DEFINE(HAVE_GLIB, 1, [Define if glib is available]) ]) - -# ------------------------------------------------------------------------------ AC_ARG_ENABLE(hwdb, [AC_HELP_STRING([--disable-hwdb], [disable hardware database support])], enable_hwdb=$enableval, enable_hwdb=yes) AM_CONDITIONAL(ENABLE_HWDB, [test x$enable_hwdb = xyes]) @@ -1389,16 +1355,19 @@ AC_ARG_WITH([dbuspolicydir], AS_HELP_STRING([--with-dbuspolicydir=DIR], [D-Bus policy directory]), [], [with_dbuspolicydir=${sysconfdir}/dbus-1/system.d]) +AX_NORMALIZE_PATH([with_dbuspolicydir]) AC_ARG_WITH([dbussessionservicedir], AS_HELP_STRING([--with-dbussessionservicedir=DIR], [D-Bus session service directory]), [], [with_dbussessionservicedir=${datadir}/dbus-1/services]) +AX_NORMALIZE_PATH([with_dbussessionservicedir]) AC_ARG_WITH([dbussystemservicedir], AS_HELP_STRING([--with-dbussystemservicedir=DIR], [D-Bus system service directory]), [], [with_dbussystemservicedir=${datadir}/dbus-1/system-services]) +AX_NORMALIZE_PATH([with_dbussystemservicedir]) AC_ARG_WITH([bashcompletiondir], AS_HELP_STRING([--with-bashcompletiondir=DIR], [Bash completions directory]), @@ -1408,29 +1377,42 @@ AC_ARG_WITH([bashcompletiondir], ] , [ with_bashcompletiondir=${datadir}/bash-completion/completions ])]) +AX_NORMALIZE_PATH([with_bashcompletiondir]) AC_ARG_WITH([zshcompletiondir], AS_HELP_STRING([--with-zshcompletiondir=DIR], [Zsh completions directory]), [], [with_zshcompletiondir=${datadir}/zsh/site-functions]) +AX_NORMALIZE_PATH([with_zshcompletiondir]) AC_ARG_WITH([rootprefix], AS_HELP_STRING([--with-rootprefix=DIR], [rootfs directory prefix for config files and kernel modules]), [], [with_rootprefix=${ac_default_prefix}]) +# --with-rootprefix= (empty) should default to "/" but AX_NORMALIZE_PATH +# defaults those to ".", solve that here for now until we can find a suitable +# fix for AX_NORMALIZE_PATH upstream at autoconf-archive. +# See: https://github.com/systemd/systemd/issues/54 +if test "x${with_rootprefix}" = "x"; then + with_rootprefix="/" +fi +AX_NORMALIZE_PATH([with_rootprefix]) AC_ARG_WITH([rootlibdir], AS_HELP_STRING([--with-rootlibdir=DIR], [Root directory for libraries necessary for boot]), [], [with_rootlibdir=${libdir}]) +AX_NORMALIZE_PATH([with_rootlibdir]) AC_ARG_WITH([pamlibdir], AS_HELP_STRING([--with-pamlibdir=DIR], [Directory for PAM modules]), [], [with_pamlibdir=${with_rootlibdir}/security]) +AX_NORMALIZE_PATH([with_pamlibdir]) AC_ARG_WITH([pamconfdir], AS_HELP_STRING([--with-pamconfdir=DIR], [Directory for PAM configuration]), [], [with_pamconfdir=${sysconfdir}/pam.d]) +AX_NORMALIZE_PATH([with_pamconfdir]) AC_ARG_ENABLE([split-usr], AS_HELP_STRING([--enable-split-usr], [Assume that /bin, /sbin aren\'t symlinks into /usr]), @@ -1452,13 +1434,7 @@ AC_SUBST(DEFAULT_DKR_INDEX_URL) AS_IF([test "x${enable_split_usr}" = "xyes"], [ AC_DEFINE(HAVE_SPLIT_USR, 1, [Define if /bin, /sbin aren't symlinks into /usr]) ]) - -# Work around intltoolize and gtk-doc problems in VPATH builds -AM_CONDITIONAL([ENABLE_GTK_DOC_TESTS], [test "x$0" = "x./configure"], - [Define to do gtk-doc tests]) -AS_IF([test "x$0" != "x./configure"], [ - AC_SUBST([INTLTOOL_UPDATE], [/bin/true]) -]) +AM_CONDITIONAL(ENABLE_SPLIT_USR, [test "x${enable_split_usr}" = "xyes"]) # QEMU and OVMF UEFI firmware AS_IF([test x"$cross_compiling" = "xyes"], [], [ @@ -1514,11 +1490,8 @@ AC_SUBST([rootprefix], [$with_rootprefix]) AC_SUBST([rootlibdir], [$with_rootlibdir]) AC_CONFIG_FILES([ - Makefile po/Makefile.in - docs/libudev/Makefile - docs/libudev/version.xml - docs/gudev/Makefile - docs/gudev/version.xml + Makefile + po/Makefile.in ]) AC_OUTPUT @@ -1541,7 +1514,6 @@ AC_MSG_RESULT([ GCRYPT: ${have_gcrypt} QRENCODE: ${have_qrencode} MICROHTTPD: ${have_microhttpd} - CHKCONFIG: ${have_chkconfig} GNUTLS: ${have_gnutls} libcurl: ${have_libcurl} libidn: ${have_libidn} @@ -1585,15 +1557,12 @@ AC_MSG_RESULT([ libmount: ${have_libmount} dbus: ${have_dbus} nss-myhostname: ${have_myhostname} - gudev: ${enable_gudev} hwdb: ${enable_hwdb} - gintrospection: ${enable_introspection} terminal: ${have_terminal} kdbus: ${have_kdbus} Python: ${have_python} Python Headers: ${have_python_devel} man pages: ${have_manpages} - gtk-doc: ${enable_gtk_doc} test coverage: ${have_coverage} Split /usr: ${enable_split_usr} SysV compatibility: ${SYSTEM_SYSV_COMPAT} diff --git a/docs/.gitignore b/docs/.gitignore index f48033d321..ac7af2e80e 100644 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -1,2 +1 @@ -/gtk-doc.make /html/ diff --git a/docs/gudev/.gitignore b/docs/gudev/.gitignore deleted file mode 100644 index e6f2371ab1..0000000000 --- a/docs/gudev/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -/*.bak -/gtk-doc.make -/version.xml -/Makefile -/gudev-overrides.txt -/gudev-decl-list.txt -/gudev-decl.txt -/gudev-undeclared.txt -/gudev-undocumented.txt -/gudev-unused.txt -/gudev.args -/gudev.hierarchy -/gudev.interfaces -/gudev.prerequisites -/gudev.signals -/html/ -/xml/ -/*.stamp -/tmpl/ diff --git a/docs/gudev/Makefile.am b/docs/gudev/Makefile.am deleted file mode 100644 index 659330303b..0000000000 --- a/docs/gudev/Makefile.am +++ /dev/null @@ -1,115 +0,0 @@ -## Process this file with automake to produce Makefile.in - -# We require automake 1.10 at least. -AUTOMAKE_OPTIONS = 1.10 color-tests - -# This is a blank Makefile.am for using gtk-doc. -# Copy this to your project's API docs directory and modify the variables to -# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples -# of using the various options. - -# The name of the module, e.g. 'glib'. -DOC_MODULE=gudev - -# Uncomment for versioned docs and specify the version of the module, e.g. '2'. -#DOC_MODULE_VERSION=2 - -# The top-level SGML file. You can change this if you want to. -DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.xml - -# The directory containing the source code. Relative to $(srcdir). -# gtk-doc will search all .c & .h files beneath here for inline comments -# documenting the functions and macros. -# e.g. DOC_SOURCE_DIR=../../../gtk -DOC_SOURCE_DIR=$(top_srcdir)/src/gudev $(top_builddir)/src/gudev - -# Extra options to pass to gtkdoc-scangobj. Not normally needed. -SCANGOBJ_OPTIONS= - -# Extra options to supply to gtkdoc-scan. -# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" -SCAN_OPTIONS= - -# Extra options to supply to gtkdoc-mkdb. -# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml -MKDB_OPTIONS=--xml-mode --output-format=xml --name-space=g_udev - -# Extra options to supply to gtkdoc-mktmpl -# e.g. MKTMPL_OPTIONS=--only-section-tmpl -MKTMPL_OPTIONS= - -# Extra options to supply to gtkdoc-mkhtml -MKHTML_OPTIONS=--path=$(abs_srcdir) --path=$(abs_builddir) - -# Extra options to supply to gtkdoc-fixref. Not normally needed. -# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html -FIXXREF_OPTIONS=>/dev/null 2>&1 - -# Used for dependencies. The docs will be rebuilt if any of these change. -# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h -# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c -HFILE_GLOB=$(top_srcdir)/src/gudev/*.h -CFILE_GLOB=$(top_srcdir)/src/gudev/*.c - -# Extra header to include when scanning, which are not under DOC_SOURCE_DIR -# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h -EXTRA_HFILES= - -# Header files to ignore when scanning. Use base file name, no paths -# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h -IGNORE_HFILES=gudevenumtypes.h gudevmarshal.h - -# Images to copy into HTML directory. -# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png -HTML_IMAGES= - -# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). -# e.g. content_files=running.sgml building.sgml changes-2.0.sgml -content_files = version.xml - -# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded -# These files must be listed here *and* in content_files -# e.g. expand_content_files=running.sgml -expand_content_files= - -# Hack, hack. You silly gtk-doc, you must not add CFLAGS multiple -# times when calling gcc; it surely can not work with options that must -# be listed only once. -# Kill CFLAGS here because gtk-doc thinks adding CFLAGS to CC _and_ also -# adding CFLAGS itself again would work. -override CFLAGS= -override LDFLAGS= - -# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. -# Only needed if you are using gtkdoc-scangobj to dynamically query widget -# signals and properties. -# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) -# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) -GTKDOC_CFLAGS = \ - $(GLIB_CFLAGS) \ - -I$(top_srcdir)/src/gudev \ - -I$(top_builddir)/src/gudev - -GTKDOC_LIBS = \ - $(GLIB_LIBS) \ - $(top_builddir)/libgudev-1.0.la - -# This includes the standard gtk-doc make rules, copied by gtkdocize. -include $(top_srcdir)/docs/gtk-doc.make - -# Other files to distribute -# e.g. EXTRA_DIST += version.xml.in -EXTRA_DIST += version.xml.in - -# Files not to distribute -# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types -# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt -#DISTCLEANFILES += - -# Comment this out if you want your docs-status tested during 'make check' -if ENABLE_GTK_DOC -if ENABLE_GTK_DOC_TESTS -#TESTS_ENVIRONMENT = cd $(top_srcdir) -#TESTS = $(GTKDOC_CHECK) -endif -endif diff --git a/docs/gudev/gudev-docs.xml b/docs/gudev/gudev-docs.xml deleted file mode 100644 index 3e7e50acd4..0000000000 --- a/docs/gudev/gudev-docs.xml +++ /dev/null @@ -1,52 +0,0 @@ -<?xml version="1.0"?> -<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" - "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" -[ - <!ENTITY version SYSTEM "version.xml"> -]> -<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude"> - <bookinfo> - <title>GUdev Reference Manual</title> - <releaseinfo> - For version &version; — the latest version of this - documentation can be found at - <ulink role="online-location" url="http://www.freedesktop.org/software/systemd/gudev/"> - http://www.freedesktop.org/software/systemd/gudev/ - </ulink>. - </releaseinfo> - <copyright> - <year>2009-2012</year> - <holder>David Zeuthen <davidz@redhat.com></holder> - <holder>Bastien Nocera <hadess@hadess.net></holder> - </copyright> - </bookinfo> - - <chapter id="ref-API"> - <title>API Reference</title> - <xi:include href="xml/gudevclient.xml"/> - <xi:include href="xml/gudevdevice.xml"/> - <xi:include href="xml/gudevenumerator.xml"/> - </chapter> - - <chapter id="gudev-hierarchy"> - <title>Object Hierarchy</title> - <xi:include href="xml/tree_index.sgml"/> - </chapter> - - <index id="api-index-full"> - <title>API Index</title> - <xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include> - </index> - - <index role="165"> - <title>Index of new symbols in 165</title> - <xi:include href="xml/api-index-165.xml"><xi:fallback /></xi:include> - </index> - - <index id="api-index-deprecated" role="deprecated"> - <title>Index of deprecated API</title> - <xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include> - </index> - - <xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include> -</book> diff --git a/docs/gudev/gudev-sections.txt b/docs/gudev/gudev-sections.txt deleted file mode 100644 index 90765ee4cf..0000000000 --- a/docs/gudev/gudev-sections.txt +++ /dev/null @@ -1,102 +0,0 @@ -<SECTION> -<FILE>gudevclient</FILE> -<TITLE>GUdevClient</TITLE> -GUdevClient -GUdevClientClass -GUdevDeviceType -GUdevDeviceNumber -g_udev_client_new -g_udev_client_query_by_subsystem -g_udev_client_query_by_device_number -g_udev_client_query_by_device_file -g_udev_client_query_by_sysfs_path -g_udev_client_query_by_subsystem_and_name -<SUBSECTION Standard> -G_UDEV_CLIENT -G_UDEV_IS_CLIENT -G_UDEV_TYPE_CLIENT -g_udev_client_get_type -G_UDEV_CLIENT_CLASS -G_UDEV_IS_CLIENT_CLASS -G_UDEV_CLIENT_GET_CLASS -<SUBSECTION Private> -GUdevClientPrivate -</SECTION> - -<SECTION> -<FILE>gudevdevice</FILE> -<TITLE>GUdevDevice</TITLE> -GUdevDevice -GUdevDeviceClass -g_udev_device_get_subsystem -g_udev_device_get_devtype -g_udev_device_get_name -g_udev_device_get_number -g_udev_device_get_sysfs_path -g_udev_device_get_driver -g_udev_device_get_action -g_udev_device_get_seqnum -g_udev_device_get_device_type -g_udev_device_get_device_number -g_udev_device_get_device_file -g_udev_device_get_device_file_symlinks -g_udev_device_get_parent -g_udev_device_get_parent_with_subsystem -g_udev_device_get_tags -g_udev_device_get_is_initialized -g_udev_device_get_usec_since_initialized -g_udev_device_get_property_keys -g_udev_device_has_property -g_udev_device_get_property -g_udev_device_get_property_as_int -g_udev_device_get_property_as_uint64 -g_udev_device_get_property_as_double -g_udev_device_get_property_as_boolean -g_udev_device_get_property_as_strv -g_udev_device_get_sysfs_attr_keys -g_udev_device_has_sysfs_attr -g_udev_device_get_sysfs_attr -g_udev_device_get_sysfs_attr_as_int -g_udev_device_get_sysfs_attr_as_uint64 -g_udev_device_get_sysfs_attr_as_double -g_udev_device_get_sysfs_attr_as_boolean -g_udev_device_get_sysfs_attr_as_strv -<SUBSECTION Standard> -G_UDEV_DEVICE -G_UDEV_IS_DEVICE -G_UDEV_TYPE_DEVICE -g_udev_device_get_type -G_UDEV_DEVICE_CLASS -G_UDEV_IS_DEVICE_CLASS -G_UDEV_DEVICE_GET_CLASS -<SUBSECTION Private> -GUdevDevicePrivate -</SECTION> - -<SECTION> -<FILE>gudevenumerator</FILE> -<TITLE>GUdevEnumerator</TITLE> -GUdevEnumerator -GUdevEnumeratorClass -g_udev_enumerator_new -g_udev_enumerator_add_match_subsystem -g_udev_enumerator_add_nomatch_subsystem -g_udev_enumerator_add_match_sysfs_attr -g_udev_enumerator_add_nomatch_sysfs_attr -g_udev_enumerator_add_match_property -g_udev_enumerator_add_match_name -g_udev_enumerator_add_match_tag -g_udev_enumerator_add_match_is_initialized -g_udev_enumerator_add_sysfs_path -g_udev_enumerator_execute -<SUBSECTION Standard> -G_UDEV_ENUMERATOR -G_UDEV_IS_ENUMERATOR -G_UDEV_TYPE_ENUMERATOR -g_udev_enumerator_get_type -G_UDEV_ENUMERATOR_CLASS -G_UDEV_IS_ENUMERATOR_CLASS -G_UDEV_ENUMERATOR_GET_CLASS -<SUBSECTION Private> -GUdevEnumeratorPrivate -</SECTION> diff --git a/docs/gudev/gudev.types b/docs/gudev/gudev.types deleted file mode 100644 index a89857a04d..0000000000 --- a/docs/gudev/gudev.types +++ /dev/null @@ -1,4 +0,0 @@ -g_udev_device_type_get_type -g_udev_device_get_type -g_udev_client_get_type -g_udev_enumerator_get_type diff --git a/docs/gudev/version.xml.in b/docs/gudev/version.xml.in deleted file mode 100644 index d78bda9342..0000000000 --- a/docs/gudev/version.xml.in +++ /dev/null @@ -1 +0,0 @@ -@VERSION@ diff --git a/docs/libudev/.gitignore b/docs/libudev/.gitignore deleted file mode 100644 index f8dd67c50a..0000000000 --- a/docs/libudev/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -/gtk-doc.make -/version.xml -/Makefile -/libudev-overrides.txt -/libudev-decl-list.txt -/libudev-decl.txt -/libudev-undeclared.txt -/libudev-undocumented.txt -/libudev-unused.txt -/libudev.args -/libudev.hierarchy -/libudev.interfaces -/libudev.prerequisites -/libudev.signals -/html/ -/xml/ -/*.stamp -/*.bak -/tmpl/ diff --git a/docs/libudev/Makefile.am b/docs/libudev/Makefile.am deleted file mode 100644 index 2998c35167..0000000000 --- a/docs/libudev/Makefile.am +++ /dev/null @@ -1,109 +0,0 @@ -## Process this file with automake to produce Makefile.in - -# We require automake 1.10 at least. -AUTOMAKE_OPTIONS = 1.10 color-tests - -# This is a blank Makefile.am for using gtk-doc. -# Copy this to your project's API docs directory and modify the variables to -# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples -# of using the various options. - -# The name of the module, e.g. 'glib'. -DOC_MODULE=libudev - -# Uncomment for versioned docs and specify the version of the module, e.g. '2'. -#DOC_MODULE_VERSION=2 - -# The top-level SGML file. You can change this if you want to. -DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.xml - -# The directory containing the source code. Relative to $(srcdir). -# gtk-doc will search all .c & .h files beneath here for inline comments -# documenting the functions and macros. -# e.g. DOC_SOURCE_DIR=../../../gtk -DOC_SOURCE_DIR=$(top_srcdir)/src/libudev - -# Extra options to pass to gtkdoc-scangobj. Not normally needed. -SCANGOBJ_OPTIONS= - -# Extra options to supply to gtkdoc-scan. -# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" -SCAN_OPTIONS= - -# Extra options to supply to gtkdoc-mkdb. -# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml -MKDB_OPTIONS=--xml-mode --output-format=xml --name-space=udev - -# Extra options to supply to gtkdoc-mktmpl -# e.g. MKTMPL_OPTIONS=--only-section-tmpl -MKTMPL_OPTIONS= - -# Extra options to supply to gtkdoc-mkhtml -MKHTML_OPTIONS=--path=$(abs_srcdir) --path=$(abs_builddir) - -# Extra options to supply to gtkdoc-fixref. Not normally needed. -# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html -FIXXREF_OPTIONS=>/dev/null 2>&1 - -# Used for dependencies. The docs will be rebuilt if any of these change. -# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h -# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c -HFILE_GLOB=$(top_srcdir)/src/libudev/libudev*.h -CFILE_GLOB=$(top_srcdir)/src/libudev/libudev*.c - -# Extra header to include when scanning, which are not under DOC_SOURCE_DIR -# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h -EXTRA_HFILES= - -# Header files to ignore when scanning. Use base file name, no paths -# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h -IGNORE_HFILES = libudev-private.h - -# Images to copy into HTML directory. -# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png -HTML_IMAGES= - -# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). -# e.g. content_files=running.sgml building.sgml changes-2.0.sgml -content_files = version.xml - -# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded -# These files must be listed here *and* in content_files -# e.g. expand_content_files=running.sgml -expand_content_files= - -# Hack, hack. You silly gtk-doc, you must not add CFLAGS multiple -# times when calling gcc; it surely can not work with options that must -# be listed only once. -# Kill CFLAGS here because gtk-doc thinks adding CFLAGS to CC _and_ also -# adding CFLAGS itself again would work. -override CFLAGS= -override LDFLAGS= - -# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. -# Only needed if you are using gtkdoc-scangobj to dynamically query widget -# signals and properties. -# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) -# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) -GTKDOC_CFLAGS= -GTKDOC_LIBS= - -# This includes the standard gtk-doc make rules, copied by gtkdocize. -include $(top_srcdir)/docs/gtk-doc.make - -# Other files to distribute -# e.g. EXTRA_DIST += version.xml.in -EXTRA_DIST += version.xml.in - -# Files not to distribute -# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types -# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt -#DISTCLEANFILES += - -# Comment this out if you want your docs-status tested during 'make check' -if ENABLE_GTK_DOC -if ENABLE_GTK_DOC_TESTS -#TESTS_ENVIRONMENT = cd $(top_srcdir) -#TESTS = $(GTKDOC_CHECK) -endif -endif diff --git a/docs/libudev/libudev-docs.xml b/docs/libudev/libudev-docs.xml deleted file mode 100644 index 454cd31646..0000000000 --- a/docs/libudev/libudev-docs.xml +++ /dev/null @@ -1,40 +0,0 @@ -<?xml version="1.0"?> -<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" - "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" -[ - <!ENTITY version SYSTEM "version.xml"> -]> -<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude"> - <bookinfo> - <title>libudev Reference Manual</title> - <releaseinfo> - For version &version; — the latest version of this - documentation can be found at - <ulink role="online-location" url="http://www.freedesktop.org/software/systemd/libudev/"> - http://www.freedesktop.org/software/systemd/libudev/ - </ulink>. - </releaseinfo> - <copyright> - <year>2009-2012</year> - <holder>Kay Sievers <kay@vrfy.org></holder> - </copyright> - </bookinfo> - - <chapter> - <title>API Reference</title> - <xi:include href="xml/libudev.xml"/> - <xi:include href="xml/libudev-list.xml"/> - <xi:include href="xml/libudev-device.xml"/> - <xi:include href="xml/libudev-monitor.xml"/> - <xi:include href="xml/libudev-enumerate.xml"/> - <xi:include href="xml/libudev-queue.xml"/> - <xi:include href="xml/libudev-hwdb.xml"/> - <xi:include href="xml/libudev-util.xml"/> - <xi:include href="xml/api-index-deprecated.xml"/> - </chapter> - - <index id="api-index-full"> - <title>Index</title> - <xi:include href="xml/api-index-full.xml"/> - </index> -</book> diff --git a/docs/libudev/libudev-sections.txt b/docs/libudev/libudev-sections.txt deleted file mode 100644 index 8a31ded4e9..0000000000 --- a/docs/libudev/libudev-sections.txt +++ /dev/null @@ -1,137 +0,0 @@ -<SECTION> -<FILE>libudev</FILE> -<TITLE>udev</TITLE> -udev -udev_ref -udev_unref -udev_new -udev_set_log_fn -udev_get_log_priority -udev_set_log_priority -udev_get_userdata -udev_set_userdata -</SECTION> - -<SECTION> -<FILE>libudev-list</FILE> -<TITLE>udev_list</TITLE> -udev_list_entry -udev_list_entry_get_next -udev_list_entry_get_by_name -udev_list_entry_get_name -udev_list_entry_get_value -udev_list_entry_foreach -</SECTION> - -<SECTION> -<FILE>libudev-device</FILE> -<TITLE>udev_device</TITLE> -udev_device -udev_device_ref -udev_device_unref -udev_device_get_udev -udev_device_new_from_syspath -udev_device_new_from_devnum -udev_device_new_from_subsystem_sysname -udev_device_new_from_device_id -udev_device_new_from_environment -udev_device_get_parent -udev_device_get_parent_with_subsystem_devtype -udev_device_get_devpath -udev_device_get_subsystem -udev_device_get_devtype -udev_device_get_syspath -udev_device_get_sysname -udev_device_get_sysnum -udev_device_get_devnode -udev_device_get_is_initialized -udev_device_get_devlinks_list_entry -udev_device_get_properties_list_entry -udev_device_get_tags_list_entry -udev_device_get_property_value -udev_device_get_driver -udev_device_get_devnum -udev_device_get_action -udev_device_get_sysattr_value -udev_device_set_sysattr_value -udev_device_get_sysattr_list_entry -udev_device_get_seqnum -udev_device_get_usec_since_initialized -udev_device_has_tag -</SECTION> - -<SECTION> -<FILE>libudev-monitor</FILE> -<TITLE>udev_monitor</TITLE> -udev_monitor -udev_monitor_ref -udev_monitor_unref -udev_monitor_get_udev -udev_monitor_new_from_netlink -udev_monitor_enable_receiving -udev_monitor_set_receive_buffer_size -udev_monitor_get_fd -udev_monitor_receive_device -udev_monitor_filter_add_match_subsystem_devtype -udev_monitor_filter_add_match_tag -udev_monitor_filter_update -udev_monitor_filter_remove -</SECTION> - -<SECTION> -<FILE>libudev-enumerate</FILE> -<TITLE>udev_enumerate</TITLE> -udev_enumerate -udev_enumerate_ref -udev_enumerate_unref -udev_enumerate_get_udev -udev_enumerate_new -udev_enumerate_add_match_subsystem -udev_enumerate_add_nomatch_subsystem -udev_enumerate_add_match_sysattr -udev_enumerate_add_nomatch_sysattr -udev_enumerate_add_match_property -udev_enumerate_add_match_tag -udev_enumerate_add_match_parent -udev_enumerate_add_match_is_initialized -udev_enumerate_add_match_sysname -udev_enumerate_add_syspath -udev_enumerate_scan_devices -udev_enumerate_scan_subsystems -udev_enumerate_get_list_entry -</SECTION> - -<SECTION> -<FILE>libudev-queue</FILE> -<TITLE>udev_queue</TITLE> -udev_queue -udev_queue_ref -udev_queue_unref -udev_queue_get_udev -udev_queue_new -udev_queue_get_udev_is_active -udev_queue_get_queue_is_empty -udev_queue_get_seqnum_is_finished -udev_queue_get_seqnum_sequence_is_finished -udev_queue_get_queued_list_entry -udev_queue_get_kernel_seqnum -udev_queue_get_udev_seqnum -udev_queue_get_fd -udev_queue_flush -</SECTION> - -<SECTION> -<FILE>libudev-hwdb</FILE> -<TITLE>udev_hwdb</TITLE> -udev_hwdb -udev_hwdb_ref -udev_hwdb_unref -udev_hwdb_new -udev_hwdb_get_properties_list_entry -</SECTION> - -<SECTION> -<FILE>libudev-util</FILE> -<TITLE>udev_util</TITLE> -udev_util_encode_string -</SECTION> diff --git a/docs/libudev/libudev.types b/docs/libudev/libudev.types deleted file mode 100644 index e69de29bb2..0000000000 --- a/docs/libudev/libudev.types +++ /dev/null diff --git a/docs/libudev/version.xml.in b/docs/libudev/version.xml.in deleted file mode 100644 index d78bda9342..0000000000 --- a/docs/libudev/version.xml.in +++ /dev/null @@ -1 +0,0 @@ -@VERSION@ diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb index b7823d884f..fa4633dc16 100644 --- a/hwdb/20-OUI.hwdb +++ b/hwdb/20-OUI.hwdb @@ -44305,6 +44305,9 @@ OUI:00336C* OUI:0034F1* ID_OUI_FROM_DATABASE=Radicom Research, Inc. +OUI:0034FE* + ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd + OUI:003532* ID_OUI_FROM_DATABASE=Electro-Metrics Corporation @@ -51670,6 +51673,9 @@ OUI:00F4B9* OUI:00F76F* ID_OUI_FROM_DATABASE=Apple +OUI:00F81C* + ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd + OUI:00F860* ID_OUI_FROM_DATABASE=PT. Panggung Electric Citrabuana @@ -51727,6 +51733,9 @@ OUI:02CF1C* OUI:02E6D3* ID_OUI_FROM_DATABASE=NIXDORF COMPUTER CORPORATION +OUI:04021F* + ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd + OUI:040A83* ID_OUI_FROM_DATABASE=Alcatel-Lucent @@ -51763,6 +51772,9 @@ OUI:041D10* OUI:041E64* ID_OUI_FROM_DATABASE=Apple +OUI:041E7A* + ID_OUI_FROM_DATABASE=DSPWorks + OUI:04209A* ID_OUI_FROM_DATABASE=Panasonic AVC Networks Company @@ -53170,6 +53182,9 @@ OUI:0CD502* OUI:0CD696* ID_OUI_FROM_DATABASE=Amimon Ltd +OUI:0CD6BD* + ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd + OUI:0CD7C2* ID_OUI_FROM_DATABASE=Axium Technologies, Inc. @@ -54481,6 +54496,9 @@ OUI:1C4840* OUI:1C48F9* ID_OUI_FROM_DATABASE=GN Netcom A/S +OUI:1C497B* + ID_OUI_FROM_DATABASE=Gemtek Technology Co., Ltd. + OUI:1C4AF7* ID_OUI_FROM_DATABASE=AMON INC @@ -55156,6 +55174,9 @@ OUI:241C04* OUI:241F2C* ID_OUI_FROM_DATABASE=Calsys, Inc. +OUI:241FA0* + ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd + OUI:2421AB* ID_OUI_FROM_DATABASE=Sony Ericsson Mobile Communications @@ -56110,6 +56131,9 @@ OUI:2CCD43* OUI:2CCD69* ID_OUI_FROM_DATABASE=Aqavi.com +OUI:2CCF58* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + OUI:2CD05A* ID_OUI_FROM_DATABASE=Liteon Technology Corporation @@ -56473,6 +56497,9 @@ OUI:30F42F* OUI:30F70D* ID_OUI_FROM_DATABASE=Cisco Systems +OUI:30F772* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + OUI:30F7C5* ID_OUI_FROM_DATABASE=Apple @@ -56932,6 +56959,9 @@ OUI:380A0A* OUI:380A94* ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd +OUI:380AAB* + ID_OUI_FROM_DATABASE=Formlabs + OUI:380B40* ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd @@ -57964,6 +57994,9 @@ OUI:40D559* OUI:40E230* ID_OUI_FROM_DATABASE=AzureWave Technologies, Inc. +OUI:40E3D6* + ID_OUI_FROM_DATABASE=Aruba Networks + OUI:40E730* ID_OUI_FROM_DATABASE=DEY Storage Systems, Inc. @@ -58024,6 +58057,9 @@ OUI:44184F* OUI:4419B6* ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd. +OUI:441CA8* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + OUI:441E91* ID_OUI_FROM_DATABASE=ARVIDA Intelligent Electronics Technology Co.,Ltd. @@ -59275,6 +59311,9 @@ OUI:50A6E3* OUI:50A715* ID_OUI_FROM_DATABASE=Aboundi, Inc. +OUI:50A72B* + ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd + OUI:50A733* ID_OUI_FROM_DATABASE=Ruckus Wireless @@ -59335,6 +59374,9 @@ OUI:50D274* OUI:50D6D7* ID_OUI_FROM_DATABASE=Takahata Precision +OUI:50DF95* + ID_OUI_FROM_DATABASE=Lytx + OUI:50E0C7* ID_OUI_FROM_DATABASE=TurControlSystme AG @@ -59413,6 +59455,9 @@ OUI:541B5D* OUI:541DFB* ID_OUI_FROM_DATABASE=Freestyle Energy Ltd +OUI:541E56* + ID_OUI_FROM_DATABASE=juniper networks + OUI:541FD5* ID_OUI_FROM_DATABASE=Advantage Electronics @@ -59599,6 +59644,9 @@ OUI:54A274* OUI:54A31B* ID_OUI_FROM_DATABASE=Shenzhen Linkworld Technology Co,.LTD +OUI:54A3FA* + ID_OUI_FROM_DATABASE=BQT Solutions (Australia)Pty Ltd + OUI:54A51B* ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd @@ -59710,6 +59758,9 @@ OUI:54FB58* OUI:54FDBF* ID_OUI_FROM_DATABASE=Scheidt & Bachmann GmbH +OUI:54FF82* + ID_OUI_FROM_DATABASE=Davit Solution co. + OUI:54FFCF* ID_OUI_FROM_DATABASE=Mopria Alliance @@ -59809,6 +59860,9 @@ OUI:584822* OUI:5848C0* ID_OUI_FROM_DATABASE=COFLEC +OUI:584925* + ID_OUI_FROM_DATABASE=E3 Enterprise + OUI:58493B* ID_OUI_FROM_DATABASE=Palo Alto Networks @@ -59935,6 +59989,9 @@ OUI:5894CF* OUI:58971E* ID_OUI_FROM_DATABASE=Cisco +OUI:5897BD* + ID_OUI_FROM_DATABASE=Cisco Systems + OUI:589835* ID_OUI_FROM_DATABASE=Technicolor @@ -59962,6 +60019,9 @@ OUI:58B035* OUI:58B0D4* ID_OUI_FROM_DATABASE=ZuniData Systems Inc. +OUI:58B633* + ID_OUI_FROM_DATABASE=Ruckus Wireless + OUI:58B961* ID_OUI_FROM_DATABASE=SOLEM Electronique @@ -61099,6 +61159,9 @@ OUI:64A341* OUI:64A3CB* ID_OUI_FROM_DATABASE=Apple +OUI:64A651* + ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd + OUI:64A769* ID_OUI_FROM_DATABASE=HTC Corporation @@ -61141,6 +61204,9 @@ OUI:64BABD* OUI:64BC11* ID_OUI_FROM_DATABASE=CombiQ AB +OUI:64C354* + ID_OUI_FROM_DATABASE=Avaya, Inc + OUI:64C5AA* ID_OUI_FROM_DATABASE=South African Broadcasting Corporation @@ -61600,6 +61666,9 @@ OUI:68F728* OUI:68F895* ID_OUI_FROM_DATABASE=Redflow Limited +OUI:68F956* + ID_OUI_FROM_DATABASE=Objetivos y Servicio de Valor Añadido + OUI:68FB95* ID_OUI_FROM_DATABASE=Generalplus Technology Inc. @@ -63883,6 +63952,9 @@ OUI:809FAB* OUI:80A1D7* ID_OUI_FROM_DATABASE=Shanghai DareGlobal Technologies Co.,Ltd +OUI:80A589* + ID_OUI_FROM_DATABASE=AzureWave Technologies, Inc. + OUI:80A85D* ID_OUI_FROM_DATABASE=Osterhout Design Group @@ -63973,6 +64045,9 @@ OUI:80E4DA* OUI:80E650* ID_OUI_FROM_DATABASE=Apple +OUI:80E86F* + ID_OUI_FROM_DATABASE=Cisco Systems + OUI:80EA23* ID_OUI_FROM_DATABASE=Wistron Neweb Corp. @@ -64282,6 +64357,9 @@ OUI:84A6C8* OUI:84A783* ID_OUI_FROM_DATABASE=Alcatel Lucent +OUI:84A788* + ID_OUI_FROM_DATABASE=Perples + OUI:84A8E4* ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd @@ -65149,6 +65227,9 @@ OUI:902155* OUI:902181* ID_OUI_FROM_DATABASE=Shanghai Huaqin Telecom Technology Co.,Ltd +OUI:9023EC* + ID_OUI_FROM_DATABASE=Availink, Inc. + OUI:9027E4* ID_OUI_FROM_DATABASE=Apple @@ -65272,6 +65353,9 @@ OUI:906DC8* OUI:906EBB* ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. +OUI:906FA9* + ID_OUI_FROM_DATABASE=NANJING PUTIAN TELECOMMUNICATIONS TECHNOLOGY CO.,LTD. + OUI:907025* ID_OUI_FROM_DATABASE=Garea Microsys Co.,Ltd. @@ -65839,6 +65923,9 @@ OUI:94EBCD* OUI:94F19E* ID_OUI_FROM_DATABASE=HUIZHOU MAORONG INTELLIGENT TECHNOLOGY CO.,LTD +OUI:94F278* + ID_OUI_FROM_DATABASE=Elma Electronic + OUI:94F665* ID_OUI_FROM_DATABASE=Ruckus Wireless @@ -67354,6 +67441,9 @@ OUI:A81374* OUI:A8154D* ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. +OUI:A815D6* + ID_OUI_FROM_DATABASE=Shenzhen Meione Technology CO., LTD + OUI:A816B2* ID_OUI_FROM_DATABASE=LG Electronics @@ -67792,6 +67882,9 @@ OUI:AC5D10* OUI:AC5E8C* ID_OUI_FROM_DATABASE=Utillink +OUI:AC60B6* + ID_OUI_FROM_DATABASE=Ericsson AB + OUI:AC6123* ID_OUI_FROM_DATABASE=Drivven, Inc. @@ -68323,6 +68416,9 @@ OUI:B0C554* OUI:B0C559* ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd +OUI:B0C5CA* + ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information. + OUI:B0C69A* ID_OUI_FROM_DATABASE=Juniper Networks @@ -68461,6 +68557,9 @@ OUI:B424E7* OUI:B428F1* ID_OUI_FROM_DATABASE=E-Prime Co., Ltd. +OUI:B4293D* + ID_OUI_FROM_DATABASE=Shenzhen Urovo Technology Co.,Ltd. + OUI:B42A39* ID_OUI_FROM_DATABASE=ORBIT MERRET, spol. s r. o. @@ -68926,6 +69025,9 @@ OUI:B87AC9* OUI:B87CF2* ID_OUI_FROM_DATABASE=Aerohive Networks Inc. +OUI:B88687* + ID_OUI_FROM_DATABASE=Liteon Technology Corporation + OUI:B8871E* ID_OUI_FROM_DATABASE=Good Mind Industries Co., Ltd. @@ -69700,6 +69802,9 @@ OUI:C07009* OUI:C07BBC* ID_OUI_FROM_DATABASE=Cisco +OUI:C07CD1* + ID_OUI_FROM_DATABASE=PEGATRON CORPORATION + OUI:C07E40* ID_OUI_FROM_DATABASE=SHENZHEN XDK COMMUNICATION EQUIPMENT CO.,LTD @@ -69892,6 +69997,9 @@ OUI:C401CE* OUI:C40415* ID_OUI_FROM_DATABASE=NETGEAR INC., +OUI:C4047B* + ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd + OUI:C40528* ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd @@ -70378,6 +70486,9 @@ OUI:C848F5* OUI:C84C75* ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. +OUI:C85195* + ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd + OUI:C85645* ID_OUI_FROM_DATABASE=Intermas France @@ -70486,6 +70597,9 @@ OUI:C8A729* OUI:C8A823* ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd +OUI:C8A9FC* + ID_OUI_FROM_DATABASE=Goyoo Networks Inc. + OUI:C8AA21* ID_OUI_FROM_DATABASE=ARRIS Group, Inc. @@ -71260,6 +71374,9 @@ OUI:D08CFF* OUI:D0929E* ID_OUI_FROM_DATABASE=Microsoft Corporation +OUI:D09380* + ID_OUI_FROM_DATABASE=Ducere Technologies Pvt. Ltd. + OUI:D093F8* ID_OUI_FROM_DATABASE=Stonestreet One LLC @@ -71521,6 +71638,9 @@ OUI:D43D67* OUI:D43D7E* ID_OUI_FROM_DATABASE=Micro-Star Int'l Co, Ltd +OUI:D440F0* + ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd + OUI:D443A8* ID_OUI_FROM_DATABASE=Changzhou Haojie Electric Co., Ltd. @@ -71812,6 +71932,9 @@ OUI:D4F143* OUI:D4F46F* ID_OUI_FROM_DATABASE=Apple +OUI:D4F4BE* + ID_OUI_FROM_DATABASE=Palo Alto Networks + OUI:D4F513* ID_OUI_FROM_DATABASE=Texas Instruments @@ -72022,6 +72145,9 @@ OUI:D881CE* OUI:D88466* ID_OUI_FROM_DATABASE=Extreme Networks +OUI:D888CE* + ID_OUI_FROM_DATABASE=RF Technology Pty Ltd + OUI:D88A3B* ID_OUI_FROM_DATABASE=UNIT-EM @@ -72319,6 +72445,9 @@ OUI:DC3C2E* OUI:DC3C84* ID_OUI_FROM_DATABASE=Ticom Geomatics, Inc. +OUI:DC3CF6* + ID_OUI_FROM_DATABASE=Atomic Rules LLC + OUI:DC3E51* ID_OUI_FROM_DATABASE=Solberg & Andersen AS @@ -72940,6 +73069,9 @@ OUI:E4121D* OUI:E41289* ID_OUI_FROM_DATABASE=topsystem Systemhaus GmbH +OUI:E41A2C* + ID_OUI_FROM_DATABASE=ZPE Systems, Inc. + OUI:E41C4B* ID_OUI_FROM_DATABASE=V2 TECHNOLOGY, INC. @@ -73120,6 +73252,9 @@ OUI:E496AE* OUI:E497F0* ID_OUI_FROM_DATABASE=Shanghai VLC Technologies Ltd. Co. +OUI:E498D1* + ID_OUI_FROM_DATABASE=Microsoft Mobile Oy + OUI:E498D6* ID_OUI_FROM_DATABASE=Apple, Inc @@ -73507,6 +73642,9 @@ OUI:E8BB3D* OUI:E8BBA8* ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD. +OUI:E8BDD1* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + OUI:E8BE81* ID_OUI_FROM_DATABASE=SAGEMCOM @@ -74011,6 +74149,9 @@ OUI:F02624* OUI:F0264C* ID_OUI_FROM_DATABASE=Dr. Sigrist AG +OUI:F0272D* + ID_OUI_FROM_DATABASE=Amazon Technologies Inc. + OUI:F02765* ID_OUI_FROM_DATABASE=Murata Manufactuaring Co.,Ltd. @@ -74368,6 +74509,9 @@ OUI:F40F1B* OUI:F40F9B* ID_OUI_FROM_DATABASE=WAVELINK +OUI:F41535* + ID_OUI_FROM_DATABASE=SPON Communication Technology Co.,Ltd + OUI:F41563* ID_OUI_FROM_DATABASE=F5 Networks, Inc. @@ -74527,9 +74671,15 @@ OUI:F48139* OUI:F48771* ID_OUI_FROM_DATABASE=Infoblox +OUI:F48B32* + ID_OUI_FROM_DATABASE=XIAOMI INC + OUI:F48E09* ID_OUI_FROM_DATABASE=Nokia Corporation +OUI:F48E92* + ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd + OUI:F490CA* ID_OUI_FROM_DATABASE=Tensorcom @@ -75460,6 +75610,9 @@ OUI:FCE998* OUI:FCEDB9* ID_OUI_FROM_DATABASE=Arrayent +OUI:FCF136* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + OUI:FCF152* ID_OUI_FROM_DATABASE=Sony Corporation diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb index ff8862b9ea..93241ca490 100644 --- a/hwdb/20-bluetooth-vendor-product.hwdb +++ b/hwdb/20-bluetooth-vendor-product.hwdb @@ -1237,7 +1237,7 @@ bluetooth:v0199* ID_VENDOR_FROM_DATABASE=SALTO SYSTEMS S.L. bluetooth:v019A* - ID_VENDOR_FROM_DATABASE=T-Engine Forum + ID_VENDOR_FROM_DATABASE=TRON Forum (formerly T-Engine Forum) bluetooth:v019B* ID_VENDOR_FROM_DATABASE=CUBETECH s.r.o. @@ -1508,3 +1508,162 @@ bluetooth:v01F3* bluetooth:v01F4* ID_VENDOR_FROM_DATABASE=UTC Fire and Security + +bluetooth:v01F5* + ID_VENDOR_FROM_DATABASE=Cool Webthings Limited + +bluetooth:v01F6* + ID_VENDOR_FROM_DATABASE=DJO Global + +bluetooth:v01F7* + ID_VENDOR_FROM_DATABASE=Gelliner Limited + +bluetooth:v01F8* + ID_VENDOR_FROM_DATABASE=Anyka (Guangzhou) Microelectronics Technology Co, LTD + +bluetooth:v01F9* + ID_VENDOR_FROM_DATABASE=Medtronic, Inc. + +bluetooth:v01FA* + ID_VENDOR_FROM_DATABASE=Gozio, Inc. + +bluetooth:v01FB* + ID_VENDOR_FROM_DATABASE=Form Lifting, LLC + +bluetooth:v01FC* + ID_VENDOR_FROM_DATABASE=Wahoo Fitness, LLC + +bluetooth:v01FD* + ID_VENDOR_FROM_DATABASE=Kontakt Micro-Location Sp. z o.o. + +bluetooth:v01FE* + ID_VENDOR_FROM_DATABASE=Radio System Corporation + +bluetooth:v01FF* + ID_VENDOR_FROM_DATABASE=Freescale Semiconductor, Inc. + +bluetooth:v0200* + ID_VENDOR_FROM_DATABASE=Verifone Systems PTe Ltd. Taiwan Branch + +bluetooth:v0201* + ID_VENDOR_FROM_DATABASE=AR Timing + +bluetooth:v0202* + ID_VENDOR_FROM_DATABASE=Rigado LLC + +bluetooth:v0203* + ID_VENDOR_FROM_DATABASE=Kemppi Oy + +bluetooth:v0204* + ID_VENDOR_FROM_DATABASE=Tapcentive Inc. + +bluetooth:v0205* + ID_VENDOR_FROM_DATABASE=Smartbotics Inc. + +bluetooth:v0206* + ID_VENDOR_FROM_DATABASE=Otter Products, LLC + +bluetooth:v0207* + ID_VENDOR_FROM_DATABASE=STEMP Inc. + +bluetooth:v0208* + ID_VENDOR_FROM_DATABASE=LumiGeek LLC + +bluetooth:v0209* + ID_VENDOR_FROM_DATABASE=InvisionHeart Inc. + +bluetooth:v020A* + ID_VENDOR_FROM_DATABASE=Macnica Inc. + +bluetooth:v020B* + ID_VENDOR_FROM_DATABASE=Jaguar Land Rover Limited + +bluetooth:v020C* + ID_VENDOR_FROM_DATABASE=CoroWare Technologies, Inc + +bluetooth:v020D* + ID_VENDOR_FROM_DATABASE=Simplo Technology Co., LTD + +bluetooth:v020E* + ID_VENDOR_FROM_DATABASE=Omron Healthcare Co., LTD + +bluetooth:v020F* + ID_VENDOR_FROM_DATABASE=Comodule GMBH + +bluetooth:v0210* + ID_VENDOR_FROM_DATABASE=ikeGPS + +bluetooth:v0211* + ID_VENDOR_FROM_DATABASE=Telink Semiconductor Co. Ltd + +bluetooth:v0212* + ID_VENDOR_FROM_DATABASE=Interplan Co., Ltd + +bluetooth:v0213* + ID_VENDOR_FROM_DATABASE=Wyler AG + +bluetooth:v0214* + ID_VENDOR_FROM_DATABASE=IK Multimedia Production srl + +bluetooth:v0215* + ID_VENDOR_FROM_DATABASE=Lukoton Experience Oy + +bluetooth:v0216* + ID_VENDOR_FROM_DATABASE=MTI Ltd + +bluetooth:v0217* + ID_VENDOR_FROM_DATABASE=Tech4home, Lda + +bluetooth:v0218* + ID_VENDOR_FROM_DATABASE=Hiotech AB + +bluetooth:v0219* + ID_VENDOR_FROM_DATABASE=DOTT Limited + +bluetooth:v021A* + ID_VENDOR_FROM_DATABASE=Blue Speck Labs, LLC + +bluetooth:v021B* + ID_VENDOR_FROM_DATABASE=Cisco Systems Inc + +bluetooth:v021C* + ID_VENDOR_FROM_DATABASE=Mobicomm Inc + +bluetooth:v021D* + ID_VENDOR_FROM_DATABASE=Edamic + +bluetooth:v021E* + ID_VENDOR_FROM_DATABASE=Goodnet Ltd + +bluetooth:v021F* + ID_VENDOR_FROM_DATABASE=Luster Leaf Products Inc + +bluetooth:v0220* + ID_VENDOR_FROM_DATABASE=Manus Machina BV + +bluetooth:v0221* + ID_VENDOR_FROM_DATABASE=Mobiquity Networks Inc + +bluetooth:v0222* + ID_VENDOR_FROM_DATABASE=Praxis Dynamics + +bluetooth:v0223* + ID_VENDOR_FROM_DATABASE=Philip Morris Products S.A. + +bluetooth:v0224* + ID_VENDOR_FROM_DATABASE=Comarch SA + +bluetooth:v0225* + ID_VENDOR_FROM_DATABASE=Nestl Nespresso S.A. + +bluetooth:v0226* + ID_VENDOR_FROM_DATABASE=Merlinia A/S + +bluetooth:v0227* + ID_VENDOR_FROM_DATABASE=LifeBEAM Technologies + +bluetooth:v0228* + ID_VENDOR_FROM_DATABASE=Twocanoes Labs, LLC + +bluetooth:v0229* + ID_VENDOR_FROM_DATABASE=Muoverti Limited diff --git a/hwdb/20-pci-vendor-model.hwdb b/hwdb/20-pci-vendor-model.hwdb index b27a5c7902..4cc7cfd65c 100644 --- a/hwdb/20-pci-vendor-model.hwdb +++ b/hwdb/20-pci-vendor-model.hwdb @@ -998,6 +998,9 @@ pci:v00001000d0000005Fsv00001028sd00001F4C* pci:v00001000d0000005Fsv00001028sd00001F4D* ID_MODEL_FROM_DATABASE=MegaRAID SAS-3 3008 [Fury] (PERC H330 Embedded (for monolithic)) +pci:v00001000d0000005Fsv00001054sd0000306A* + ID_MODEL_FROM_DATABASE=MegaRAID SAS-3 3008 [Fury] (SAS 3004 iMR ROMB) + pci:v00001000d00000060* ID_MODEL_FROM_DATABASE=MegaRAID SAS 1078 @@ -6171,28 +6174,28 @@ pci:v00001002d00006819sv0000174Bsd0000E221* ID_MODEL_FROM_DATABASE=Pitcairn PRO [Radeon HD 7850] (Radeon HD 7850 2GB GDDR5 DVI-I/DVI-D/HDMI/DP) pci:v00001002d00006820* - ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X] + ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X/M375X] pci:v00001002d00006820sv0000103Csd00001851* - ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X] (Radeon HD 7750M) + ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X/M375X] (Radeon HD 7750M) pci:v00001002d00006820sv000017AAsd00003643* - ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X] (Radeon R9 A375) + ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X/M375X] (Radeon R9 A375) pci:v00001002d00006820sv000017AAsd00003801* - ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X] (Radeon R9 M275) + ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X/M375X] (Radeon R9 M275) pci:v00001002d00006821* - ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X] + ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X/M370X] pci:v00001002d00006821sv00001002sd0000031E* - ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X] (FirePro SX4000) + ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X/M370X] (FirePro SX4000) pci:v00001002d00006821sv00001028sd000005CC* - ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X] (FirePro M5100) + ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X/M370X] (FirePro M5100) pci:v00001002d00006821sv00001028sd000015CC* - ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X] (FirePro M5100) + ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X/M370X] (FirePro M5100) pci:v00001002d00006822* ID_MODEL_FROM_DATABASE=Venus PRO [Radeon E8860] @@ -12116,6 +12119,9 @@ pci:v0000102Bd0000051E* pci:v0000102Bd0000051F* ID_MODEL_FROM_DATABASE=MGA 2164W [Millennium II] AGP +pci:v0000102Bd0000051Fsv0000102Bsd00002100* + ID_MODEL_FROM_DATABASE=MGA 2164W [Millennium II] AGP (MGA-2164WA [Millennium II A]) + pci:v0000102Bd00000520* ID_MODEL_FROM_DATABASE=MGA G200 @@ -12237,7 +12243,7 @@ pci:v0000102Bd00000521sv0000102Bsd0000FF02* ID_MODEL_FROM_DATABASE=MGA G200 AGP (Mystique G200 AGP) pci:v0000102Bd00000521sv0000102Bsd0000FF03* - ID_MODEL_FROM_DATABASE=MGA G200 AGP (Millennium G200 AGP) + ID_MODEL_FROM_DATABASE=MGA G200 AGP (Millennium G200A AGP) pci:v0000102Bd00000521sv0000102Bsd0000FF04* ID_MODEL_FROM_DATABASE=MGA G200 AGP (Marvel G200 AGP) @@ -26115,16 +26121,16 @@ pci:v000010DEd0000056Asv0000147Bsd00001C3E* ID_MODEL_FROM_DATABASE=MCP73 [nForce 630i] USB 2.0 Controller (EHCI) (I-N73V motherboard) pci:v000010DEd0000056C* - ID_MODEL_FROM_DATABASE=MCP73 IDE + ID_MODEL_FROM_DATABASE=MCP73 IDE Controller pci:v000010DEd0000056Csv00001019sd0000297A* - ID_MODEL_FROM_DATABASE=MCP73 IDE (MCP73PVT-SM) + ID_MODEL_FROM_DATABASE=MCP73 IDE Controller (MCP73PVT-SM) pci:v000010DEd0000056Csv0000147Bsd00001C3E* - ID_MODEL_FROM_DATABASE=MCP73 IDE (I-N73V motherboard) + ID_MODEL_FROM_DATABASE=MCP73 IDE Controller (I-N73V motherboard) pci:v000010DEd0000056Csv00001AFAsd00007150* - ID_MODEL_FROM_DATABASE=MCP73 IDE (JW-IN7150-HD) + ID_MODEL_FROM_DATABASE=MCP73 IDE Controller (JW-IN7150-HD) pci:v000010DEd0000056D* ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge @@ -26133,7 +26139,7 @@ pci:v000010DEd0000056Dsv00001019sd0000297A* ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge (MCP73PVT-SM) pci:v000010DEd0000056Dsv000010DEsd0000CB73* - ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge (MCP73 PCIe x16 port) + ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge (MCP73 PCIe x1 port) pci:v000010DEd0000056E* ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge @@ -26141,6 +26147,9 @@ pci:v000010DEd0000056E* pci:v000010DEd0000056Esv00001019sd0000297A* ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge (MCP73PVT-SM) +pci:v000010DEd0000056Esv000010DEsd00000000* + ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge (MCP73 PCIe x16 port) + pci:v000010DEd0000056F* ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge @@ -26976,112 +26985,112 @@ pci:v000010DEd000007C8sv00001AFAsd00007150* ID_MODEL_FROM_DATABASE=MCP73 Memory Controller (JW-IN7150-HD) pci:v000010DEd000007CB* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller pci:v000010DEd000007CBsv00001019sd0000297A* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (MCP73PVT-SM) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (MCP73PVT-SM) pci:v000010DEd000007CBsv0000147Bsd00001C3E* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (I-N73V motherboard) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (I-N73V motherboard) pci:v000010DEd000007CBsv00001AFAsd00007150* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (JW-IN7150-HD) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (JW-IN7150-HD) pci:v000010DEd000007CD* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller pci:v000010DEd000007CDsv00001019sd0000297A* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (MCP73PVT-SM) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (MCP73PVT-SM) pci:v000010DEd000007CDsv0000147Bsd00001C3E* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (I-N73V motherboard) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (I-N73V motherboard) pci:v000010DEd000007CDsv00001AFAsd00007150* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (JW-IN7150-HD) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (JW-IN7150-HD) pci:v000010DEd000007CE* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller pci:v000010DEd000007CEsv00001019sd0000297A* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (MCP73PVT-SM) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (MCP73PVT-SM) pci:v000010DEd000007CEsv0000147Bsd00001C3E* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (I-N73V motherboard) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (I-N73V motherboard) pci:v000010DEd000007CEsv00001AFAsd00007150* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (JW-IN7150-HD) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (JW-IN7150-HD) pci:v000010DEd000007CF* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller pci:v000010DEd000007CFsv00001019sd0000297A* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (MCP73PVT-SM) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (MCP73PVT-SM) pci:v000010DEd000007CFsv0000147Bsd00001C3E* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (I-N73V motherboard) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (I-N73V motherboard) pci:v000010DEd000007CFsv00001AFAsd00007150* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (JW-IN7150-HD) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (JW-IN7150-HD) pci:v000010DEd000007D0* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller pci:v000010DEd000007D0sv00001019sd0000297A* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (MCP73PVT-SM) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (MCP73PVT-SM) pci:v000010DEd000007D0sv0000147Bsd00001C3E* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (I-N73V motherboard) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (I-N73V motherboard) pci:v000010DEd000007D0sv00001AFAsd00007150* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (JW-IN7150-HD) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (JW-IN7150-HD) pci:v000010DEd000007D1* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller pci:v000010DEd000007D1sv00001019sd0000297A* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (MCP73PVT-SM) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (MCP73PVT-SM) pci:v000010DEd000007D1sv0000147Bsd00001C3E* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (I-N73V motherboard) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (I-N73V motherboard) pci:v000010DEd000007D1sv00001AFAsd00007150* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (JW-IN7150-HD) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (JW-IN7150-HD) pci:v000010DEd000007D2* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller pci:v000010DEd000007D2sv00001019sd0000297A* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (MCP73PVT-SM) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (MCP73PVT-SM) pci:v000010DEd000007D2sv0000147Bsd00001C3E* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (I-N73V motherboard) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (I-N73V motherboard) pci:v000010DEd000007D2sv00001AFAsd00007150* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (JW-IN7150-HD) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (JW-IN7150-HD) pci:v000010DEd000007D3* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller pci:v000010DEd000007D3sv00001019sd0000297A* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (MCP73PVT-SM) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (MCP73PVT-SM) pci:v000010DEd000007D3sv0000147Bsd00001C3E* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (I-N73V motherboard) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (I-N73V motherboard) pci:v000010DEd000007D3sv00001AFAsd00007150* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (JW-IN7150-HD) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (JW-IN7150-HD) pci:v000010DEd000007D6* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller pci:v000010DEd000007D6sv00001019sd0000297A* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (MCP73PVT-SM) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (MCP73PVT-SM) pci:v000010DEd000007D6sv0000147Bsd00001C3E* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (I-N73V motherboard) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (I-N73V motherboard) pci:v000010DEd000007D6sv00001AFAsd00007150* - ID_MODEL_FROM_DATABASE=nForce 630i memory controller (JW-IN7150-HD) + ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (JW-IN7150-HD) pci:v000010DEd000007D7* ID_MODEL_FROM_DATABASE=MCP73 LPC Bridge @@ -27165,10 +27174,10 @@ pci:v000010DEd000007E5* ID_MODEL_FROM_DATABASE=C73 [GeForce 7100 / nForce 620i] pci:v000010DEd000007F0* - ID_MODEL_FROM_DATABASE=MCP73 IDE + ID_MODEL_FROM_DATABASE=MCP73 SATA Controller (IDE mode) pci:v000010DEd000007F0sv0000147Bsd00001C3E* - ID_MODEL_FROM_DATABASE=MCP73 IDE (I-N73V motherboard) + ID_MODEL_FROM_DATABASE=MCP73 SATA Controller (IDE mode) (I-N73V motherboard) pci:v000010DEd000007F4* ID_MODEL_FROM_DATABASE=GeForce 7100/nForce 630i SATA @@ -27176,9 +27185,15 @@ pci:v000010DEd000007F4* pci:v000010DEd000007F4sv00001019sd0000297A* ID_MODEL_FROM_DATABASE=GeForce 7100/nForce 630i SATA (MCP73PVT-SM) +pci:v000010DEd000007F4sv0000147Bsd00001C3E* + ID_MODEL_FROM_DATABASE=GeForce 7100/nForce 630i SATA (I-N73V motherboard) + pci:v000010DEd000007F8* ID_MODEL_FROM_DATABASE=MCP73 SATA RAID Controller +pci:v000010DEd000007F8sv0000147Bsd00001C3E* + ID_MODEL_FROM_DATABASE=MCP73 SATA RAID Controller (I-N73V motherboard) + pci:v000010DEd000007FC* ID_MODEL_FROM_DATABASE=MCP73 High Definition Audio @@ -27192,16 +27207,16 @@ pci:v000010DEd000007FCsv0000147Bsd00001C3E* ID_MODEL_FROM_DATABASE=MCP73 High Definition Audio (I-N73V motherboard) pci:v000010DEd000007FE* - ID_MODEL_FROM_DATABASE=GeForce 7100/nForce 630i USB + ID_MODEL_FROM_DATABASE=MCP73 OHCI USB 1.1 Controller pci:v000010DEd000007FEsv00001019sd0000297A* - ID_MODEL_FROM_DATABASE=GeForce 7100/nForce 630i USB (MCP73PVT-SM) + ID_MODEL_FROM_DATABASE=MCP73 OHCI USB 1.1 Controller (MCP73PVT-SM) pci:v000010DEd000007FEsv0000147Bsd00001C3E* - ID_MODEL_FROM_DATABASE=GeForce 7100/nForce 630i USB (I-N73V motherboard) + ID_MODEL_FROM_DATABASE=MCP73 OHCI USB 1.1 Controller (I-N73V motherboard) pci:v000010DEd000007FEsv00001AFAsd00007150* - ID_MODEL_FROM_DATABASE=GeForce 7100/nForce 630i USB (JW-IN7150-HD) + ID_MODEL_FROM_DATABASE=MCP73 OHCI USB 1.1 Controller (JW-IN7150-HD) pci:v000010DEd00000840* ID_MODEL_FROM_DATABASE=C77 [GeForce 8200M] @@ -30269,12 +30284,18 @@ pci:v000010DEd000013D8* pci:v000010DEd000013D9* ID_MODEL_FROM_DATABASE=GM204M [GeForce GTX 965M] +pci:v000010DEd000013F2* + ID_MODEL_FROM_DATABASE=GM204GL [Tesla M60] + pci:v000010DEd00001401* ID_MODEL_FROM_DATABASE=GM206 [GeForce GTX 960] pci:v000010DEd000017C2* ID_MODEL_FROM_DATABASE=GM200 [GeForce GTX TITAN X] +pci:v000010DEd000017C8* + ID_MODEL_FROM_DATABASE=GM200 [GeForce GTX 980 Ti] + pci:v000010DEd000017F0* ID_MODEL_FROM_DATABASE=GM200GL [Quadro M6000] @@ -31673,12 +31694,21 @@ pci:v00001103d00000622* pci:v00001103d00000640* ID_MODEL_FROM_DATABASE=RocketRAID 640 4 Port SATA-III Controller +pci:v00001103d00000641* + ID_MODEL_FROM_DATABASE=RocketRAID 640L 4 Port SATA-III Controller + +pci:v00001103d00000642* + ID_MODEL_FROM_DATABASE=RocketRAID 642L 2 Port SATA-III Controller (eSATA) + pci:v00001103d00000644* ID_MODEL_FROM_DATABASE=RocketRAID 644 4 Port SATA-III Controller (eSATA) pci:v00001103d00000645* ID_MODEL_FROM_DATABASE=RocketRAID 644L 4 Port SATA-III Controller (eSATA) +pci:v00001103d00000646* + ID_MODEL_FROM_DATABASE=RocketRAID 644LS SATA-III Controller (4 eSATA devices connected by 1 SAS cable) + pci:v00001103d00001720* ID_MODEL_FROM_DATABASE=RocketRAID 1720 (2x SATA II RAID Controller) @@ -32441,6 +32471,9 @@ pci:v00001106d00003058sv00001462sd00003092* pci:v00001106d00003058sv00001462sd00003300* ID_MODEL_FROM_DATABASE=VT82C686 AC97 Audio Controller (MS-6330 Onboard Audio) +pci:v00001106d00003058sv00001462sd00003400* + ID_MODEL_FROM_DATABASE=VT82C686 AC97 Audio Controller (MS-6340 (VT8363) motherboard) + pci:v00001106d00003058sv000015DDsd00007609* ID_MODEL_FROM_DATABASE=VT82C686 AC97 Audio Controller (Onboard Audio) @@ -46559,9 +46592,6 @@ pci:v0000148E* pci:v0000148F* ID_VENDOR_FROM_DATABASE=Plant Equipment, Inc. -pci:v0000148Fd00005370* - ID_MODEL_FROM_DATABASE=Dexlink AUWL15I1 - pci:v00001490* ID_VENDOR_FROM_DATABASE=Stone Microsystems PTY Ltd. @@ -63881,6 +63911,9 @@ pci:v00008086d00001A30* pci:v00008086d00001A30sv00001028sd0000010E* ID_MODEL_FROM_DATABASE=82845 845 [Brookdale] Chipset Host Bridge (Optiplex GX240) +pci:v00008086d00001A30sv0000147Bsd00000505* + ID_MODEL_FROM_DATABASE=82845 845 [Brookdale] Chipset Host Bridge (BL7 motherboard) + pci:v00008086d00001A30sv000015D9sd00003280* ID_MODEL_FROM_DATABASE=82845 845 [Brookdale] Chipset Host Bridge (Supermicro P4SBE Mainboard) @@ -65304,43 +65337,46 @@ pci:v00008086d00002440sv00008086sd00005744* ID_MODEL_FROM_DATABASE=82801BA ISA Bridge (LPC) (S845WD1-E) pci:v00008086d00002442* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 pci:v00008086d00002442sv00001014sd000001C6* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (Netvista A40/A40p) + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (Netvista A40/A40p) pci:v00008086d00002442sv00001025sd00001016* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (Travelmate 612 TX) + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (Travelmate 612 TX) pci:v00008086d00002442sv00001028sd000000C7* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (Dimension 8100) + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (Dimension 8100) pci:v00008086d00002442sv00001028sd000000D8* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (Precision 530) + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (Precision 530) pci:v00008086d00002442sv00001028sd0000010E* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (Optiplex GX240) + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (Optiplex GX240) pci:v00008086d00002442sv0000103Csd0000126F* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (e-pc 40) + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (e-pc 40) pci:v00008086d00002442sv00001043sd00008027* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (TUSL2-C Mainboard) + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (TUSL2-C Mainboard) pci:v00008086d00002442sv0000104Dsd000080DF* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (Vaio PCG-FX403) + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (Vaio PCG-FX403) + +pci:v00008086d00002442sv0000147Bsd00000505* + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (BL7 motherboard) pci:v00008086d00002442sv0000147Bsd00000507* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (TH7II-RAID) + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (TH7II-RAID) pci:v00008086d00002442sv00008086sd00004532* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (D815EEA2 mainboard) + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (D815EEA2 mainboard) pci:v00008086d00002442sv00008086sd00004557* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (D815EGEW Mainboard) + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (D815EGEW Mainboard) pci:v00008086d00002442sv00008086sd00005744* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (S845WD1-E mainboard) + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (S845WD1-E mainboard) pci:v00008086d00002443* ID_MODEL_FROM_DATABASE=82801BA/BAM SMBus Controller @@ -65369,6 +65405,9 @@ pci:v00008086d00002443sv00001043sd00008027* pci:v00008086d00002443sv0000104Dsd000080DF* ID_MODEL_FROM_DATABASE=82801BA/BAM SMBus Controller (Vaio PCG-FX403) +pci:v00008086d00002443sv0000147Bsd00000505* + ID_MODEL_FROM_DATABASE=82801BA/BAM SMBus Controller (BL7 motherboard) + pci:v00008086d00002443sv0000147Bsd00000507* ID_MODEL_FROM_DATABASE=82801BA/BAM SMBus Controller (TH7II-RAID) @@ -65385,37 +65424,40 @@ pci:v00008086d00002443sv00008086sd00005744* ID_MODEL_FROM_DATABASE=82801BA/BAM SMBus Controller (S845WD1-E mainboard) pci:v00008086d00002444* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 pci:v00008086d00002444sv00001025sd00001016* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (Travelmate 612 TX) + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (Travelmate 612 TX) pci:v00008086d00002444sv00001028sd000000C7* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (Dimension 8100) + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (Dimension 8100) pci:v00008086d00002444sv00001028sd000000D8* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (Precision 530) + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (Precision 530) pci:v00008086d00002444sv00001028sd0000010E* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (Optiplex GX240) + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (Optiplex GX240) pci:v00008086d00002444sv0000103Csd0000126F* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (e-pc 40) + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (e-pc 40) pci:v00008086d00002444sv00001043sd00008027* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (TUSL2-C Mainboard) + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (TUSL2-C Mainboard) pci:v00008086d00002444sv0000104Dsd000080DF* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (Vaio PCG-FX403) + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (Vaio PCG-FX403) + +pci:v00008086d00002444sv0000147Bsd00000505* + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (BL7 motherboard) pci:v00008086d00002444sv0000147Bsd00000507* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (TH7II-RAID) + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (TH7II-RAID) pci:v00008086d00002444sv00008086sd00004532* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (D815EEA2 mainboard) + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (D815EEA2 mainboard) pci:v00008086d00002444sv00008086sd00005744* - ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (S845WD1-E mainboard) + ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (S845WD1-E mainboard) pci:v00008086d00002445* ID_MODEL_FROM_DATABASE=82801BA/BAM AC'97 Audio Controller @@ -65444,6 +65486,9 @@ pci:v00008086d00002445sv0000104Dsd000080DF* pci:v00008086d00002445sv00001462sd00003370* ID_MODEL_FROM_DATABASE=82801BA/BAM AC'97 Audio Controller (STAC9721 AC) +pci:v00008086d00002445sv0000147Bsd00000505* + ID_MODEL_FROM_DATABASE=82801BA/BAM AC'97 Audio Controller (BL7 motherboard) + pci:v00008086d00002445sv0000147Bsd00000507* ID_MODEL_FROM_DATABASE=82801BA/BAM AC'97 Audio Controller (TH7II-RAID) @@ -65645,6 +65690,9 @@ pci:v00008086d0000244Bsv0000103Csd0000126F* pci:v00008086d0000244Bsv00001043sd00008027* ID_MODEL_FROM_DATABASE=82801BA IDE U100 Controller (TUSL2-C Mainboard) +pci:v00008086d0000244Bsv0000147Bsd00000505* + ID_MODEL_FROM_DATABASE=82801BA IDE U100 Controller (BL7 motherboard) + pci:v00008086d0000244Bsv0000147Bsd00000507* ID_MODEL_FROM_DATABASE=82801BA IDE U100 Controller (TH7II-RAID) @@ -79125,7 +79173,7 @@ pci:v0000DEAFd00009052* ID_MODEL_FROM_DATABASE=PC Weasel Watchdog Timer pci:v0000DEDA* - ID_VENDOR_FROM_DATABASE=SoftHard Technology Ltd. + ID_VENDOR_FROM_DATABASE=XIMEA pci:v0000E000* ID_VENDOR_FROM_DATABASE=Winbond diff --git a/hwdb/70-mouse.hwdb b/hwdb/70-mouse.hwdb index 8174f2762e..2784b941a1 100644 --- a/hwdb/70-mouse.hwdb +++ b/hwdb/70-mouse.hwdb @@ -102,6 +102,16 @@ # For mice with switchable resolution, sort by the starred entry. ########################################## +# Apple +########################################## + +# Apple MagicMouse +# Note: this device changes name once connected to a mac, the name ends up +# as $username`s mouse +mouse:bluetooth:v05acp030d:name:*: + MOUSE_DPI=1300@1000 + +########################################## # Chicony ########################################## diff --git a/m4/.gitignore b/m4/.gitignore index cf35a86e88..55eaa803a1 100644 --- a/m4/.gitignore +++ b/m4/.gitignore @@ -4,4 +4,3 @@ ltoptions.m4 ltsugar.m4 ltversion.m4 lt~obsolete.m4 -gtk-doc.m4 diff --git a/m4/ax_normalize_path.m4 b/m4/ax_normalize_path.m4 new file mode 100644 index 0000000000..e8f9973e35 --- /dev/null +++ b/m4/ax_normalize_path.m4 @@ -0,0 +1,115 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_normalize_path.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_NORMALIZE_PATH(VARNAME, [REFERENCE_STRING]) +# +# DESCRIPTION +# +# Perform some cleanups on the value of $VARNAME (interpreted as a path): +# +# - empty paths are changed to '.' +# - trailing slashes are removed +# - repeated slashes are squeezed except a leading doubled slash '//' +# (which might indicate a networked disk on some OS). +# +# REFERENCE_STRING is used to turn '/' into '\' and vice-versa: if +# REFERENCE_STRING contains some backslashes, all slashes and backslashes +# are turned into backslashes, otherwise they are all turned into slashes. +# +# This makes processing of DOS filenames quite easier, because you can +# turn a filename to the Unix notation, make your processing, and turn it +# back to original notation. +# +# filename='A:\FOO\\BAR\' +# old_filename="$filename" +# # Switch to the unix notation +# AX_NORMALIZE_PATH([filename], ["/"]) +# # now we have $filename = 'A:/FOO/BAR' and we can process it as if +# # it was a Unix path. For instance let's say that you want +# # to append '/subpath': +# filename="$filename/subpath" +# # finally switch back to the original notation +# AX_NORMALIZE_PATH([filename], ["$old_filename"]) +# # now $filename equals to 'A:\FOO\BAR\subpath' +# +# One good reason to make all path processing with the unix convention is +# that backslashes have a special meaning in many cases. For instance +# +# expr 'A:\FOO' : 'A:\Foo' +# +# will return 0 because the second argument is a regex in which +# backslashes have to be backslashed. In other words, to have the two +# strings to match you should write this instead: +# +# expr 'A:\Foo' : 'A:\\Foo' +# +# Such behavior makes DOS filenames extremely unpleasant to work with. So +# temporary turn your paths to the Unix notation, and revert them to the +# original notation after the processing. See the macro +# AX_COMPUTE_RELATIVE_PATHS for a concrete example of this. +# +# REFERENCE_STRING defaults to $VARIABLE, this means that slashes will be +# converted to backslashes if $VARIABLE already contains some backslashes +# (see $thirddir below). +# +# firstdir='/usr/local//share' +# seconddir='C:\Program Files\\' +# thirddir='C:\home/usr/' +# AX_NORMALIZE_PATH([firstdir]) +# AX_NORMALIZE_PATH([seconddir]) +# AX_NORMALIZE_PATH([thirddir]) +# # $firstdir = '/usr/local/share' +# # $seconddir = 'C:\Program Files' +# # $thirddir = 'C:\home\usr' +# +# LICENSE +# +# Copyright (c) 2008 Alexandre Duret-Lutz <adl@gnu.org> +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see <http://www.gnu.org/licenses/>. +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 5 + +AU_ALIAS([ADL_NORMALIZE_PATH], [AX_NORMALIZE_PATH]) +AC_DEFUN([AX_NORMALIZE_PATH], +[case ":[$]$1:" in +# change empty paths to '.' + ::) $1='.' ;; +# strip trailing slashes + :*[[\\/]]:) $1=`echo "[$]$1" | sed 's,[[\\/]]*[$],,'` ;; + :*:) ;; +esac +# squeze repeated slashes +case ifelse($2,,"[$]$1",$2) in +# if the path contains any backslashes, turn slashes into backslashes + *\\*) $1=`echo "[$]$1" | sed 's,\(.\)[[\\/]][[\\/]]*,\1\\\\,g'` ;; +# if the path contains slashes, also turn backslashes into slashes + *) $1=`echo "[$]$1" | sed 's,\(.\)[[\\/]][[\\/]]*,\1/,g'` ;; +esac]) diff --git a/man/binfmt.d.xml b/man/binfmt.d.xml index 5b63cfb4c3..3aa5eb1859 100644 --- a/man/binfmt.d.xml +++ b/man/binfmt.d.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/bootchart.conf.xml b/man/bootchart.conf.xml index bf6ca0bf9e..b383f6e24d 100644 --- a/man/bootchart.conf.xml +++ b/man/bootchart.conf.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -52,17 +55,17 @@ </refnamediv> <refsynopsisdiv> - <para><filename>/etc/systemd/bootchart.conf</filename></para> - <para><filename>/etc/systemd/bootchart.conf.d/*.conf</filename></para> + <para><filename>&pkgsysconfdir;/bootchart.conf</filename></para> + <para><filename>&pkgsysconfdir;/bootchart.conf.d/*.conf</filename></para> <para><filename>/run/systemd/bootchart.conf.d/*.conf</filename></para> - <para><filename>/usr/lib/systemd/bootchart.conf.d/*.conf</filename></para> + <para><filename>&rootlibexecdir;/bootchart.conf.d/*.conf</filename></para> </refsynopsisdiv> <refsect1> <title>Description</title> <para>When starting, systemd-bootchart will read the configuration - file <filename>/etc/systemd/bootchart.conf</filename>, followed by + file <filename>&pkgsysconfdir;/bootchart.conf</filename>, followed by the files in the <filename>bootchart.conf.d</filename> directories. These configuration files determine logging parameters and graph output.</para> @@ -122,10 +125,10 @@ <term><varname>Init=[path]</varname></term> <listitem><para>Configures bootchart to run a non-standard binary instead of - <filename>/usr/lib/systemd/systemd</filename>. This option is + <filename>&rootlibexecdir;/systemd</filename>. This option is only relevant if bootchart was invoked from the kernel command line with - init=/usr/lib/systemd/systemd-bootchart.</para></listitem> + init=&rootlibexecdir;/systemd-bootchart.</para></listitem> </varlistentry> <varlistentry> diff --git a/man/bootctl.xml b/man/bootctl.xml index 63ad9392eb..c7c65aa4b2 100644 --- a/man/bootctl.xml +++ b/man/bootctl.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/bootup.xml b/man/bootup.xml index b92057af29..de34a59a72 100644 --- a/man/bootup.xml +++ b/man/bootup.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/busctl.xml b/man/busctl.xml index 807fc78e8f..08303b4dd8 100644 --- a/man/busctl.xml +++ b/man/busctl.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/coredump.conf.xml b/man/coredump.conf.xml index fd54c59e6b..4c65c1cf03 100644 --- a/man/coredump.conf.xml +++ b/man/coredump.conf.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -49,10 +52,10 @@ </refnamediv> <refsynopsisdiv> - <para><filename>/etc/systemd/coredump.conf</filename></para> - <para><filename>/etc/systemd/coredump.conf.d/*.conf</filename></para> + <para><filename>&pkgsysconfdir;/coredump.conf</filename></para> + <para><filename>&pkgsysconfdir;/coredump.conf.d/*.conf</filename></para> <para><filename>/run/systemd/coredump.conf.d/*.conf</filename></para> - <para><filename>/usr/lib/systemd/coredump.conf.d/*.conf</filename></para> + <para><filename>&rootlibexecdir;/coredump.conf.d/*.conf</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/coredumpctl.xml b/man/coredumpctl.xml index efbc655a76..4bd1a7e67f 100644 --- a/man/coredumpctl.xml +++ b/man/coredumpctl.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/crypttab.xml b/man/crypttab.xml index d4ff760adc..d403e71bef 100644 --- a/man/crypttab.xml +++ b/man/crypttab.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/custom-html.xsl b/man/custom-html.xsl index 5730bed4a1..0856c1f29c 100644 --- a/man/custom-html.xsl +++ b/man/custom-html.xsl @@ -232,18 +232,6 @@ </xsl:attribute> <xsl:text>Python </xsl:text> </a>· - <a> - <xsl:attribute name="href"> - <xsl:text>../libudev/index.html</xsl:text> - </xsl:attribute> - <xsl:text>libudev </xsl:text> - </a>· - <a> - <xsl:attribute name="href"> - <xsl:text>../libudev/index.html</xsl:text> - </xsl:attribute> - <xsl:text>gudev </xsl:text> - </a> <span style="float:right"> <xsl:text>systemd </xsl:text> diff --git a/man/daemon.xml b/man/daemon.xml index a8bbfc055b..38d458e05d 100644 --- a/man/daemon.xml +++ b/man/daemon.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/file-hierarchy.xml b/man/file-hierarchy.xml index 3a5627d196..f73a3edc06 100644 --- a/man/file-hierarchy.xml +++ b/man/file-hierarchy.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/halt.xml b/man/halt.xml index a06dbd0097..f425ebdb8e 100644 --- a/man/halt.xml +++ b/man/halt.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/hostname.xml b/man/hostname.xml index 9688450e1c..34aaca1acd 100644 --- a/man/hostname.xml +++ b/man/hostname.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/hostnamectl.xml b/man/hostnamectl.xml index b1f038156d..93934668cc 100644 --- a/man/hostnamectl.xml +++ b/man/hostnamectl.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/hwdb.xml b/man/hwdb.xml index 509dab81c5..e6215df738 100644 --- a/man/hwdb.xml +++ b/man/hwdb.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <refentry id="hwdb" conditional="ENABLE_HWDB"> <refentryinfo> @@ -40,17 +43,17 @@ <refsect1><title>Hardware Database Files</title> <para>The hwdb files are read from the files located in the - system hwdb directory <filename>/usr/lib/udev/hwdb.d</filename>, + system hwdb directory <filename>&udevlibexecdir;/hwdb.d</filename>, the volatile runtime directory <filename>/run/udev/hwdb.d</filename> and the local administration directory <filename>/etc/udev/hwdb.d</filename>. All hwdb files are collectively sorted and processed in lexical order, regardless of the directories in which they live. However, files with identical filenames replace each other. Files in <filename>/etc</filename> have the highest priority, files in <filename>/run</filename> take precedence - over files with the same name in <filename>/usr/lib</filename>. This can be + over files with the same name in <filename>&rootprefix;/lib</filename>. This can be used to override a system-supplied hwdb file with a local file if needed; a symlink in <filename>/etc</filename> with the same name as a hwdb file in - <filename>/usr/lib</filename>, pointing to <filename>/dev/null</filename>, + <filename>&rootprefix;/lib</filename>, pointing to <filename>/dev/null</filename>, disables the hwdb file entirely. hwdb files must have the extension <filename>.hwdb</filename>; other extensions are ignored.</para> @@ -70,7 +73,7 @@ <para>The content of all hwdb files is read by <citerefentry><refentrytitle>systemd-hwdb</refentrytitle><manvolnum>8</manvolnum></citerefentry> and compiled to a binary database located at <filename>/etc/udev/hwdb.bin</filename>, - or alternatively <filename>/usr/lib/udev/hwdb.bin</filename> if you want ship the compiled + or alternatively <filename>&udevlibexecdir;/hwdb.bin</filename> if you want ship the compiled database in an immutable image. During runtime only the binary database is used.</para> </refsect1> diff --git a/man/journal-remote.conf.xml b/man/journal-remote.conf.xml index fc60258d0b..948dfa531d 100644 --- a/man/journal-remote.conf.xml +++ b/man/journal-remote.conf.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -49,10 +52,10 @@ </refnamediv> <refsynopsisdiv> - <para><filename>/etc/systemd/journal-remote.conf</filename></para> - <para><filename>/etc/systemd/journald.conf.d/*.conf</filename></para> + <para><filename>&pkgsysconfdir;/journal-remote.conf</filename></para> + <para><filename>&pkgsysconfdir;/journald.conf.d/*.conf</filename></para> <para><filename>/run/systemd/journald.conf.d/*.conf</filename></para> - <para><filename>/usr/lib/systemd/journald.conf.d/*.conf</filename></para> + <para><filename>&rootlibexecdir;/journald.conf.d/*.conf</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/journalctl.xml b/man/journalctl.xml index 08de0ff068..d67d9606be 100644 --- a/man/journalctl.xml +++ b/man/journalctl.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/journald.conf.xml b/man/journald.conf.xml index 2cbe58bc15..8d0dbb0133 100644 --- a/man/journald.conf.xml +++ b/man/journald.conf.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -49,10 +52,10 @@ </refnamediv> <refsynopsisdiv> - <para><filename>/etc/systemd/journald.conf</filename></para> - <para><filename>/etc/systemd/journald.conf.d/*.conf</filename></para> + <para><filename>&pkgsysconfdir;/journald.conf</filename></para> + <para><filename>&pkgsysconfdir;/journald.conf.d/*.conf</filename></para> <para><filename>/run/systemd/journald.conf.d/*.conf</filename></para> - <para><filename>/usr/lib/systemd/journald.conf.d/*.conf</filename></para> + <para><filename>&rootlibexecdir;/journald.conf.d/*.conf</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/kernel-command-line.xml b/man/kernel-command-line.xml index eb73727027..6490123a53 100644 --- a/man/kernel-command-line.xml +++ b/man/kernel-command-line.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/kernel-install.xml b/man/kernel-install.xml index d7e27de758..8891bae71e 100644 --- a/man/kernel-install.xml +++ b/man/kernel-install.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/less-variables.xml b/man/less-variables.xml index 0fb4d7fbcf..e344c62e1a 100644 --- a/man/less-variables.xml +++ b/man/less-variables.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" - "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <refsect1> <title>Environment</title> diff --git a/man/libsystemd-pkgconfig.xml b/man/libsystemd-pkgconfig.xml index 272da64cd7..3620f47316 100644 --- a/man/libsystemd-pkgconfig.xml +++ b/man/libsystemd-pkgconfig.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" - "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <refsect1> <title>Notes</title> diff --git a/man/locale.conf.xml b/man/locale.conf.xml index 2c32d16094..8af49af7f2 100644 --- a/man/locale.conf.xml +++ b/man/locale.conf.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/localectl.xml b/man/localectl.xml index 7def047f62..caf963ae5e 100644 --- a/man/localectl.xml +++ b/man/localectl.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/localtime.xml b/man/localtime.xml index 2827da6e93..1740dde9eb 100644 --- a/man/localtime.xml +++ b/man/localtime.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/loginctl.xml b/man/loginctl.xml index 9dda14d454..d0529c160e 100644 --- a/man/loginctl.xml +++ b/man/loginctl.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/logind.conf.xml b/man/logind.conf.xml index 2b79547275..96ebd6eed0 100644 --- a/man/logind.conf.xml +++ b/man/logind.conf.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -49,10 +52,10 @@ </refnamediv> <refsynopsisdiv> - <para><filename>/etc/systemd/logind.conf</filename></para> - <para><filename>/etc/systemd/logind.conf.d/*.conf</filename></para> + <para><filename>&pkgsysconfdir;/logind.conf</filename></para> + <para><filename>&pkgsysconfdir;/logind.conf.d/*.conf</filename></para> <para><filename>/run/systemd/logind.conf.d/*.conf</filename></para> - <para><filename>/usr/lib/systemd/logind.conf.d/*.conf</filename></para> + <para><filename>&rootlibexecdir;/logind.conf.d/*.conf</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/machine-id.xml b/man/machine-id.xml index 92d67a3869..bb7cd7f060 100644 --- a/man/machine-id.xml +++ b/man/machine-id.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/machine-info.xml b/man/machine-info.xml index 916f1dab66..a6db1e0317 100644 --- a/man/machine-info.xml +++ b/man/machine-info.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/machinectl.xml b/man/machinectl.xml index 50cbb1bc98..18ef6a5780 100644 --- a/man/machinectl.xml +++ b/man/machinectl.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -585,8 +588,8 @@ first verified with detached GPG signature file <filename>SHA256SUMS.gpg</filename>. The public key for this verification step needs to be available in - <filename>/usr/lib/systemd/import-pubring.gpg</filename> or - <filename>/etc/systemd/import-pubring.gpg</filename>.</para> + <filename>&rootlibexecdir;/import-pubring.gpg</filename> or + <filename>&pkgsysconfdir;/import-pubring.gpg</filename>.</para> <para>The container image will be downloaded and stored in a read-only subvolume in diff --git a/man/modules-load.d.xml b/man/modules-load.d.xml index 4b722aa128..82a98be666 100644 --- a/man/modules-load.d.xml +++ b/man/modules-load.d.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/networkctl.xml b/man/networkctl.xml index d11d60f2a9..402698cb12 100644 --- a/man/networkctl.xml +++ b/man/networkctl.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/nss-myhostname.xml b/man/nss-myhostname.xml index 2d36df6f6f..7379213f81 100644 --- a/man/nss-myhostname.xml +++ b/man/nss-myhostname.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/nss-mymachines.xml b/man/nss-mymachines.xml index eb1ed2592b..a3e6c75d1b 100644 --- a/man/nss-mymachines.xml +++ b/man/nss-mymachines.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/os-release.xml b/man/os-release.xml index 4ca2e59706..6ce5885812 100644 --- a/man/os-release.xml +++ b/man/os-release.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/pam_systemd.xml b/man/pam_systemd.xml index b4a3f502b4..6fdbcf91e0 100644 --- a/man/pam_systemd.xml +++ b/man/pam_systemd.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/resolved.conf.xml b/man/resolved.conf.xml index 8047a4ea75..52329eba56 100644 --- a/man/resolved.conf.xml +++ b/man/resolved.conf.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -49,10 +52,10 @@ </refnamediv> <refsynopsisdiv> - <para><filename>/etc/systemd/resolved.conf</filename></para> - <para><filename>/etc/systemd/resolved.conf.d/*.conf</filename></para> + <para><filename>&pkgsysconfdir;/resolved.conf</filename></para> + <para><filename>&pkgsysconfdir;/resolved.conf.d/*.conf</filename></para> <para><filename>/run/systemd/resolved.conf.d/*.conf</filename></para> - <para><filename>/usr/lib/systemd/resolved.conf.d/*.conf</filename></para> + <para><filename>&rootlibexecdir;/resolved.conf.d/*.conf</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/runlevel.xml b/man/runlevel.xml index fc1f523855..f34f9583e8 100644 --- a/man/runlevel.xml +++ b/man/runlevel.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd-daemon.xml b/man/sd-daemon.xml index b7ba363656..686ba0cefe 100644 --- a/man/sd-daemon.xml +++ b/man/sd-daemon.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd-id128.xml b/man/sd-id128.xml index ea7972055d..067d43b432 100644 --- a/man/sd-id128.xml +++ b/man/sd-id128.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd-journal.xml b/man/sd-journal.xml index 9b1a52207f..165284c0ae 100644 --- a/man/sd-journal.xml +++ b/man/sd-journal.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd-login.xml b/man/sd-login.xml index 328f71164d..4c4e5f0077 100644 --- a/man/sd-login.xml +++ b/man/sd-login.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_booted.xml b/man/sd_booted.xml index 4dd674b8ea..235e78d083 100644 --- a/man/sd_booted.xml +++ b/man/sd_booted.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_bus_creds_get_pid.xml b/man/sd_bus_creds_get_pid.xml index 4debee6124..54714dea1d 100644 --- a/man/sd_bus_creds_get_pid.xml +++ b/man/sd_bus_creds_get_pid.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_bus_creds_new_from_pid.xml b/man/sd_bus_creds_new_from_pid.xml index 518a95abd0..695d4e1f5a 100644 --- a/man/sd_bus_creds_new_from_pid.xml +++ b/man/sd_bus_creds_new_from_pid.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_bus_default.xml b/man/sd_bus_default.xml index 9db264ce59..55f1b8bb69 100644 --- a/man/sd_bus_default.xml +++ b/man/sd_bus_default.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_bus_error.xml b/man/sd_bus_error.xml index dc5a93d617..bd2a27984c 100644 --- a/man/sd_bus_error.xml +++ b/man/sd_bus_error.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_bus_message_append.xml b/man/sd_bus_message_append.xml index c3bffbdfd9..91a80792e1 100644 --- a/man/sd_bus_message_append.xml +++ b/man/sd_bus_message_append.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_bus_message_append_array.xml b/man/sd_bus_message_append_array.xml index 9490689e06..5409893374 100644 --- a/man/sd_bus_message_append_array.xml +++ b/man/sd_bus_message_append_array.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_bus_message_append_basic.xml b/man/sd_bus_message_append_basic.xml index 344b7791fa..81ac6de952 100644 --- a/man/sd_bus_message_append_basic.xml +++ b/man/sd_bus_message_append_basic.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_bus_message_append_string_memfd.xml b/man/sd_bus_message_append_string_memfd.xml index ea3b7d3b75..1fecbd5773 100644 --- a/man/sd_bus_message_append_string_memfd.xml +++ b/man/sd_bus_message_append_string_memfd.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_bus_message_append_strv.xml b/man/sd_bus_message_append_strv.xml index b91406f275..d986b06a41 100644 --- a/man/sd_bus_message_append_strv.xml +++ b/man/sd_bus_message_append_strv.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_bus_message_get_cookie.xml b/man/sd_bus_message_get_cookie.xml index 02374d7508..7795acfec3 100644 --- a/man/sd_bus_message_get_cookie.xml +++ b/man/sd_bus_message_get_cookie.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_bus_message_get_monotonic_usec.xml b/man/sd_bus_message_get_monotonic_usec.xml index d74aaad7dd..c109fe10a3 100644 --- a/man/sd_bus_message_get_monotonic_usec.xml +++ b/man/sd_bus_message_get_monotonic_usec.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_bus_negotiate_fds.xml b/man/sd_bus_negotiate_fds.xml index 26a599e7d3..4f9204e7bc 100644 --- a/man/sd_bus_negotiate_fds.xml +++ b/man/sd_bus_negotiate_fds.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_bus_new.xml b/man/sd_bus_new.xml index 91ca8161dc..bc91dd2665 100644 --- a/man/sd_bus_new.xml +++ b/man/sd_bus_new.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_bus_path_encode.xml b/man/sd_bus_path_encode.xml index 69cda53bf4..0a6ac80473 100644 --- a/man/sd_bus_path_encode.xml +++ b/man/sd_bus_path_encode.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_bus_request_name.xml b/man/sd_bus_request_name.xml index 6aa132bb26..78b440b7db 100644 --- a/man/sd_bus_request_name.xml +++ b/man/sd_bus_request_name.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_event_add_child.xml b/man/sd_event_add_child.xml index 640d4b12d0..7de9f409e9 100644 --- a/man/sd_event_add_child.xml +++ b/man/sd_event_add_child.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_event_add_defer.xml b/man/sd_event_add_defer.xml index dd5d19b519..4aabc0793a 100644 --- a/man/sd_event_add_defer.xml +++ b/man/sd_event_add_defer.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_event_add_signal.xml b/man/sd_event_add_signal.xml index ca9c4b94fd..e84d5c7200 100644 --- a/man/sd_event_add_signal.xml +++ b/man/sd_event_add_signal.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_event_add_time.xml b/man/sd_event_add_time.xml index 5692ee6008..3c5de48cab 100644 --- a/man/sd_event_add_time.xml +++ b/man/sd_event_add_time.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_event_get_fd.xml b/man/sd_event_get_fd.xml index 332e729ee8..8f74c1e5c4 100644 --- a/man/sd_event_get_fd.xml +++ b/man/sd_event_get_fd.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_event_new.xml b/man/sd_event_new.xml index 854a887bce..d225330023 100644 --- a/man/sd_event_new.xml +++ b/man/sd_event_new.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_event_run.xml b/man/sd_event_run.xml index ac78d358b6..036887d9f0 100644 --- a/man/sd_event_run.xml +++ b/man/sd_event_run.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_event_set_name.xml b/man/sd_event_set_name.xml index 3584b225d1..0b46414bba 100644 --- a/man/sd_event_set_name.xml +++ b/man/sd_event_set_name.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_event_wait.xml b/man/sd_event_wait.xml index 835cc5deb3..db74a96e8e 100644 --- a/man/sd_event_wait.xml +++ b/man/sd_event_wait.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_get_seats.xml b/man/sd_get_seats.xml index 4390d36ebe..3f2c666c61 100644 --- a/man/sd_get_seats.xml +++ b/man/sd_get_seats.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_id128_get_machine.xml b/man/sd_id128_get_machine.xml index 2ad1f8f728..02fa2da283 100644 --- a/man/sd_id128_get_machine.xml +++ b/man/sd_id128_get_machine.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_id128_randomize.xml b/man/sd_id128_randomize.xml index ab449d2937..c4d7c42106 100644 --- a/man/sd_id128_randomize.xml +++ b/man/sd_id128_randomize.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_id128_to_string.xml b/man/sd_id128_to_string.xml index e70c80892e..988a646d84 100644 --- a/man/sd_id128_to_string.xml +++ b/man/sd_id128_to_string.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_is_fifo.xml b/man/sd_is_fifo.xml index 627cb87aaf..57dd6afc89 100644 --- a/man/sd_is_fifo.xml +++ b/man/sd_is_fifo.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_journal_add_match.xml b/man/sd_journal_add_match.xml index 420f56356a..fe89cbf75c 100644 --- a/man/sd_journal_add_match.xml +++ b/man/sd_journal_add_match.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_journal_get_catalog.xml b/man/sd_journal_get_catalog.xml index c19eb11b20..2ff3fc2826 100644 --- a/man/sd_journal_get_catalog.xml +++ b/man/sd_journal_get_catalog.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_journal_get_cursor.xml b/man/sd_journal_get_cursor.xml index a400d8b1b5..1d38bac7fb 100644 --- a/man/sd_journal_get_cursor.xml +++ b/man/sd_journal_get_cursor.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_journal_get_cutoff_realtime_usec.xml b/man/sd_journal_get_cutoff_realtime_usec.xml index 23e7cc65e8..ae5e638d70 100644 --- a/man/sd_journal_get_cutoff_realtime_usec.xml +++ b/man/sd_journal_get_cutoff_realtime_usec.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_journal_get_data.xml b/man/sd_journal_get_data.xml index 1afbd7371c..b395fe01c9 100644 --- a/man/sd_journal_get_data.xml +++ b/man/sd_journal_get_data.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_journal_get_fd.xml b/man/sd_journal_get_fd.xml index 3a38f733ab..51dcb1aeeb 100644 --- a/man/sd_journal_get_fd.xml +++ b/man/sd_journal_get_fd.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_journal_get_realtime_usec.xml b/man/sd_journal_get_realtime_usec.xml index 607d74666b..921aa77ab6 100644 --- a/man/sd_journal_get_realtime_usec.xml +++ b/man/sd_journal_get_realtime_usec.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_journal_get_usage.xml b/man/sd_journal_get_usage.xml index 72c804d834..a89b77907c 100644 --- a/man/sd_journal_get_usage.xml +++ b/man/sd_journal_get_usage.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_journal_next.xml b/man/sd_journal_next.xml index 115fe26661..216d9a59c6 100644 --- a/man/sd_journal_next.xml +++ b/man/sd_journal_next.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_journal_open.xml b/man/sd_journal_open.xml index fb572802a3..f6aac75546 100644 --- a/man/sd_journal_open.xml +++ b/man/sd_journal_open.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_journal_print.xml b/man/sd_journal_print.xml index 0cd0b45b9a..6dbf73f9c1 100644 --- a/man/sd_journal_print.xml +++ b/man/sd_journal_print.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_journal_query_unique.xml b/man/sd_journal_query_unique.xml index ac0e5f633f..5c92f8972e 100644 --- a/man/sd_journal_query_unique.xml +++ b/man/sd_journal_query_unique.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_journal_seek_head.xml b/man/sd_journal_seek_head.xml index d74c2d5bbc..d4c13c21f8 100644 --- a/man/sd_journal_seek_head.xml +++ b/man/sd_journal_seek_head.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_journal_stream_fd.xml b/man/sd_journal_stream_fd.xml index 2ea7731b48..ae7990e212 100644 --- a/man/sd_journal_stream_fd.xml +++ b/man/sd_journal_stream_fd.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_listen_fds.xml b/man/sd_listen_fds.xml index 9b9705eb2e..38e159bb42 100644 --- a/man/sd_listen_fds.xml +++ b/man/sd_listen_fds.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_login_monitor_new.xml b/man/sd_login_monitor_new.xml index a7b47a3207..ef97dae1d0 100644 --- a/man/sd_login_monitor_new.xml +++ b/man/sd_login_monitor_new.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_machine_get_class.xml b/man/sd_machine_get_class.xml index 5b881ccea1..68babd1981 100644 --- a/man/sd_machine_get_class.xml +++ b/man/sd_machine_get_class.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_notify.xml b/man/sd_notify.xml index 87e59c9cc2..d563bcf2aa 100644 --- a/man/sd_notify.xml +++ b/man/sd_notify.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_pid_get_session.xml b/man/sd_pid_get_session.xml index b46d47101b..05a396157a 100644 --- a/man/sd_pid_get_session.xml +++ b/man/sd_pid_get_session.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_seat_get_active.xml b/man/sd_seat_get_active.xml index 3c57ec9ea4..74b4ed5fc1 100644 --- a/man/sd_seat_get_active.xml +++ b/man/sd_seat_get_active.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_session_is_active.xml b/man/sd_session_is_active.xml index 4ca3a6c150..e3af2b39c9 100644 --- a/man/sd_session_is_active.xml +++ b/man/sd_session_is_active.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_uid_get_state.xml b/man/sd_uid_get_state.xml index b158f3528c..18a3427026 100644 --- a/man/sd_uid_get_state.xml +++ b/man/sd_uid_get_state.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/sd_watchdog_enabled.xml b/man/sd_watchdog_enabled.xml index 991431f33b..41850106e6 100644 --- a/man/sd_watchdog_enabled.xml +++ b/man/sd_watchdog_enabled.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/shutdown.xml b/man/shutdown.xml index a8af387c67..9bf599b372 100644 --- a/man/shutdown.xml +++ b/man/shutdown.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/standard-conf.xml b/man/standard-conf.xml index 004f53f70c..123877a0a5 100644 --- a/man/standard-conf.xml +++ b/man/standard-conf.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refsection PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" - "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <refsection> <refsection id='confd'> @@ -39,14 +42,14 @@ <para>Default configuration is defined during compilation, so a configuration file is only needed when it is necessary to deviate from those defaults. By default the configuration file in - <filename>/etc/systemd/</filename> contains commented out entries + <filename>&pkgsysconfdir;/</filename> contains commented out entries showing the defaults as a guide to the administrator. This file can be edited to create local overrides. </para> <para>When packages need to customize the configuration, they can install configuration snippets in - <filename>/usr/lib/systemd/*.conf.d/</filename>. Files in + <filename>&rootlibexecdir;/*.conf.d/</filename>. Files in <filename>/etc/</filename> are reserved for the local administrator, who may use this logic to override the configuration files installed by vendor packages. The main diff --git a/man/standard-options.xml b/man/standard-options.xml index f214463392..5adda7c670 100644 --- a/man/standard-options.xml +++ b/man/standard-options.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" - "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <variablelist> <varlistentry id='help'> diff --git a/man/sysctl.d.xml b/man/sysctl.d.xml index 8a131791a5..841cedba3a 100644 --- a/man/sysctl.d.xml +++ b/man/sysctl.d.xml @@ -1,5 +1,8 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -127,7 +130,7 @@ <para><filename>/etc/udev/rules.d/99-bridge.rules</filename>: </para> - <programlisting>ACTION=="add", SUBSYSTEM=="module", KERNEL=="bridge", RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/net/bridge" + <programlisting>ACTION=="add", SUBSYSTEM=="module", KERNEL=="bridge", RUN+="&rootlibexecdir;/systemd-sysctl --prefix=/net/bridge" </programlisting> <para><filename>/etc/sysctl.d/bridge.conf</filename>: diff --git a/man/systemctl.xml b/man/systemctl.xml index 94a77bce0c..409b6f0895 100644 --- a/man/systemctl.xml +++ b/man/systemctl.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -410,8 +413,8 @@ processes. Not all unit types manage processes of these types however. For example, for mount units, control processes are defined (which are the invocations of - <filename>/usr/bin/mount</filename> and - <filename>/usr/bin/umount</filename>), but no main process + <filename>&MOUNT_PATH;</filename> and + <filename>&UMOUNT_PATH;</filename>), but no main process is defined. If omitted, defaults to <option>all</option>.</para> </listitem> @@ -1730,6 +1733,7 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service <varname>$VISUAL</varname> are present or if it is set to an empty string or if their execution failed, systemctl will try to execute well known editors in this order: + <citerefentry project='die-net'><refentrytitle>editor</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry project='die-net'><refentrytitle>nano</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry project='die-net'><refentrytitle>vim</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry project='die-net'><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></citerefentry>. diff --git a/man/systemd-activate.xml b/man/systemd-activate.xml index 3b854fd8ec..3aecc40b60 100644 --- a/man/systemd-activate.xml +++ b/man/systemd-activate.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -50,7 +53,7 @@ <refsynopsisdiv> <cmdsynopsis> - <command>/usr/lib/systemd/systemd-activate</command> + <command>&rootlibexecdir;/systemd-activate</command> <arg choice="opt" rep="repeat">OPTIONS</arg> <arg choice="plain"><replaceable>daemon</replaceable></arg> <arg choice="opt" rep="repeat">OPTIONS</arg> @@ -149,13 +152,13 @@ <example> <title>Run an echo server on port 2000</title> - <programlisting>$ /usr/lib/systemd/systemd-activate -l 2000 -a cat</programlisting> + <programlisting>$ &rootlibexecdir;/systemd-activate -l 2000 -a cat</programlisting> </example> <example> <title>Run a socket activated instance of <citerefentry><refentrytitle>systemd-journal-gatewayd</refentrytitle><manvolnum>8</manvolnum></citerefentry></title> - <programlisting>$ /usr/lib/systemd/systemd-activate -l 19531 /usr/lib/systemd/systemd-journal-gatewayd</programlisting> + <programlisting>$ &rootlibexecdir;/systemd-activate -l 19531 &rootlibexecdir;/systemd-journal-gatewayd</programlisting> </example> </refsect1> diff --git a/man/systemd-analyze.xml b/man/systemd-analyze.xml index 198315052f..3509d155d3 100644 --- a/man/systemd-analyze.xml +++ b/man/systemd-analyze.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd-ask-password-console.service.xml b/man/systemd-ask-password-console.service.xml index 479e5f2e5b..488a8793dd 100644 --- a/man/systemd-ask-password-console.service.xml +++ b/man/systemd-ask-password-console.service.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd-ask-password.xml b/man/systemd-ask-password.xml index 877c71af53..2402103719 100644 --- a/man/systemd-ask-password.xml +++ b/man/systemd-ask-password.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd-backlight@.service.xml b/man/systemd-backlight@.service.xml index a259f5d583..123576255d 100644 --- a/man/systemd-backlight@.service.xml +++ b/man/systemd-backlight@.service.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -48,7 +51,7 @@ <refsynopsisdiv> <para><filename>systemd-backlight@.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-backlight</filename></para> + <para><filename>&rootlibexecdir;/systemd-backlight</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-binfmt.service.xml b/man/systemd-binfmt.service.xml index 66d264389e..8659e63ebc 100644 --- a/man/systemd-binfmt.service.xml +++ b/man/systemd-binfmt.service.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -48,7 +51,7 @@ <refsynopsisdiv> <para><filename>systemd-binfmt.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-binfmt</filename></para> + <para><filename>&rootlibexecdir;/systemd-binfmt</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-bootchart.xml b/man/systemd-bootchart.xml index 538666760a..ea8a783601 100644 --- a/man/systemd-bootchart.xml +++ b/man/systemd-bootchart.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -60,7 +63,7 @@ usage, as well as per-process information from a running system. Collected results are output as an SVG graph. Normally, systemd-bootchart is invoked by the kernel by passing - <option>init=<filename>/usr/lib/systemd/systemd-bootchart</filename></option> + <option>init=<filename>&rootlibexecdir;/systemd-bootchart</filename></option> on the kernel command line. systemd-bootchart will then fork the real init off to resume normal system startup, while monitoring and logging startup information in the background. @@ -106,7 +109,7 @@ <listitem><para>The kernel can invoke <command>systemd-bootchart</command> instead of the init process. In turn, <command>systemd-bootchart</command> will - invoke <command>/usr/lib/systemd/systemd</command>. + invoke <command>&rootlibexecdir;/systemd</command>. </para></listitem> </varlistentry> @@ -128,7 +131,7 @@ <title>Options</title> <para>These options can also be set in the - <filename>/etc/systemd/bootchart.conf</filename> file. See + <filename>&pkgsysconfdir;/bootchart.conf</filename> file. See <citerefentry project='man-pages'><refentrytitle>bootchart.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>. </para> @@ -201,7 +204,7 @@ <term><option>-i</option></term> <term><option>--init <replaceable>path</replaceable></option></term> <listitem><para>Use this init binary. Defaults to - <command>/usr/lib/systemd/systemd</command>. + <command>&rootlibexecdir;/systemd</command>. </para></listitem> </varlistentry> diff --git a/man/systemd-bus-proxyd.xml b/man/systemd-bus-proxyd.xml index a1e8f4fb64..bbcf3d0981 100644 --- a/man/systemd-bus-proxyd.xml +++ b/man/systemd-bus-proxyd.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -50,7 +53,7 @@ <refsynopsisdiv> <cmdsynopsis> - <command>/usr/lib/systemd/systemd-bus-proxyd</command> + <command>&rootlibexecdir;/systemd-bus-proxyd</command> <arg choice="opt" rep="repeat">OPTIONS</arg> <arg choice="opt"><replaceable>PLACEHOLDER</replaceable></arg> </cmdsynopsis> diff --git a/man/systemd-bus-proxyd@.service.xml b/man/systemd-bus-proxyd@.service.xml index dc4f07ff1b..9dabc4dd5f 100644 --- a/man/systemd-bus-proxyd@.service.xml +++ b/man/systemd-bus-proxyd@.service.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd-cat.xml b/man/systemd-cat.xml index 9b1a8809dc..d51acd7cf8 100644 --- a/man/systemd-cat.xml +++ b/man/systemd-cat.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd-cgls.xml b/man/systemd-cgls.xml index e8f0368f48..d3b2404a76 100644 --- a/man/systemd-cgls.xml +++ b/man/systemd-cgls.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd-cgtop.xml b/man/systemd-cgtop.xml index f1ff218c39..b0c88001d4 100644 --- a/man/systemd-cgtop.xml +++ b/man/systemd-cgtop.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd-coredump.xml b/man/systemd-coredump.xml index 5da3857c08..d40562b5e1 100644 --- a/man/systemd-coredump.xml +++ b/man/systemd-coredump.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -49,7 +52,7 @@ </refnamediv> <refsynopsisdiv> - <para><filename>/usr/lib/systemd/systemd-coredump</filename></para> + <para><filename>&rootlibexecdir;/systemd-coredump</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-cryptsetup-generator.xml b/man/systemd-cryptsetup-generator.xml index b6270358ea..c4747f72d3 100644 --- a/man/systemd-cryptsetup-generator.xml +++ b/man/systemd-cryptsetup-generator.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -46,7 +49,7 @@ </refnamediv> <refsynopsisdiv> - <para><filename>/usr/lib/systemd/system-generators/systemd-cryptsetup-generator</filename></para> + <para><filename>&rootlibexecdir;/system-generators/systemd-cryptsetup-generator</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-cryptsetup@.service.xml b/man/systemd-cryptsetup@.service.xml index ea524851eb..efc213a917 100644 --- a/man/systemd-cryptsetup@.service.xml +++ b/man/systemd-cryptsetup@.service.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -48,7 +51,7 @@ <refsynopsisdiv> <para><filename>systemd-cryptsetup@.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-cryptsetup</filename></para> + <para><filename>&rootlibexecdir;/systemd-cryptsetup</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-debug-generator.xml b/man/systemd-debug-generator.xml index 5c5e9fc4a1..075ec58e7e 100644 --- a/man/systemd-debug-generator.xml +++ b/man/systemd-debug-generator.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -47,7 +50,7 @@ </refnamediv> <refsynopsisdiv> - <para><filename>/usr/lib/systemd/system-generators/systemd-debug-generator</filename></para> + <para><filename>&rootlibexecdir;/system-generators/systemd-debug-generator</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-delta.xml b/man/systemd-delta.xml index 6a6460ffaa..69ea0411e6 100644 --- a/man/systemd-delta.xml +++ b/man/systemd-delta.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd-detect-virt.xml b/man/systemd-detect-virt.xml index 40755a24d0..16ac4f3091 100644 --- a/man/systemd-detect-virt.xml +++ b/man/systemd-detect-virt.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd-efi-boot-generator.xml b/man/systemd-efi-boot-generator.xml index 23464bcf15..1f8194dd62 100644 --- a/man/systemd-efi-boot-generator.xml +++ b/man/systemd-efi-boot-generator.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -48,7 +51,7 @@ </refnamediv> <refsynopsisdiv> - <para><filename>/usr/lib/systemd/system-generators/systemd-efi-boot-generator</filename></para> + <para><filename>&rootlibexecdir;/system-generators/systemd-efi-boot-generator</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-escape.xml b/man/systemd-escape.xml index 0c3b230526..6680bcf963 100644 --- a/man/systemd-escape.xml +++ b/man/systemd-escape.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd-firstboot.xml b/man/systemd-firstboot.xml index 67289daa26..6ec54bf1c3 100644 --- a/man/systemd-firstboot.xml +++ b/man/systemd-firstboot.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd-fsck@.service.xml b/man/systemd-fsck@.service.xml index e4ffcba168..7286cd8803 100644 --- a/man/systemd-fsck@.service.xml +++ b/man/systemd-fsck@.service.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -50,7 +53,7 @@ <refsynopsisdiv> <para><filename>systemd-fsck@.service</filename></para> <para><filename>systemd-fsck-root.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-fsck</filename></para> + <para><filename>&rootlibexecdir;/systemd-fsck</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-fstab-generator.xml b/man/systemd-fstab-generator.xml index c09ed4b4da..383aab70ff 100644 --- a/man/systemd-fstab-generator.xml +++ b/man/systemd-fstab-generator.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -46,7 +49,7 @@ </refnamediv> <refsynopsisdiv> - <para><filename>/usr/lib/systemd/system-generators/systemd-fstab-generator</filename></para> + <para><filename>&rootlibexecdir;/system-generators/systemd-fstab-generator</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-getty-generator.xml b/man/systemd-getty-generator.xml index 338925964d..12127d9c2a 100644 --- a/man/systemd-getty-generator.xml +++ b/man/systemd-getty-generator.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -47,7 +50,7 @@ </refnamediv> <refsynopsisdiv> - <para><filename>/usr/lib/systemd/system-generators/systemd-getty-generator</filename></para> + <para><filename>&rootlibexecdir;/system-generators/systemd-getty-generator</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-gpt-auto-generator.xml b/man/systemd-gpt-auto-generator.xml index bcc64ec9b5..16ff100d73 100644 --- a/man/systemd-gpt-auto-generator.xml +++ b/man/systemd-gpt-auto-generator.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -50,7 +53,7 @@ </refnamediv> <refsynopsisdiv> - <para><filename>/usr/lib/systemd/system-generators/systemd-gpt-auto-generator</filename></para> + <para><filename>&rootlibexecdir;/system-generators/systemd-gpt-auto-generator</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-halt.service.xml b/man/systemd-halt.service.xml index c94e2a1820..7e83a88fab 100644 --- a/man/systemd-halt.service.xml +++ b/man/systemd-halt.service.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -56,7 +59,7 @@ <para><filename>systemd-poweroff.service</filename></para> <para><filename>systemd-reboot.service</filename></para> <para><filename>systemd-kexec.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-shutdown</filename></para> + <para><filename>&rootlibexecdir;/systemd-shutdown</filename></para> </refsynopsisdiv> <refsect1> @@ -75,7 +78,7 @@ <para>When these services are run, they ensure that PID 1 is replaced by the - <filename>/usr/lib/systemd/systemd-shutdown</filename> tool which + <filename>&rootlibexecdir;/systemd-shutdown</filename> tool which is then responsible for the actual shutdown. Before shutting down, this binary will try to unmount all remaining file systems, disable all remaining swap devices, detach all remaining storage @@ -90,7 +93,7 @@ <para>Immediately before executing the actual system halt/poweroff/reboot/kexec <filename>systemd-shutdown</filename> will run all executables in - <filename>/usr/lib/systemd/system-shutdown/</filename> and pass + <filename>&rootlibexecdir;/system-shutdown/</filename> and pass one arguments to them: either <literal>halt</literal>, <literal>poweroff</literal>, <literal>reboot</literal> or <literal>kexec</literal>, depending on the chosen action. All diff --git a/man/systemd-hibernate-resume-generator.xml b/man/systemd-hibernate-resume-generator.xml index d811b9b551..52837bc3f0 100644 --- a/man/systemd-hibernate-resume-generator.xml +++ b/man/systemd-hibernate-resume-generator.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -46,7 +49,7 @@ </refnamediv> <refsynopsisdiv> - <para><filename>/usr/lib/systemd/system-generators/systemd-hibernate-resume-generator</filename></para> + <para><filename>&rootlibexecdir;/system-generators/systemd-hibernate-resume-generator</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-hibernate-resume@.service.xml b/man/systemd-hibernate-resume@.service.xml index 7d00827447..bca08b5fd5 100644 --- a/man/systemd-hibernate-resume@.service.xml +++ b/man/systemd-hibernate-resume@.service.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -48,7 +51,7 @@ <refsynopsisdiv> <para><filename>systemd-hibernate-resume@.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-hibernate-resume</filename></para> + <para><filename>&rootlibexecdir;/systemd-hibernate-resume</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-hostnamed.service.xml b/man/systemd-hostnamed.service.xml index 6990d41b02..2db1d035b1 100644 --- a/man/systemd-hostnamed.service.xml +++ b/man/systemd-hostnamed.service.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -50,7 +53,7 @@ <refsynopsisdiv> <para><filename>systemd-hostnamed.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-hostnamed</filename></para> + <para><filename>&rootlibexecdir;/systemd-hostnamed</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-hwdb.xml b/man/systemd-hwdb.xml index f1a14025b0..9a58776af2 100644 --- a/man/systemd-hwdb.xml +++ b/man/systemd-hwdb.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <refentry id="systemd-hwdb" conditional="ENABLE_HWDB"> <refentryinfo> @@ -57,7 +60,7 @@ <varlistentry> <term><option>--usr</option></term> <listitem> - <para>Generate in /usr/lib/udev instead of /etc/udev.</para> + <para>Generate in &udevlibexecdir; instead of /etc/udev.</para> </listitem> </varlistentry> <varlistentry> diff --git a/man/systemd-inhibit.xml b/man/systemd-inhibit.xml index 9d85908f97..6ff07210d3 100644 --- a/man/systemd-inhibit.xml +++ b/man/systemd-inhibit.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd-initctl.service.xml b/man/systemd-initctl.service.xml index 5c7f9a4a16..95288d068f 100644 --- a/man/systemd-initctl.service.xml +++ b/man/systemd-initctl.service.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -52,7 +55,7 @@ <refsynopsisdiv> <para><filename>systemd-initctl.service</filename></para> <para><filename>systemd-initctl.socket</filename></para> - <para><filename>/usr/lib/systemd/systemd-initctl</filename></para> + <para><filename>&rootlibexecdir;/systemd-initctl</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-journal-gatewayd.service.xml b/man/systemd-journal-gatewayd.service.xml index 6df2248578..f7588794cd 100644 --- a/man/systemd-journal-gatewayd.service.xml +++ b/man/systemd-journal-gatewayd.service.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -54,7 +57,7 @@ <para><filename>systemd-journal-gatewayd.service</filename></para> <para><filename>systemd-journal-gatewayd.socket</filename></para> <cmdsynopsis> - <command>/usr/lib/systemd/systemd-journal-gatewayd</command> + <command>&rootlibexecdir;/systemd-journal-gatewayd</command> <arg choice="opt" rep="repeat">OPTIONS</arg> </cmdsynopsis> </refsynopsisdiv> diff --git a/man/systemd-journal-remote.xml b/man/systemd-journal-remote.xml index ebaca2657f..596479edb1 100644 --- a/man/systemd-journal-remote.xml +++ b/man/systemd-journal-remote.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd-journal-upload.xml b/man/systemd-journal-upload.xml index 597f2a2d3e..5398ff42e2 100644 --- a/man/systemd-journal-upload.xml +++ b/man/systemd-journal-upload.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -243,8 +246,8 @@ openssl ca -batch -config ca.conf -notext -in $CLIENT.csr -out $CLIENT.pem <varname>TrustedCertificateFile=</varname>, <varname>ServerCertificateFile=</varname>, <varname>ServerKeyFile=</varname>, in - <filename>/etc/systemd/journal-remote.conf</filename> and - <filename>/etc/systemd/journal-upload.conf</filename> + <filename>&pkgsysconfdir;/journal-remote.conf</filename> and + <filename>&pkgsysconfdir;/journal-upload.conf</filename> respectively. The default locations can be queried by using <command>systemd-journal-remote --help</command> and <command>systemd-journal-upload --help</command>.</para> diff --git a/man/systemd-journald.service.xml b/man/systemd-journald.service.xml index 8280d6c874..ead1eee3fb 100644 --- a/man/systemd-journald.service.xml +++ b/man/systemd-journald.service.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -54,7 +57,7 @@ <para><filename>systemd-journald.service</filename></para> <para><filename>systemd-journald.socket</filename></para> <para><filename>systemd-journald-dev-log.socket</filename></para> - <para><filename>/usr/lib/systemd/systemd-journald</filename></para> + <para><filename>&rootlibexecdir;/systemd-journald</filename></para> </refsynopsisdiv> <refsect1> @@ -199,7 +202,7 @@ <variablelist> <varlistentry> - <term><filename>/etc/systemd/journald.conf</filename></term> + <term><filename>&pkgsysconfdir;/journald.conf</filename></term> <listitem><para>Configure <command>systemd-journald</command> diff --git a/man/systemd-localed.service.xml b/man/systemd-localed.service.xml index 06aa78c0e4..1628054a3b 100644 --- a/man/systemd-localed.service.xml +++ b/man/systemd-localed.service.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -50,7 +53,7 @@ <refsynopsisdiv> <para><filename>systemd-localed.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-localed</filename></para> + <para><filename>&rootlibexecdir;/systemd-localed</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-logind.service.xml b/man/systemd-logind.service.xml index 5733e42cd1..1416d884ce 100644 --- a/man/systemd-logind.service.xml +++ b/man/systemd-logind.service.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -50,7 +53,7 @@ <refsynopsisdiv> <para><filename>systemd-logind.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-logind</filename></para> + <para><filename>&rootlibexecdir;/systemd-logind</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-machine-id-commit.service.xml b/man/systemd-machine-id-commit.service.xml index 7c8fc0874e..7bda76c4e5 100644 --- a/man/systemd-machine-id-commit.service.xml +++ b/man/systemd-machine-id-commit.service.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -47,7 +50,7 @@ <refsynopsisdiv> <para><filename>systemd-machine-id-commit.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-machine-id-commit</filename></para> + <para><filename>&rootlibexecdir;/systemd-machine-id-commit</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-machine-id-commit.xml b/man/systemd-machine-id-commit.xml index cfb1722063..0ebbfe7f07 100644 --- a/man/systemd-machine-id-commit.xml +++ b/man/systemd-machine-id-commit.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd-machine-id-setup.xml b/man/systemd-machine-id-setup.xml index 182717f524..5a84a3b36c 100644 --- a/man/systemd-machine-id-setup.xml +++ b/man/systemd-machine-id-setup.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd-machined.service.xml b/man/systemd-machined.service.xml index 999aeee1c6..a62e42c35b 100644 --- a/man/systemd-machined.service.xml +++ b/man/systemd-machined.service.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -50,7 +53,7 @@ <refsynopsisdiv> <para><filename>systemd-machined.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-machined</filename></para> + <para><filename>&rootlibexecdir;/systemd-machined</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-modules-load.service.xml b/man/systemd-modules-load.service.xml index dacd083bad..dc9e2a8554 100644 --- a/man/systemd-modules-load.service.xml +++ b/man/systemd-modules-load.service.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -48,7 +51,7 @@ <refsynopsisdiv> <para><filename>systemd-modules-load.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-modules-load</filename></para> + <para><filename>&rootlibexecdir;/systemd-modules-load</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-networkd-wait-online.service.xml b/man/systemd-networkd-wait-online.service.xml index f53b337daa..157671d6b2 100644 --- a/man/systemd-networkd-wait-online.service.xml +++ b/man/systemd-networkd-wait-online.service.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -50,7 +53,7 @@ <refsynopsisdiv> <para><filename>systemd-networkd-wait-online.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-networkd-wait-online</filename></para> + <para><filename>&rootlibexecdir;/systemd-networkd-wait-online</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-networkd.service.xml b/man/systemd-networkd.service.xml index 0bfe5519bc..1eef5b745b 100644 --- a/man/systemd-networkd.service.xml +++ b/man/systemd-networkd.service.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -50,7 +53,7 @@ <refsynopsisdiv> <para><filename>systemd-networkd.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-networkd</filename></para> + <para><filename>&rootlibexecdir;/systemd-networkd</filename></para> </refsynopsisdiv> <refsect1> @@ -75,10 +78,10 @@ <refsect1><title>Configuration Files</title> <para>The configuration files are read from the files located in the - system network directory <filename>/usr/lib/systemd/network</filename>, + system network directory <filename>&rootlibexecdir;/network</filename>, the volatile runtime network directory <filename>/run/systemd/network</filename> and the local administration - network directory <filename>/etc/systemd/network</filename>.</para> + network directory <filename>&pkgsysconfdir;/network</filename>.</para> <para>Networks are configured in <filename>.network</filename> files, see diff --git a/man/systemd-notify.xml b/man/systemd-notify.xml index 06d5ae5319..1158473117 100644 --- a/man/systemd-notify.xml +++ b/man/systemd-notify.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd-nspawn.xml b/man/systemd-nspawn.xml index 06285edc0b..218c7291e0 100644 --- a/man/systemd-nspawn.xml +++ b/man/systemd-nspawn.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd-path.xml b/man/systemd-path.xml index dfc75ee0ff..185a0cc901 100644 --- a/man/systemd-path.xml +++ b/man/systemd-path.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd-quotacheck.service.xml b/man/systemd-quotacheck.service.xml index 9d4976274e..7673635a68 100644 --- a/man/systemd-quotacheck.service.xml +++ b/man/systemd-quotacheck.service.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -48,7 +51,7 @@ <refsynopsisdiv> <para><filename>systemd-quotacheck.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-quotacheck</filename></para> + <para><filename>&rootlibexecdir;/systemd-quotacheck</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-random-seed.service.xml b/man/systemd-random-seed.service.xml index 8c836688fe..580c3518c3 100644 --- a/man/systemd-random-seed.service.xml +++ b/man/systemd-random-seed.service.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -48,7 +51,7 @@ <refsynopsisdiv> <para><filename>systemd-random-seed.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-random-seed</filename></para> + <para><filename>&rootlibexecdir;/systemd-random-seed</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-remount-fs.service.xml b/man/systemd-remount-fs.service.xml index 9bc07fcdda..c8c3d16157 100644 --- a/man/systemd-remount-fs.service.xml +++ b/man/systemd-remount-fs.service.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -48,7 +51,7 @@ <refsynopsisdiv> <para><filename>systemd-remount-fs.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-remount-fs</filename></para> + <para><filename>&rootlibexecdir;/systemd-remount-fs</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-resolved.service.xml b/man/systemd-resolved.service.xml index 89ec5f8b19..892ebff7ad 100644 --- a/man/systemd-resolved.service.xml +++ b/man/systemd-resolved.service.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -50,7 +53,7 @@ <refsynopsisdiv> <para><filename>systemd-resolved.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-resolved</filename></para> + <para><filename>&rootlibexecdir;/systemd-resolved</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-rfkill@.service.xml b/man/systemd-rfkill@.service.xml index 709b09d818..befe001f29 100644 --- a/man/systemd-rfkill@.service.xml +++ b/man/systemd-rfkill@.service.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -48,7 +51,7 @@ <refsynopsisdiv> <para><filename>systemd-rfkill@.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-rfkill</filename></para> + <para><filename>&rootlibexecdir;/systemd-rfkill</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-run.xml b/man/systemd-run.xml index 71b365c8eb..ddd08e5b51 100644 --- a/man/systemd-run.xml +++ b/man/systemd-run.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd-sleep.conf.xml b/man/systemd-sleep.conf.xml index 9a379ecb94..c5d26d0649 100644 --- a/man/systemd-sleep.conf.xml +++ b/man/systemd-sleep.conf.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -49,10 +52,10 @@ </refnamediv> <refsynopsisdiv> - <para><filename>/etc/systemd/sleep.conf</filename></para> - <para><filename>/etc/systemd/sleep.conf.d/*.conf</filename></para> + <para><filename>&pkgsysconfdir;/sleep.conf</filename></para> + <para><filename>&pkgsysconfdir;/sleep.conf.d/*.conf</filename></para> <para><filename>/run/systemd/sleep.conf.d/*.conf</filename></para> - <para><filename>/usr/lib/systemd/sleep.conf.d/*.conf</filename></para> + <para><filename>&rootlibexecdir;/sleep.conf.d/*.conf</filename></para> </refsynopsisdiv> <refsect1> @@ -119,7 +122,7 @@ <para>The following options can be configured in the <literal>[Sleep]</literal> section of - <filename>/etc/systemd/sleep.conf</filename> or a + <filename>&pkgsysconfdir;/sleep.conf</filename> or a <filename>sleep.conf.d</filename> file:</para> <variablelist class='systemd-directives'> diff --git a/man/systemd-socket-proxyd.xml b/man/systemd-socket-proxyd.xml index ae4217b910..dc3baefe38 100644 --- a/man/systemd-socket-proxyd.xml +++ b/man/systemd-socket-proxyd.xml @@ -1,7 +1,10 @@ <?xml version="1.0"?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -113,7 +116,7 @@ Requires=nginx.service After=nginx.service [Service] -ExecStart=/usr/lib/systemd/systemd-socket-proxyd /tmp/nginx.sock +ExecStart=]]>&rootlibexecdir;<![CDATA[/systemd-socket-proxyd /tmp/nginx.sock PrivateTmp=yes PrivateNetwork=yes]]></programlisting> </example> @@ -156,7 +159,7 @@ After=nginx.service JoinsNamespaceOf=nginx.service [Service] -ExecStart=/usr/lib/systemd/systemd-socket-proxyd 127.0.0.1:8080 +ExecStart=]]>&rootlibexecdir;<![CDATA[/systemd-socket-proxyd 127.0.0.1:8080 PrivateTmp=yes PrivateNetwork=yes]]></programlisting> </example> diff --git a/man/systemd-suspend.service.xml b/man/systemd-suspend.service.xml index a8beb86f4d..2722d1840a 100644 --- a/man/systemd-suspend.service.xml +++ b/man/systemd-suspend.service.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -56,7 +59,7 @@ <para><filename>systemd-suspend.service</filename></para> <para><filename>systemd-hibernate.service</filename></para> <para><filename>systemd-hybrid-sleep.service</filename></para> - <para><filename>/usr/lib/systemd/system-sleep</filename></para> + <para><filename>&rootlibexecdir;/system-sleep</filename></para> </refsynopsisdiv> <refsect1> @@ -75,7 +78,7 @@ <para>Immediately before entering system suspend and/or hibernation <filename>systemd-suspend.service</filename> (and the other mentioned units, respectively) will run all executables in - <filename>/usr/lib/systemd/system-sleep/</filename> and pass two + <filename>&rootlibexecdir;/system-sleep/</filename> and pass two arguments to them. The first argument will be <literal>pre</literal>, the second either <literal>suspend</literal>, <literal>hibernate</literal>, or @@ -87,7 +90,7 @@ until all executables have finished.</para> <para>Note that scripts or binaries dropped in - <filename>/usr/lib/systemd/system-sleep/</filename> are intended + <filename>&rootlibexecdir;/system-sleep/</filename> are intended for local use only and should be considered hacks. If applications want to be notified of system suspend/hibernation and resume, there are much nicer interfaces available.</para> @@ -104,7 +107,7 @@ <literal>mem</literal> into <filename>/sys/power/state</filename>, to trigger the actual system suspend. What exactly is written where can be configured in the <literal>[Sleep]</literal> section - of <filename>/etc/systemd/sleep.conf</filename> or a + of <filename>&pkgsysconfdir;/sleep.conf</filename> or a <filename>sleep.conf.d</filename> file. See <citerefentry><refentrytitle>systemd-sleep.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>. </para> diff --git a/man/systemd-sysctl.service.xml b/man/systemd-sysctl.service.xml index d4c1a7ebe3..f7da4cd71a 100644 --- a/man/systemd-sysctl.service.xml +++ b/man/systemd-sysctl.service.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -48,7 +51,7 @@ <refsynopsisdiv> <para><filename>systemd-sysctl.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-sysctl</filename></para> + <para><filename>&rootlibexecdir;/systemd-sysctl</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-system-update-generator.xml b/man/systemd-system-update-generator.xml index e7fc95c742..5c593b3906 100644 --- a/man/systemd-system-update-generator.xml +++ b/man/systemd-system-update-generator.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -46,7 +49,7 @@ </refnamediv> <refsynopsisdiv> - <para><filename>/usr/lib/systemd/system-generators/systemd-system-update-generator</filename></para> + <para><filename>&rootlibexecdir;/system-generators/systemd-system-update-generator</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-system.conf.xml b/man/systemd-system.conf.xml index c06accd791..5aa5da4706 100644 --- a/man/systemd-system.conf.xml +++ b/man/systemd-system.conf.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -51,14 +54,14 @@ </refnamediv> <refsynopsisdiv> - <para><filename>/etc/systemd/system.conf</filename></para> - <para><filename>/etc/systemd/system.conf.d/*.conf</filename></para> + <para><filename>&pkgsysconfdir;/system.conf</filename></para> + <para><filename>&pkgsysconfdir;/system.conf.d/*.conf</filename></para> <para><filename>/run/systemd/system.conf.d/*.conf</filename></para> - <para><filename>/usr/lib/systemd/system.conf.d/*.conf</filename></para> - <para><filename>/etc/systemd/user.conf</filename></para> - <para><filename>/etc/systemd/user.conf.d/*.conf</filename></para> + <para><filename>&rootlibexecdir;/system.conf.d/*.conf</filename></para> + <para><filename>&pkgsysconfdir;/user.conf</filename></para> + <para><filename>&pkgsysconfdir;/user.conf.d/*.conf</filename></para> <para><filename>/run/systemd/user.conf.d/*.conf</filename></para> - <para><filename>/usr/lib/systemd/user.conf.d/*.conf</filename></para> + <para><filename>&rootlibexecdir;/user.conf.d/*.conf</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-sysusers.xml b/man/systemd-sysusers.xml index a0c0f996ac..cbe4f2f9cb 100644 --- a/man/systemd-sysusers.xml +++ b/man/systemd-sysusers.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd-sysv-generator.xml b/man/systemd-sysv-generator.xml index f2d56cbcd2..e7592d6692 100644 --- a/man/systemd-sysv-generator.xml +++ b/man/systemd-sysv-generator.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -46,7 +49,7 @@ </refnamediv> <refsynopsisdiv> - <para><filename>/usr/lib/systemd/system-generators/systemd-sysv-generator</filename></para> + <para><filename>&rootlibexecdir;/system-generators/systemd-sysv-generator</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-timedated.service.xml b/man/systemd-timedated.service.xml index e44163aefb..3598490d14 100644 --- a/man/systemd-timedated.service.xml +++ b/man/systemd-timedated.service.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -50,7 +53,7 @@ <refsynopsisdiv> <para><filename>systemd-timedated.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-timedated</filename></para> + <para><filename>&rootlibexecdir;/systemd-timedated</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-timesyncd.service.xml b/man/systemd-timesyncd.service.xml index ac1af2d136..a1b364534b 100644 --- a/man/systemd-timesyncd.service.xml +++ b/man/systemd-timesyncd.service.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -50,7 +53,7 @@ <refsynopsisdiv> <para><filename>systemd-timesyncd.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-timesyncd</filename></para> + <para><filename>&rootlibexecdir;/systemd-timesyncd</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml index ceec06f840..f12f997f93 100644 --- a/man/systemd-tmpfiles.xml +++ b/man/systemd-tmpfiles.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd-tty-ask-password-agent.xml b/man/systemd-tty-ask-password-agent.xml index 2876fab644..dac3a3c02c 100644 --- a/man/systemd-tty-ask-password-agent.xml +++ b/man/systemd-tty-ask-password-agent.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd-udevd.service.xml b/man/systemd-udevd.service.xml index b18b22871f..c0d323033c 100644 --- a/man/systemd-udevd.service.xml +++ b/man/systemd-udevd.service.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <refentry id="systemd-udevd.service" xmlns:xi="http://www.w3.org/2001/XInclude"> @@ -37,7 +40,7 @@ <para><filename>systemd-udevd-kernel.socket</filename></para> <cmdsynopsis> - <command>/usr/lib/systemd/systemd-udevd</command> + <command>&rootlibexecdir;/systemd-udevd</command> <arg><option>--daemon</option></arg> <arg><option>--debug</option></arg> <arg><option>--children-max=</option></arg> diff --git a/man/systemd-update-done.service.xml b/man/systemd-update-done.service.xml index d65f175418..3f121582e9 100644 --- a/man/systemd-update-done.service.xml +++ b/man/systemd-update-done.service.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -48,7 +51,7 @@ <refsynopsisdiv> <para><filename>systemd-update-done.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-update-done</filename></para> + <para><filename>&rootlibexecdir;/systemd-update-done</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-update-utmp.service.xml b/man/systemd-update-utmp.service.xml index c8a9cb7c90..285691849f 100644 --- a/man/systemd-update-utmp.service.xml +++ b/man/systemd-update-utmp.service.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -51,7 +54,7 @@ <refsynopsisdiv> <para><filename>systemd-update-utmp.service</filename></para> <para><filename>systemd-update-utmp-runlevel.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-update-utmp</filename></para> + <para><filename>&rootlibexecdir;/systemd-update-utmp</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-user-sessions.service.xml b/man/systemd-user-sessions.service.xml index e75ef11c4e..620648cfe8 100644 --- a/man/systemd-user-sessions.service.xml +++ b/man/systemd-user-sessions.service.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -48,7 +51,7 @@ <refsynopsisdiv> <para><filename>systemd-user-sessions.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-user-sessions</filename></para> + <para><filename>&rootlibexecdir;/systemd-user-sessions</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd-vconsole-setup.service.xml b/man/systemd-vconsole-setup.service.xml index 7c6ed08997..6c6d8e2af0 100644 --- a/man/systemd-vconsole-setup.service.xml +++ b/man/systemd-vconsole-setup.service.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -48,7 +51,7 @@ <refsynopsisdiv> <para><filename>systemd-vconsole-setup.service</filename></para> - <para><filename>/usr/lib/systemd/systemd-vconsole-setup</filename></para> + <para><filename>&rootlibexecdir;/systemd-vconsole-setup</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/systemd.automount.xml b/man/systemd.automount.xml index 9561590c5c..18c10d00f5 100644 --- a/man/systemd.automount.xml +++ b/man/systemd.automount.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd.device.xml b/man/systemd.device.xml index ac6deafb18..96a20d14d1 100644 --- a/man/systemd.device.xml +++ b/man/systemd.device.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml index 64877720bc..ea53722f0f 100644 --- a/man/systemd.exec.xml +++ b/man/systemd.exec.xml @@ -1,5 +1,8 @@ <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd.generator.xml b/man/systemd.generator.xml index 2285e91812..5ce0592a6e 100644 --- a/man/systemd.generator.xml +++ b/man/systemd.generator.xml @@ -59,14 +59,14 @@ <para> <literallayout><filename>/run/systemd/system-generators/*</filename> -<filename>/etc/systemd/system-generators/*</filename> +<filename>&pkgsysconfdir;/system-generators/*</filename> <filename>/usr/local/lib/systemd/system-generators/*</filename> <filename>&systemgeneratordir;/*</filename></literallayout> </para> <para> <literallayout><filename>/run/systemd/user-generators/*</filename> -<filename>/etc/systemd/user-generators/*</filename> +<filename>&pkgsysconfdir;/user-generators/*</filename> <filename>/usr/local/lib/systemd/user-generators/*</filename> <filename>&usergeneratordir;/*</filename></literallayout> </para> diff --git a/man/systemd.journal-fields.xml b/man/systemd.journal-fields.xml index a101006a7e..2cb010c0be 100644 --- a/man/systemd.journal-fields.xml +++ b/man/systemd.journal-fields.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd.kill.xml b/man/systemd.kill.xml index e57f0e7242..ef828e081c 100644 --- a/man/systemd.kill.xml +++ b/man/systemd.kill.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd.link.xml b/man/systemd.link.xml index 3fac760b01..5db06842bd 100644 --- a/man/systemd.link.xml +++ b/man/systemd.link.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -56,21 +59,21 @@ <command>net_setup_link</command> udev builtin.</para> <para>The link files are read from the files located in the system - network directory <filename>/usr/lib/systemd/network</filename>, + network directory <filename>&rootlibexecdir;/network</filename>, the volatile runtime network directory <filename>/run/systemd/network</filename>, and the local administration network directory - <filename>/etc/systemd/network</filename>. Link files must have + <filename>&pkgsysconfdir;/network</filename>. Link files must have the extension <filename>.link</filename>; other extensions are ignored. All link files are collectively sorted and processed in lexical order, regardless of the directories in which they live. However, files with identical filenames replace each other. Files in <filename>/etc</filename> have the highest priority, files in <filename>/run</filename> take precedence over files with the same - name in <filename>/usr/lib</filename>. This can be used to + name in <filename>&rootprefix;/lib</filename>. This can be used to override a system-supplied link file with a local file if needed; a symlink in <filename>/etc</filename> with the same name as a - link file in <filename>/usr/lib</filename>, pointing to + link file in <filename>&rootprefix;/lib</filename>, pointing to <filename>/dev/null</filename>, disables the link file entirely.</para> @@ -382,7 +385,7 @@ <refsect1> <title>Example</title> <example> - <title>/etc/systemd/network/wireless.link</title> + <title>&pkgsysconfdir;/network/wireless.link</title> <programlisting>[Match] MACAddress=12:34:56:78:9a:bc diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml index ffffc56936..f22c86adc1 100644 --- a/man/systemd.mount.xml +++ b/man/systemd.mount.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd.netdev.xml b/man/systemd.netdev.xml index 01c31c5ef5..786c7d478a 100644 --- a/man/systemd.netdev.xml +++ b/man/systemd.netdev.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -68,20 +71,20 @@ <para>The <filename>.netdev</filename> files are read from the files located in the system network directory - <filename>/usr/lib/systemd/network</filename>, the volatile + <filename>&rootlibexecdir;/network</filename>, the volatile runtime network directory <filename>/run/systemd/network</filename> and the local administration network directory - <filename>/etc/systemd/network</filename>. All configuration files + <filename>&pkgsysconfdir;/network</filename>. All configuration files are collectively sorted and processed in lexical order, regardless of the directories in which they live. However, files with identical filenames replace each other. Files in <filename>/etc</filename> have the highest priority, files in <filename>/run</filename> take precedence over files with the same - name in <filename>/usr/lib</filename>. This can be used to + name in <filename>&rootprefix;/lib</filename>. This can be used to override a system-supplied configuration file with a local file if needed; a symlink in <filename>/etc</filename> with the same name - as a configuration file in <filename>/usr/lib</filename>, pointing + as a configuration file in <filename>&rootprefix;/lib</filename>, pointing to <filename>/dev/null</filename>, disables the configuration file entirely.</para> @@ -842,7 +845,7 @@ <refsect1> <title>Example</title> <example> - <title>/etc/systemd/network/bridge.netdev</title> + <title>&pkgsysconfdir;/network/bridge.netdev</title> <programlisting>[NetDev] Name=bridge0 @@ -850,7 +853,7 @@ Kind=bridge</programlisting> </example> <example> - <title>/etc/systemd/network/vlan1.netdev</title> + <title>&pkgsysconfdir;/network/vlan1.netdev</title> <programlisting>[Match] Virtualization=no @@ -863,7 +866,7 @@ Kind=vlan Id=1</programlisting> </example> <example> - <title>/etc/systemd/network/ipip.netdev</title> + <title>&pkgsysconfdir;/network/ipip.netdev</title> <programlisting>[NetDev] Name=ipip-tun Kind=ipip @@ -875,7 +878,7 @@ Remote=192.169.224.239 TTL=64</programlisting> </example> <example> - <title>/etc/systemd/network/tap.netdev</title> + <title>&pkgsysconfdir;/network/tap.netdev</title> <programlisting>[NetDev] Name=tap-test Kind=tap @@ -885,7 +888,7 @@ MultiQueue=true PacketInfo=true</programlisting> </example> <example> - <title>/etc/systemd/network/sit.netdev</title> + <title>&pkgsysconfdir;/network/sit.netdev</title> <programlisting>[NetDev] Name=sit-tun Kind=sit @@ -897,7 +900,7 @@ Remote=10.65.223.239</programlisting> </example> <example> - <title>/etc/systemd/network/gre.netdev</title> + <title>&pkgsysconfdir;/network/gre.netdev</title> <programlisting>[NetDev] Name=gre-tun Kind=gre @@ -909,7 +912,7 @@ Remote=10.65.223.239</programlisting> </example> <example> - <title>/etc/systemd/network/vti.netdev</title> + <title>&pkgsysconfdir;/network/vti.netdev</title> <programlisting>[NetDev] Name=vti-tun @@ -922,7 +925,7 @@ Remote=10.65.223.239</programlisting> </example> <example> - <title>/etc/systemd/network/veth.netdev</title> + <title>&pkgsysconfdir;/network/veth.netdev</title> <programlisting>[NetDev] Name=veth-test Kind=veth @@ -932,7 +935,7 @@ Name=veth-peer</programlisting> </example> <example> - <title>/etc/systemd/network/dummy.netdev</title> + <title>&pkgsysconfdir;/network/dummy.netdev</title> <programlisting>[NetDev] Name=dummy-test Kind=dummy diff --git a/man/systemd.network.xml b/man/systemd.network.xml index bdbe239812..54fef4c9c4 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -64,20 +67,20 @@ <para>The <filename>.network</filename> files are read from the files located in the system network directory - <filename>/usr/lib/systemd/network</filename>, the volatile + <filename>&rootlibexecdir;/network</filename>, the volatile runtime network directory <filename>/run/systemd/network</filename> and the local administration network directory - <filename>/etc/systemd/network</filename>. All configuration files + <filename>&pkgsysconfdir;/network</filename>. All configuration files are collectively sorted and processed in lexical order, regardless of the directories in which they live. However, files with identical filenames replace each other. Files in <filename>/etc</filename> have the highest priority, files in <filename>/run</filename> take precedence over files with the same - name in <filename>/usr/lib</filename>. This can be used to + name in <filename>&rootprefix;/lib</filename>. This can be used to override a system-supplied configuration file with a local file if needed; a symlink in <filename>/etc</filename> with the same name - as a configuration file in <filename>/usr/lib</filename>, pointing + as a configuration file in <filename>&rootprefix;/lib</filename>, pointing to <filename>/dev/null</filename>, disables the configuration file entirely.</para> @@ -363,7 +366,8 @@ the routing table. Takes either a boolean argument, or the values <literal>ipv4</literal> or <literal>ipv6</literal>, which only enables IP forwarding for the specified address - family. This controls the + family, or <literal>kernel</literal>, which preserves existing sysctl settings. + This controls the <filename>net.ipv4.conf.<interface>.forwarding</filename> and <filename>net.ipv6.conf.<interface>.forwarding</filename> @@ -372,8 +376,8 @@ for details about sysctl options). Defaults to <literal>no</literal>.</para> - <para>Note: unless this option is turned on, no IP - forwarding is done on this interface, even if this is + <para>Note: unless this option is turned on, or set to <literal>kernel</literal>, + no IP forwarding is done on this interface, even if this is globally turned on in the kernel, with the <filename>net.ipv4.ip_forward</filename> and <filename>net.ipv4.ip_forward</filename> sysctl @@ -683,7 +687,7 @@ <refsect1> <title>Example</title> <example> - <title>/etc/systemd/network/50-static.network</title> + <title>&pkgsysconfdir;/network/50-static.network</title> <programlisting>[Match] Name=enp2s0 @@ -694,7 +698,7 @@ Gateway=192.168.0.1</programlisting> </example> <example> - <title>/etc/systemd/network/80-dhcp.network</title> + <title>&pkgsysconfdir;/network/80-dhcp.network</title> <programlisting>[Match] Name=en* @@ -704,7 +708,7 @@ DHCP=yes</programlisting> </example> <example> - <title>/etc/systemd/network/bridge-static.network</title> + <title>&pkgsysconfdir;/network/bridge-static.network</title> <programlisting>[Match] Name=bridge0 @@ -716,7 +720,7 @@ DNS=192.168.0.1</programlisting> </example> <example> - <title>/etc/systemd/network/bridge-slave-interface.network</title> + <title>&pkgsysconfdir;/network/bridge-slave-interface.network</title> <programlisting>[Match] Name=enp2s0 @@ -725,7 +729,7 @@ Name=enp2s0 Bridge=bridge0</programlisting> </example> <example> - <title>/etc/systemd/network/ipip.network</title> + <title>&pkgsysconfdir;/network/ipip.network</title> <programlisting>[Match] Name=em1 @@ -735,7 +739,7 @@ Tunnel=ipip-tun</programlisting> </example> <example> - <title>/etc/systemd/network/sit.network</title> + <title>&pkgsysconfdir;/network/sit.network</title> <programlisting>[Match] Name=em1 @@ -745,7 +749,7 @@ Tunnel=sit-tun</programlisting> </example> <example> - <title>/etc/systemd/network/gre.network</title> + <title>&pkgsysconfdir;/network/gre.network</title> <programlisting>[Match] Name=em1 @@ -755,7 +759,7 @@ Tunnel=gre-tun</programlisting> </example> <example> - <title>/etc/systemd/network/vti.network</title> + <title>&pkgsysconfdir;/network/vti.network</title> <programlisting>[Match] Name=em1 diff --git a/man/systemd.path.xml b/man/systemd.path.xml index d02bc92ae6..03b626b560 100644 --- a/man/systemd.path.xml +++ b/man/systemd.path.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd.preset.xml b/man/systemd.preset.xml index 2f9add8d6c..4667f9d616 100644 --- a/man/systemd.preset.xml +++ b/man/systemd.preset.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -46,12 +49,12 @@ </refnamediv> <refsynopsisdiv> - <para><filename>/etc/systemd/system-preset/*.preset</filename></para> + <para><filename>&pkgsysconfdir;/system-preset/*.preset</filename></para> <para><filename>/run/systemd/system-preset/*.preset</filename></para> - <para><filename>/usr/lib/systemd/system-preset/*.preset</filename></para> - <para><filename>/etc/systemd/user-preset/*.preset</filename></para> + <para><filename>&rootlibexecdir;/system-preset/*.preset</filename></para> + <para><filename>&pkgsysconfdir;/user-preset/*.preset</filename></para> <para><filename>/run/systemd/user-preset/*.preset</filename></para> - <para><filename>/usr/lib/systemd/user-preset/*.preset</filename></para> + <para><filename>&rootlibexecdir;/user-preset/*.preset</filename></para> </refsynopsisdiv> <refsect1> @@ -125,7 +128,7 @@ <para>If the administrator wants to disable a preset file supplied by the vendor, the recommended way is to place a symlink to <filename>/dev/null</filename> in - <filename>/etc/systemd/system-preset/</filename> bearing the same + <filename>&pkgsysconfdir;/system-preset/</filename> bearing the same filename.</para> </refsect1> @@ -133,7 +136,7 @@ <title>Example</title> <example> - <title>Default off example <filename>/usr/lib/systemd/system-preset/99-default.preset</filename>:</title> + <title>Default off example <filename>&rootlibexecdir;/system-preset/99-default.preset</filename>:</title> <programlisting>disable *</programlisting> </example> @@ -144,7 +147,7 @@ suchlike.</para> <example> - <title>A GNOME spin example <filename>/usr/lib/systemd/system-preset/50-gnome.preset</filename>:</title> + <title>A GNOME spin example <filename>&rootlibexecdir;/system-preset/50-gnome.preset</filename>:</title> <programlisting>enable gdm.service enable colord.service @@ -162,7 +165,7 @@ enable avahi-daemon.*</programlisting> example like the one from the first example above.</para> <example> - <title>Administrator policy <filename>/etc/systemd/system-preset/00-lennart.preset</filename>:</title> + <title>Administrator policy <filename>&pkgsysconfdir;/system-preset/00-lennart.preset</filename>:</title> <programlisting>enable httpd.service enable sshd.service diff --git a/man/systemd.resource-control.xml b/man/systemd.resource-control.xml index 8f4e7a3f16..82e21c6906 100644 --- a/man/systemd.resource-control.xml +++ b/man/systemd.resource-control.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd.scope.xml b/man/systemd.scope.xml index fd65a851e2..f137cb7391 100644 --- a/man/systemd.scope.xml +++ b/man/systemd.scope.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd.service.xml b/man/systemd.service.xml index 7ff2adf4e9..0fe694ab7e 100644 --- a/man/systemd.service.xml +++ b/man/systemd.service.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd.slice.xml b/man/systemd.slice.xml index f0bac41763..c443528ab1 100644 --- a/man/systemd.slice.xml +++ b/man/systemd.slice.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" -"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -90,7 +93,7 @@ slice specific configuration options are configured in the [Slice] section. Currently, only generic resource control settings as described in - <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>7</manvolnum></citerefentry> are allowed. + <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry> are allowed. </para> <para>Unless <varname>DefaultDependencies=false</varname> diff --git a/man/systemd.snapshot.xml b/man/systemd.snapshot.xml index 96069c324a..4c1f40e814 100644 --- a/man/systemd.snapshot.xml +++ b/man/systemd.snapshot.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml index 1e9778bc2a..1d0fa1bd16 100644 --- a/man/systemd.socket.xml +++ b/man/systemd.socket.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd.special.xml b/man/systemd.special.xml index cf76aaf607..8db3050b58 100644 --- a/man/systemd.special.xml +++ b/man/systemd.special.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd.swap.xml b/man/systemd.swap.xml index c398677f43..d3ddc1ab4d 100644 --- a/man/systemd.swap.xml +++ b/man/systemd.swap.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd.target.xml b/man/systemd.target.xml index e790e9b77a..884177e9fa 100644 --- a/man/systemd.target.xml +++ b/man/systemd.target.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd.time.xml b/man/systemd.time.xml index da0729725d..570a20e5cf 100644 --- a/man/systemd.time.xml +++ b/man/systemd.time.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd.timer.xml b/man/systemd.timer.xml index 20890f2270..5f7e80425e 100644 --- a/man/systemd.timer.xml +++ b/man/systemd.timer.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml index 0aa1eeac77..8286cf3f78 100644 --- a/man/systemd.unit.xml +++ b/man/systemd.unit.xml @@ -64,20 +64,20 @@ <filename><replaceable>slice</replaceable>.slice</filename>, <filename><replaceable>scope</replaceable>.scope</filename></para> - <para><literallayout><filename>/etc/systemd/system/*</filename> + <para><literallayout><filename>&pkgsysconfdir;/system/*</filename> <filename>/run/systemd/system/*</filename> -<filename>/usr/lib/systemd/system/*</filename> +<filename>&rootlibexecdir;/system/*</filename> <filename>...</filename> </literallayout></para> <para><literallayout><filename>$XDG_CONFIG_HOME/systemd/user/*</filename> <filename>$HOME/.config/systemd/user/*</filename> -<filename>/etc/systemd/user/*</filename> +<filename>&pkgsysconfdir;/user/*</filename> <filename>$XDG_RUNTIME_DIR/systemd/user/*</filename> <filename>/run/systemd/user/*</filename> <filename>$XDG_DATA_HOME/systemd/user/*</filename> <filename>$HOME/.local/share/systemd/user/*</filename> -<filename>/usr/lib/systemd/user/*</filename> +<filename>&rootlibexecdir;/user/*</filename> <filename>...</filename> </literallayout></para> </refsynopsisdiv> @@ -287,7 +287,7 @@ </thead> <tbody> <row> - <entry><filename>/etc/systemd/system</filename></entry> + <entry><filename>&pkgsysconfdir;/system</filename></entry> <entry>Local configuration</entry> </row> <row> @@ -295,7 +295,7 @@ <entry>Runtime units</entry> </row> <row> - <entry><filename>/usr/lib/systemd/system</filename></entry> + <entry><filename>&rootlibexecdir;/system</filename></entry> <entry>Units of installed packages</entry> </row> </tbody> @@ -326,7 +326,7 @@ <entry>User configuration (only used when $XDG_CONFIG_HOME is not set)</entry> </row> <row> - <entry><filename>/etc/systemd/user</filename></entry> + <entry><filename>&pkgsysconfdir;/user</filename></entry> <entry>Local configuration</entry> </row> <row> @@ -346,7 +346,7 @@ <entry>Units of packages that have been installed in the home directory (only used when $XDG_DATA_HOME is not set)</entry> </row> <row> - <entry><filename>/usr/lib/systemd/user</filename></entry> + <entry><filename>&rootlibexecdir;/user</filename></entry> <entry>Units of packages that have been installed system-wide</entry> </row> </tbody> @@ -1296,7 +1296,7 @@ ExecStart=/usr/sbin/foo-daemon <para>After running <command>systemctl enable</command>, a symlink - <filename>/etc/systemd/system/multi-user.target.wants/foo.service</filename> + <filename>&pkgsysconfdir;/system/multi-user.target.wants/foo.service</filename> linking to the actual unit will be created. It tells systemd to pull in the unit when starting <filename>multi-user.target</filename>. The inverse @@ -1309,11 +1309,11 @@ ExecStart=/usr/sbin/foo-daemon <para>There are two methods of overriding vendor settings in unit files: copying the unit file from - <filename>/usr/lib/systemd/system</filename> to - <filename>/etc/systemd/system</filename> and modifying the + <filename>&rootlibexecdir;/system</filename> to + <filename>&pkgsysconfdir;/system</filename> and modifying the chosen settings. Alternatively, one can create a directory named <filename><replaceable>unit</replaceable>.d/</filename> within - <filename>/etc/systemd/system</filename> and place a drop-in + <filename>&pkgsysconfdir;/system</filename> and place a drop-in file <filename><replaceable>name</replaceable>.conf</filename> there that only changes the specific settings one is interested in. Note that multiple such drop-in files are read if @@ -1343,7 +1343,7 @@ ExecStart=/usr/sbin/foo-daemon load paths for further details.</para> <para>Suppose there is a vendor-supplied unit - <filename>/usr/lib/systemd/system/httpd.service</filename> with + <filename>&rootlibexecdir;/system/httpd.service</filename> with the following contents:</para> <programlisting>[Unit] @@ -1375,7 +1375,7 @@ WantedBy=multi-user.target</programlisting> the niceness of the service to its default value of 0.</para> <para>The first possibility is to copy the unit file to - <filename>/etc/systemd/system/httpd.service</filename> and + <filename>&pkgsysconfdir;/system/httpd.service</filename> and change the chosen settings:</para> <programlisting>[Unit] @@ -1395,7 +1395,7 @@ WantedBy=multi-user.target</programlisting> <para>Alternatively, the administrator could create a drop-in file - <filename>/etc/systemd/system/httpd.service.d/local.conf</filename> + <filename>&pkgsysconfdir;/system/httpd.service.d/local.conf</filename> with the following contents:</para> <programlisting>[Unit] diff --git a/man/systemd.xml b/man/systemd.xml index 4556d56969..5fa65a3631 100644 --- a/man/systemd.xml +++ b/man/systemd.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -438,7 +441,7 @@ by <command>pkg-config systemd --variable=systemdsystemunitdir</command>. Other directories checked are <filename>/usr/local/lib/systemd/system</filename> - and <filename>/usr/lib/systemd/system</filename>. User + and <filename>&rootlibexecdir;/system</filename>. User configuration always takes precedence. <command>pkg-config systemd --variable=systemdsystemconfdir</command> returns the path of the system configuration directory. Packages should diff --git a/man/sysusers.d.xml b/man/sysusers.d.xml index 99aa07a1cc..3085f3dd01 100644 --- a/man/sysusers.d.xml +++ b/man/sysusers.d.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/telinit.xml b/man/telinit.xml index 02d31fbd46..ec7e8eace4 100644 --- a/man/telinit.xml +++ b/man/telinit.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/timedatectl.xml b/man/timedatectl.xml index 2d42b41d5e..d7bd052eff 100644 --- a/man/timedatectl.xml +++ b/man/timedatectl.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -210,13 +213,13 @@ Password: ******** <programlisting>$ systemctl status systemd-timesyncd.service ● systemd-timesyncd.service - Network Time Synchronization - Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled) + Loaded: loaded (&rootlibexecdir;/system/systemd-timesyncd.service; enabled) Active: active (running) since Mo 2015-03-30 14:20:38 CEST; 5s ago Docs: man:systemd-timesyncd.service(8) Main PID: 595 (systemd-timesyn) Status: "Using Time Server 216.239.38.15:123 (time4.google.com)." CGroup: /system.slice/systemd-timesyncd.service - └─595 /usr/lib/systemd/systemd-timesyncd + └─595 &rootlibexecdir;/systemd-timesyncd ...</programlisting> </para> </refsect1> diff --git a/man/timesyncd.conf.xml b/man/timesyncd.conf.xml index 89a651c662..c297d3254c 100644 --- a/man/timesyncd.conf.xml +++ b/man/timesyncd.conf.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -49,10 +52,10 @@ </refnamediv> <refsynopsisdiv> - <para><filename>/etc/systemd/timesyncd.conf</filename></para> - <para><filename>/etc/systemd/timesyncd.conf.d/*.conf</filename></para> + <para><filename>&pkgsysconfdir;/timesyncd.conf</filename></para> + <para><filename>&pkgsysconfdir;/timesyncd.conf.d/*.conf</filename></para> <para><filename>/run/systemd/timesyncd.conf.d/*.conf</filename></para> - <para><filename>/usr/lib/systemd/timesyncd.conf.d/*.conf</filename></para> + <para><filename>&rootlibexecdir;/timesyncd.conf.d/*.conf</filename></para> </refsynopsisdiv> <refsect1> diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml index 8d3ed37ae3..c37de65229 100644 --- a/man/tmpfiles.d.xml +++ b/man/tmpfiles.d.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!--*-nxml-*--> -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/udev.conf.xml b/man/udev.conf.xml index e104e53f5d..a10cc3cebe 100644 --- a/man/udev.conf.xml +++ b/man/udev.conf.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. diff --git a/man/udev.xml b/man/udev.xml index d1a4f614cf..d5d8a17cdb 100644 --- a/man/udev.xml +++ b/man/udev.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <refentry id="udev"> <refentryinfo> @@ -55,17 +58,17 @@ <refsect1><title>Rules Files</title> <para>The udev rules are read from the files located in the - system rules directory <filename>/usr/lib/udev/rules.d</filename>, + system rules directory <filename>&udevlibexecdir;/rules.d</filename>, the volatile runtime directory <filename>/run/udev/rules.d</filename> and the local administration directory <filename>/etc/udev/rules.d</filename>. All rules files are collectively sorted and processed in lexical order, regardless of the directories in which they live. However, files with identical filenames replace each other. Files in <filename>/etc</filename> have the highest priority, files in <filename>/run</filename> take precedence - over files with the same name in <filename>/usr/lib</filename>. This can be + over files with the same name in <filename>&rootprefix;/lib</filename>. This can be used to override a system-supplied rules file with a local file if needed; a symlink in <filename>/etc</filename> with the same name as a rules file in - <filename>/usr/lib</filename>, pointing to <filename>/dev/null</filename>, + <filename>&rootprefix;/lib</filename>, pointing to <filename>/dev/null</filename>, disables the rules file entirely. Rule files must have the extension <filename>.rules</filename>; other extensions are ignored.</para> @@ -421,7 +424,7 @@ <listitem> <para>Execute an external program specified as the assigned value. If no absolute path is given, the program is expected - to live in <filename>/usr/lib/udev</filename>; otherwise, the + to live in <filename>&udevlibexecdir;</filename>; otherwise, the absolute path must be specified.</para> <para>This is the default if no <replaceable>type</replaceable> is specified.</para> diff --git a/man/udevadm.xml b/man/udevadm.xml index 8ef9e23aa2..c7ef7279c9 100644 --- a/man/udevadm.xml +++ b/man/udevadm.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <refentry id="udevadm"> <refentryinfo> diff --git a/man/user-system-options.xml b/man/user-system-options.xml index 8616c54249..1e415ddd4c 100644 --- a/man/user-system-options.xml +++ b/man/user-system-options.xml @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" - "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <variablelist> <varlistentry id='user'> diff --git a/man/vconsole.conf.xml b/man/vconsole.conf.xml index 27196d44e9..1c3bdd2e54 100644 --- a/man/vconsole.conf.xml +++ b/man/vconsole.conf.xml @@ -1,6 +1,9 @@ <?xml version='1.0'?> <!--*-nxml-*--> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "custom-entities.ent" > +%entities; +]> <!-- This file is part of systemd. @@ -528,5 +528,5 @@ msgstr "" #, c-format msgid "Checking in progress on %d disk (%3.1f%% complete)" msgid_plural "Checking in progress on %d disks (%3.1f%% complete)" -msgstr[0] "Comprobando progreso en %d disco (%3.1f%% completado)" -msgstr[1] "Comprobando progreso en %d discos (%3.1f%% completado)" +msgstr[0] "Comprobando progreso en %d disco (%3.1f %% completado)" +msgstr[1] "Comprobando progreso en %d discos (%3.1f %% completado)" diff --git a/rules/60-block.rules b/rules/60-block.rules index de41499cb7..a69d648023 100644 --- a/rules/60-block.rules +++ b/rules/60-block.rules @@ -8,4 +8,4 @@ ACTION=="add", SUBSYSTEM=="module", KERNEL=="block", ATTR{parameters/events_dfl_ ACTION=="change", SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST=="block", ATTR{block/*/uevent}="change" # watch metadata changes, caused by tools closing the device node which was opened for writing -ACTION=="add", SUBSYSTEM=="block", KERNEL!="loop*|nvme*|sd*|vd*", OPTIONS+="watch" +ACTION!="remove", SUBSYSTEM=="block", KERNEL=="loop*|nvme*|sd*|vd*", OPTIONS+="watch" diff --git a/rules/60-persistent-storage.rules b/rules/60-persistent-storage.rules index 3f803ceb9a..64c5f1cfdd 100644 --- a/rules/60-persistent-storage.rules +++ b/rules/60-persistent-storage.rules @@ -6,7 +6,7 @@ ACTION=="remove", GOTO="persistent_storage_end" SUBSYSTEM!="block", GOTO="persistent_storage_end" -KERNEL!="loop*|mmcblk*[0-9]|msblk*[0-9]|mspblk*[0-9]|nvme*|sd*|sr*|vd*", GOTO="persistent_storage_end" +KERNEL!="loop*|mmcblk*[0-9]|msblk*[0-9]|mspblk*[0-9]|nvme*|sd*|sr*|vd*|bcache*|xvd*", GOTO="persistent_storage_end" # ignore partitions that span the entire disk TEST=="whole_disk", GOTO="persistent_storage_end" diff --git a/shell-completion/zsh/_bootctl b/shell-completion/zsh/_bootctl index 7d2453cc2c..0e1b0a5562 100644 --- a/shell-completion/zsh/_bootctl +++ b/shell-completion/zsh/_bootctl @@ -4,7 +4,10 @@ { local -a _bootctl_cmds _bootctl_cmds=( - "status:Show current firmware and boot settings" + "status:Show status of installed systemd-boot and EFI variables" + "install:Install systemd-boot to the ESP and EFI variables" + "update:Update systemd-boot in the ESP and EFI variables" + "remove:Remove systemd-boot from the ESP and EFI variables" ) if (( CURRENT == 1 )); then _describe -t commands 'bootctl command' _bootctl_cmds || compadd "$@" @@ -22,4 +25,6 @@ _arguments \ {-h,--help}'[Prints a short help text and exits.]' \ '--version[Prints a short version string and exits.]' \ + '--path=[Path to the EFI System Partition (ESP)]:path:_directories' \ + '--no-variables[Do not touch EFI variables]' \ '*::bootctl command:_bootctl_command' diff --git a/shell-completion/zsh/_systemctl.in b/shell-completion/zsh/_systemctl.in index 1dc6406beb..17736de01c 100644 --- a/shell-completion/zsh/_systemctl.in +++ b/shell-completion/zsh/_systemctl.in @@ -65,7 +65,7 @@ if (( CURRENT == 1 )); then _describe -t commands 'systemctl command' _systemctl_cmds || compadd "$@" else - local curcontext="$curcontext" + local curcontext="$curcontext" expl cmd="${${_systemctl_cmds[(r)$words[1]:*]%%:*}}" # Deal with any aliases @@ -93,9 +93,7 @@ __systemctl() { - local -a _modes - _modes=("--user" "--system") - systemctl ${words:*_modes} --full --no-legend --no-pager "$@" + systemctl $_sys_service_mgr --full --no-legend --no-pager "$@" } @@ -174,7 +172,8 @@ for fun in is-active is-failed is-enabled status show cat mask preset help list- (( $+functions[_systemctl_$fun] )) || _systemctl_$fun() { _systemctl_really_all_units - compadd "$@" -a - _sys_really_all_units + _wanted systemd-units expl unit \ + compadd "$@" -a - _sys_really_all_units } done @@ -182,34 +181,39 @@ done (( $+functions[_systemctl_disable] )) || _systemctl_disable() { local _sys_unit_state; _systemctl_unit_state - compadd "$@" - ${(k)_sys_unit_state[(R)enabled]} + _wanted systemd-units expl 'enabled unit' \ + compadd "$@" - ${(k)_sys_unit_state[(R)enabled]} } (( $+functions[_systemctl_reenable] )) || _systemctl_reenable() { local _sys_unit_state; _systemctl_unit_state - compadd "$@" - ${(k)_sys_unit_state[(R)(enabled|disabled)]} $(_systemctl_get_template_names) + _wanted systemd-units expl 'enabled/disabled unit' \ + compadd "$@" - ${(k)_sys_unit_state[(R)(enabled|disabled)]} $(_systemctl_get_template_names) } # Completion functions for DISABLED_UNITS (( $+functions[_systemctl_enable] )) || _systemctl_enable() { local _sys_unit_state; _systemctl_unit_state - compadd "$@" - ${(k)_sys_unit_state[(R)disabled]} $(_systemctl_get_template_names) + _wanted systemd-units expl 'disabled unit' \ + compadd "$@" - ${(k)_sys_unit_state[(R)disabled]} $(_systemctl_get_template_names) } # Completion functions for FAILED_UNITS (( $+functions[_systemctl_reset-failed] )) || _systemctl_reset-failed() { local _sys_failed_units; _systemctl_failed_units - compadd "$@" -a - _sys_failed_units || _message "no failed unit found" + _wanted systemd-units expl 'failed unit' \ + compadd "$@" -a - _sys_failed_units || _message "no failed unit found" } # Completion functions for STARTABLE_UNITS (( $+functions[_systemctl_start] )) || _systemctl_start() { local _sys_startable_units; _systemctl_startable_units - compadd "$@" - ${_sys_startable_units[*]} $(_systemctl_get_template_names) + _wanted systemd-units expl 'startable unit' \ + compadd "$@" - ${_sys_startable_units[*]} $(_systemctl_get_template_names) } # Completion functions for STOPPABLE_UNITS @@ -217,8 +221,9 @@ for fun in stop kill try-restart condrestart ; do (( $+functions[_systemctl_$fun] )) || _systemctl_$fun() { local _sys_active_units; _systemctl_active_units - compadd "$@" - $( _filter_units_by_property CanStop yes \ - ${_sys_active_units[*]} ) + _wanted systemd-units expl 'stoppable unit' \ + compadd "$@" - $( _filter_units_by_property CanStop yes \ + ${_sys_active_units[*]} ) } done @@ -226,8 +231,9 @@ done (( $+functions[_systemctl_isolate] )) || _systemctl_isolate() { _systemctl_all_units - compadd "$@" - $( _filter_units_by_property AllowIsolate yes \ - ${_sys_all_units[*]} ) + _wanted systemd-units expl 'isolatable unit' \ + compadd "$@" - $( _filter_units_by_property AllowIsolate yes \ + ${_sys_all_units[*]} ) } # Completion functions for RELOADABLE_UNITS @@ -235,8 +241,9 @@ for fun in reload reload-or-try-restart force-reload ; do (( $+functions[_systemctl_$fun] )) || _systemctl_$fun() { local _sys_active_units; _systemctl_active_units - compadd "$@" - $( _filter_units_by_property CanReload yes \ - ${_sys_active_units[*]} ) + _wanted systemd-units expl 'reloadable unit' \ + compadd "$@" - $( _filter_units_by_property CanReload yes \ + ${_sys_active_units[*]} ) } done @@ -245,7 +252,8 @@ for fun in restart reload-or-restart ; do (( $+functions[_systemctl_$fun] )) || _systemctl_$fun() { local _sys_restartable_units; _systemctl_restartable_units - compadd "$@" - ${_sys_restartable_units[*]} $(_systemctl_get_template_names) + _wanted systemd-units expl 'restartable unit' \ + compadd "$@" - ${_sys_restartable_units[*]} $(_systemctl_get_template_names) } done @@ -253,28 +261,32 @@ done (( $+functions[_systemctl_unmask] )) || _systemctl_unmask() { local _sys_unit_state; _systemctl_unit_state - compadd "$@" - ${(k)_sys_unit_state[(R)masked]} || _message "no masked units found" + _wanted systemd-units expl 'masked unit' \ + compadd "$@" - ${(k)_sys_unit_state[(R)masked]} || _message "no masked units found" } # Completion functions for JOBS (( $+functions[_systemctl_cancel] )) || _systemctl_cancel() { - compadd "$@" - ${${(f)"$(__systemctl list-jobs)"}%% *} || - _message "no jobs found" + _wanted systemd-jobs expl job \ + compadd "$@" - ${${(f)"$(__systemctl list-jobs)"}%% *} || + _message "no jobs found" } # Completion functions for SNAPSHOTS (( $+functions[_systemctl_delete] )) || _systemctl_delete() { - compadd "$@" - ${${(f)"$(__systemctl list-units --type snapshot --all)"}%% *} || - _message "no snapshots found" + _wanted systemd-snapshots expl snapshot \ + compadd "$@" - ${${(f)"$(__systemctl list-units --type snapshot --all)"}%% *} || + _message "no snapshots found" } # Completion functions for TARGETS (( $+functions[_systemctl_set-default] )) || _systemctl_set-default() { - compadd "$@" - ${${(f)"$(__systemctl list-unit-files --type target --all)"}%% *} || - _message "no targets found" + _wanted systemd-targets expl target \ + compadd "$@" - ${${(f)"$(__systemctl list-unit-files --type target --all)"}%% *} || + _message "no targets found" } # Completion functions for ENVS @@ -286,8 +298,8 @@ for fun in set-environment unset-environment ; do if [[ "${fun}" = "set-environment" ]]; then suf='-S=' fi - - compadd "$@" ${suf} - ${${(f)"$(systemctl show-environment)"}%%=*} + _wanted systemd-environment expl 'environment variable' \ + compadd "$@" ${suf} - ${${(f)"$(systemctl show-environment)"}%%=*} } done @@ -355,6 +367,8 @@ _job_modes() { _values -s , "${_modes[@]}" } +local -a _modes; _modes=("--user" "--system") +local _sys_service_mgr=${${words:*_modes}[(R)(${(j.|.)_modes})]:---system} _arguments -s \ {-h,--help}'[Show help]' \ '--version[Show package version]' \ diff --git a/src/console/consoled-manager.c b/src/console/consoled-manager.c index b288239cae..e560dcf524 100644 --- a/src/console/consoled-manager.c +++ b/src/console/consoled-manager.c @@ -21,16 +21,17 @@ #include <errno.h> #include <stdlib.h> -#include "consoled.h" -#include "grdev.h" -#include "idev.h" -#include "log.h" #include "sd-bus.h" #include "sd-event.h" #include "sd-login.h" +#include "log.h" +#include "signal-util.h" +#include "util.h" +#include "consoled.h" +#include "idev.h" +#include "grdev.h" #include "sysview.h" #include "unifont.h" -#include "util.h" int manager_new(Manager **out) { _cleanup_(manager_freep) Manager *m = NULL; diff --git a/src/console/consoled.c b/src/console/consoled.c index 26dd068f5c..9f69e8983f 100644 --- a/src/console/consoled.c +++ b/src/console/consoled.c @@ -21,9 +21,10 @@ #include <errno.h> #include <stdlib.h> -#include "consoled.h" -#include "log.h" #include "sd-daemon.h" +#include "log.h" +#include "signal-util.h" +#include "consoled.h" int main(int argc, char *argv[]) { _cleanup_(manager_freep) Manager *m = NULL; diff --git a/src/core/automount.c b/src/core/automount.c index 13f80c2abd..d847dc1629 100644 --- a/src/core/automount.c +++ b/src/core/automount.c @@ -747,7 +747,7 @@ static int automount_start(Unit *u) { assert(a); assert(a->state == AUTOMOUNT_DEAD || a->state == AUTOMOUNT_FAILED); - if (path_is_mount_point(a->where, false) > 0) { + if (path_is_mount_point(a->where, 0) > 0) { log_unit_error(u, "Path %s is already a mount point, refusing start.", a->where); return -EEXIST; } diff --git a/src/core/busname.c b/src/core/busname.c index 17b85134e8..11f3b98009 100644 --- a/src/core/busname.c +++ b/src/core/busname.c @@ -22,15 +22,16 @@ #include <sys/mman.h> #include "special.h" +#include "formats-util.h" +#include "signal-util.h" #include "bus-kernel.h" #include "bus-internal.h" #include "bus-util.h" -#include "service.h" #include "kdbus.h" #include "bus-policy.h" +#include "service.h" #include "dbus-busname.h" #include "busname.h" -#include "formats-util.h" static const UnitActiveState state_translation_table[_BUSNAME_STATE_MAX] = { [BUSNAME_DEAD] = UNIT_INACTIVE, diff --git a/src/core/dbus-kill.c b/src/core/dbus-kill.c index fb29e147cb..3b8116281c 100644 --- a/src/core/dbus-kill.c +++ b/src/core/dbus-kill.c @@ -19,9 +19,11 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>. ***/ +#include "signal-util.h" +#include "bus-util.h" + #include "kill.h" #include "dbus-kill.h" -#include "bus-util.h" static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_kill_mode, kill_mode, KillMode); diff --git a/src/core/execute.c b/src/core/execute.c index e88a2dc0ed..4120493bda 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -49,14 +49,13 @@ #include <sys/apparmor.h> #endif +#include "sd-messages.h" #include "rm-rf.h" -#include "execute.h" #include "strv.h" #include "macro.h" #include "capability.h" #include "util.h" #include "log.h" -#include "sd-messages.h" #include "ioprio.h" #include "securebits.h" #include "namespace.h" @@ -79,6 +78,7 @@ #include "formats-util.h" #include "process-util.h" #include "terminal-util.h" +#include "signal-util.h" #ifdef HAVE_APPARMOR #include "apparmor-util.h" @@ -88,6 +88,8 @@ #include "seccomp-util.h" #endif +#include "execute.h" + #define IDLE_TIMEOUT_USEC (5*USEC_PER_SEC) #define IDLE_TIMEOUT2_USEC (1*USEC_PER_SEC) diff --git a/src/core/ima-setup.c b/src/core/ima-setup.c index 7721b3ecaf..4d8b638115 100644 --- a/src/core/ima-setup.c +++ b/src/core/ima-setup.c @@ -24,9 +24,10 @@ #include <unistd.h> #include <errno.h> #include <fcntl.h> +#include <sys/stat.h> +#include <sys/mman.h> #include "ima-setup.h" -#include "copy.h" #include "util.h" #include "log.h" @@ -39,6 +40,8 @@ int ima_setup(void) { #ifdef HAVE_IMA _cleanup_close_ int policyfd = -1, imafd = -1; + struct stat st; + char *policy; if (access(IMA_SECFS_DIR, F_OK) < 0) { log_debug("IMA support is disabled in the kernel, ignoring."); @@ -63,12 +66,20 @@ int ima_setup(void) { return 0; } - r = copy_bytes(policyfd, imafd, (off_t) -1, false); + if (fstat(policyfd, &st) < 0) + return log_error_errno(errno, "Failed to fstat "IMA_POLICY_PATH": %m"); + + policy = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, policyfd, 0); + if (policy == MAP_FAILED) + return log_error_errno(errno, "Failed to mmap "IMA_POLICY_PATH": %m"); + + r = loop_write(imafd, policy, (size_t) st.st_size, false); if (r < 0) log_error_errno(r, "Failed to load the IMA custom policy file "IMA_POLICY_PATH": %m"); else log_info("Successfully loaded the IMA custom policy "IMA_POLICY_PATH"."); + munmap(policy, st.st_size); #endif /* HAVE_IMA */ return r; } diff --git a/src/core/kill.c b/src/core/kill.c index 60a510eae6..2de71c6bf9 100644 --- a/src/core/kill.c +++ b/src/core/kill.c @@ -19,9 +19,9 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>. ***/ - -#include "kill.h" #include "util.h" +#include "signal-util.h" +#include "kill.h" void kill_context_init(KillContext *c) { assert(c); diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index 9415e92c90..df5fe6fb32 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -52,6 +52,7 @@ #include "errno-list.h" #include "af-list.h" #include "cap-list.h" +#include "signal-util.h" #include "bus-internal.h" #ifdef HAVE_SECCOMP @@ -609,7 +610,7 @@ int config_parse_exec( else skip = strneq(word, "\\;", MAX(l, 1U)); - r = cunescape_length(word + skip, l - skip, 0, &c); + r = cunescape_length(word + skip, l - skip, UNESCAPE_RELAX, &c); if (r < 0) { log_syntax(unit, LOG_ERR, filename, line, r, "Failed to unescape command line, ignoring: %s", rvalue); r = 0; diff --git a/src/core/machine-id-setup.c b/src/core/machine-id-setup.c index e083c5b347..b3d22840cf 100644 --- a/src/core/machine-id-setup.c +++ b/src/core/machine-id-setup.c @@ -297,7 +297,7 @@ int machine_id_commit(const char *root) { etc_machine_id = path_kill_slashes(x); } - r = path_is_mount_point(etc_machine_id, false); + r = path_is_mount_point(etc_machine_id, 0); if (r < 0) return log_error_errno(r, "Failed to determine whether %s is a mount point: %m", etc_machine_id); if (r == 0) { diff --git a/src/core/main.c b/src/core/main.c index 212ab901b1..674e47e788 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -60,6 +60,10 @@ #include "bus-error.h" #include "bus-util.h" #include "selinux-util.h" +#include "formats-util.h" +#include "process-util.h" +#include "terminal-util.h" +#include "signal-util.h" #include "manager.h" #include "dbus-manager.h" #include "load-fragment.h" @@ -72,9 +76,6 @@ #include "ima-setup.h" #include "smack-setup.h" #include "kmod-setup.h" -#include "formats-util.h" -#include "process-util.h" -#include "terminal-util.h" static enum { ACTION_RUN, diff --git a/src/core/manager.c b/src/core/manager.c index b931b0d71d..a1c54339ea 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -40,8 +40,6 @@ #include "sd-daemon.h" #include "sd-messages.h" -#include "manager.h" -#include "transaction.h" #include "hashmap.h" #include "macro.h" #include "strv.h" @@ -65,14 +63,17 @@ #include "bus-common-errors.h" #include "bus-error.h" #include "bus-util.h" -#include "dbus.h" -#include "dbus-unit.h" -#include "dbus-job.h" -#include "dbus-manager.h" #include "bus-kernel.h" #include "time-util.h" #include "process-util.h" #include "terminal-util.h" +#include "signal-util.h" +#include "dbus.h" +#include "dbus-unit.h" +#include "dbus-job.h" +#include "dbus-manager.h" +#include "manager.h" +#include "transaction.h" /* Initial delay and the interval for printing status messages about running jobs */ #define JOBS_IN_PROGRESS_WAIT_USEC (5*USEC_PER_SEC) @@ -740,9 +741,6 @@ static int manager_setup_kdbus(Manager *m) { if (!is_kdbus_available()) return -ESOCKTNOSUPPORT; - if (m->running_as == MANAGER_SYSTEM && detect_container(NULL) <= 0) - bus_kernel_fix_attach_mask(); - m->kdbus_fd = bus_kernel_create_bus( m->running_as == MANAGER_SYSTEM ? "system" : "user", m->running_as == MANAGER_SYSTEM, &p); diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c index ba96741e95..c35248eeae 100644 --- a/src/core/mount-setup.c +++ b/src/core/mount-setup.c @@ -156,7 +156,7 @@ static int mount_one(const MountPoint *p, bool relabel) { if (relabel) label_fix(p->where, true, true); - r = path_is_mount_point(p->where, true); + r = path_is_mount_point(p->where, AT_SYMLINK_FOLLOW); if (r < 0 && r != -ENOENT) return r; if (r > 0) diff --git a/src/core/mount.c b/src/core/mount.c index ba1dcf1e85..851b41351e 100644 --- a/src/core/mount.c +++ b/src/core/mount.c @@ -1522,6 +1522,9 @@ static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) { options = mnt_fs_get_options(fs); fstype = mnt_fs_get_fstype(fs); + if (!device || !path) + continue; + if (cunescape(device, UNESCAPE_RELAX, &d) < 0) return log_oom(); diff --git a/src/core/namespace.c b/src/core/namespace.c index 7d0b7e7e84..01a817bf23 100644 --- a/src/core/namespace.c +++ b/src/core/namespace.c @@ -499,7 +499,7 @@ int setup_namespace( if (protect_system != PROTECT_SYSTEM_NO) { const char *usr_dir, *boot_dir, *etc_dir; - usr_dir = prefix_roota(root_directory, "/home"); + usr_dir = prefix_roota(root_directory, "/usr"); boot_dir = prefix_roota(root_directory, "/boot"); boot_dir = strjoina("-", boot_dir); etc_dir = prefix_roota(root_directory, "/etc"); diff --git a/src/core/service.c b/src/core/service.c index 07347b99a4..c7e65772ea 100644 --- a/src/core/service.c +++ b/src/core/service.c @@ -47,6 +47,7 @@ #include "bus-kernel.h" #include "formats-util.h" #include "process-util.h" +#include "signal-util.h" static const UnitActiveState state_translation_table[_SERVICE_STATE_MAX] = { [SERVICE_DEAD] = UNIT_INACTIVE, diff --git a/src/core/socket.c b/src/core/socket.c index 17b8a5059d..fc5eb1464a 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -47,8 +47,9 @@ #include "selinux-util.h" #include "dbus-socket.h" #include "unit.h" -#include "socket.h" #include "formats-util.h" +#include "signal-util.h" +#include "socket.h" static const UnitActiveState state_translation_table[_SOCKET_STATE_MAX] = { [SOCKET_DEAD] = UNIT_INACTIVE, diff --git a/src/efi-boot-generator/efi-boot-generator.c b/src/efi-boot-generator/efi-boot-generator.c index 42b21f57de..e6b15c9bb0 100644 --- a/src/efi-boot-generator/efi-boot-generator.c +++ b/src/efi-boot-generator/efi-boot-generator.c @@ -68,7 +68,7 @@ int main(int argc, char *argv[]) { return EXIT_SUCCESS; } - r = path_is_mount_point("/boot", true); + r = path_is_mount_point("/boot", AT_SYMLINK_FOLLOW); if (r > 0) { log_debug("/boot is already a mount point, exiting."); return EXIT_SUCCESS; diff --git a/src/fsck/fsck.c b/src/fsck/fsck.c index 9bbe9ff673..f0e5c5f239 100644 --- a/src/fsck/fsck.c +++ b/src/fsck/fsck.c @@ -34,6 +34,7 @@ #include "util.h" #include "process-util.h" +#include "signal-util.h" #include "special.h" #include "bus-util.h" #include "bus-error.h" diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c index b192526186..b46e160888 100644 --- a/src/gpt-auto-generator/gpt-auto-generator.c +++ b/src/gpt-auto-generator/gpt-auto-generator.c @@ -297,7 +297,7 @@ static int probe_and_add_mount( assert(where); assert(description); - if (path_is_mount_point(where, true) <= 0 && + if (path_is_mount_point(where, AT_SYMLINK_FOLLOW) <= 0 && dir_is_empty(where) <= 0) { log_debug("%s already populated, ignoring.", where); return 0; diff --git a/src/gudev/.gitignore b/src/gudev/.gitignore deleted file mode 100644 index 4577903c40..0000000000 --- a/src/gudev/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -gudev-1.0.pc -gudevenumtypes.c -gudevenumtypes.h -gudevmarshal.c -gudevmarshal.h -GUdev-1.0.gir -GUdev-1.0.typelib diff --git a/src/gudev/Makefile b/src/gudev/Makefile deleted file mode 120000 index d0b0e8e008..0000000000 --- a/src/gudev/Makefile +++ /dev/null @@ -1 +0,0 @@ -../Makefile
\ No newline at end of file diff --git a/src/gudev/gjs-example.js b/src/gudev/gjs-example.js deleted file mode 100755 index 5586fd6a61..0000000000 --- a/src/gudev/gjs-example.js +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env gjs-console - -// This currently depends on the following patches to gjs -// -// http://bugzilla.gnome.org/show_bug.cgi?id=584558 -// http://bugzilla.gnome.org/show_bug.cgi?id=584560 -// http://bugzilla.gnome.org/show_bug.cgi?id=584568 - -const GUdev = imports.gi.GUdev; -const Mainloop = imports.mainloop; - -function print_device (device) { - print (" subsystem: " + device.get_subsystem ()); - print (" devtype: " + device.get_devtype ()); - print (" name: " + device.get_name ()); - print (" number: " + device.get_number ()); - print (" sysfs_path: " + device.get_sysfs_path ()); - print (" driver: " + device.get_driver ()); - print (" action: " + device.get_action ()); - print (" seqnum: " + device.get_seqnum ()); - print (" device type: " + device.get_device_type ()); - print (" device number: " + device.get_device_number ()); - print (" device file: " + device.get_device_file ()); - print (" device file symlinks: " + device.get_device_file_symlinks ()); - print (" foo: " + device.get_sysfs_attr_as_strv ("stat")); - var keys = device.get_property_keys (); - for (var n = 0; n < keys.length; n++) { - print (" " + keys[n] + "=" + device.get_property (keys[n])); - } -} - -function on_uevent (client, action, device) { - print ("action " + action + " on device " + device.get_sysfs_path()); - print_device (device); - print (""); -} - -var client = new GUdev.Client ({subsystems: ["block", "usb/usb_interface"]}); -client.connect ("uevent", on_uevent); - -var block_devices = client.query_by_subsystem ("block"); -for (var n = 0; n < block_devices.length; n++) { - print ("block device: " + block_devices[n].get_device_file ()); -} - -var d; - -d = client.query_by_device_number (GUdev.DeviceType.BLOCK, 0x0810); -if (d == null) { - print ("query_by_device_number 0x810 -> null"); -} else { - print ("query_by_device_number 0x810 -> " + d.get_device_file ()); - var dd = d.get_parent_with_subsystem ("usb", null); - print_device (dd); - print ("--------------------------------------------------------------------------"); - while (d != null) { - print_device (d); - print (""); - d = d.get_parent (); - } -} - -d = client.query_by_sysfs_path ("/sys/block/sda/sda1"); -print ("query_by_sysfs_path (\"/sys/block/sda1\") -> " + d.get_device_file ()); - -d = client.query_by_subsystem_and_name ("block", "sda2"); -print ("query_by_subsystem_and_name (\"block\", \"sda2\") -> " + d.get_device_file ()); - -d = client.query_by_device_file ("/dev/sda"); -print ("query_by_device_file (\"/dev/sda\") -> " + d.get_device_file ()); - -d = client.query_by_device_file ("/dev/block/8:0"); -print ("query_by_device_file (\"/dev/block/8:0\") -> " + d.get_device_file ()); - -Mainloop.run('udev-example'); diff --git a/src/gudev/gudev-1.0.pc.in b/src/gudev/gudev-1.0.pc.in deleted file mode 100644 index 058262d767..0000000000 --- a/src/gudev/gudev-1.0.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: gudev-1.0 -Description: GObject bindings for libudev -Version: @VERSION@ -Requires: glib-2.0, gobject-2.0 -Libs: -L${libdir} -lgudev-1.0 -Cflags: -I${includedir}/gudev-1.0 diff --git a/src/gudev/gudev.h b/src/gudev/gudev.h deleted file mode 100644 index 1dc42b11b7..0000000000 --- a/src/gudev/gudev.h +++ /dev/null @@ -1,32 +0,0 @@ -/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- - * - * Copyright (C) 2008 David Zeuthen <davidz@redhat.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __G_UDEV_H__ -#define __G_UDEV_H__ - -#define _GUDEV_INSIDE_GUDEV_H -#include <gudev/gudevenums.h> -#include <gudev/gudevenumtypes.h> -#include <gudev/gudevtypes.h> -#include <gudev/gudevclient.h> -#include <gudev/gudevdevice.h> -#include <gudev/gudevenumerator.h> -#undef _GUDEV_INSIDE_GUDEV_H - -#endif /* __G_UDEV_H__ */ diff --git a/src/gudev/gudevclient.c b/src/gudev/gudevclient.c deleted file mode 100644 index 8b9516cba8..0000000000 --- a/src/gudev/gudevclient.c +++ /dev/null @@ -1,533 +0,0 @@ -/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- - * - * Copyright (C) 2008-2010 David Zeuthen <davidz@redhat.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include <stdlib.h> -#include <string.h> -#include <sys/stat.h> - -#include "gudevclient.h" -#include "gudevdevice.h" -#include "gudevmarshal.h" -#include "gudevprivate.h" - -/** - * SECTION:gudevclient - * @short_description: Query devices and listen to uevents - * - * #GUdevClient is used to query information about devices on a Linux - * system from the Linux kernel and the udev device - * manager. - * - * Device information is retrieved from the kernel (through the - * <literal>sysfs</literal> filesystem) and the udev daemon (through a - * <literal>tmpfs</literal> filesystem) and presented through - * #GUdevDevice objects. This means that no blocking IO ever happens - * (in both cases, we are essentially just reading data from kernel - * memory) and as such there are no asynchronous versions of the - * provided methods. - * - * To get #GUdevDevice objects, use - * g_udev_client_query_by_subsystem(), - * g_udev_client_query_by_device_number(), - * g_udev_client_query_by_device_file(), - * g_udev_client_query_by_sysfs_path(), - * g_udev_client_query_by_subsystem_and_name() - * or the #GUdevEnumerator type. - * - * To listen to uevents, connect to the #GUdevClient::uevent signal. - */ - -struct _GUdevClientPrivate -{ - GSource *watch_source; - struct udev *udev; - struct udev_monitor *monitor; - - gchar **subsystems; -}; - -enum -{ - PROP_0, - PROP_SUBSYSTEMS, -}; - -enum -{ - UEVENT_SIGNAL, - LAST_SIGNAL, -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -G_DEFINE_TYPE (GUdevClient, g_udev_client, G_TYPE_OBJECT) - -/* ---------------------------------------------------------------------------------------------------- */ - -static gboolean -monitor_event (GIOChannel *source, - GIOCondition condition, - gpointer data) -{ - GUdevClient *client = (GUdevClient *) data; - GUdevDevice *device; - struct udev_device *udevice; - - if (client->priv->monitor == NULL) - goto out; - udevice = udev_monitor_receive_device (client->priv->monitor); - if (udevice == NULL) - goto out; - - device = _g_udev_device_new (udevice); - udev_device_unref (udevice); - g_signal_emit (client, - signals[UEVENT_SIGNAL], - 0, - g_udev_device_get_action (device), - device); - g_object_unref (device); - - out: - return TRUE; -} - -static void -g_udev_client_finalize (GObject *object) -{ - GUdevClient *client = G_UDEV_CLIENT (object); - - if (client->priv->watch_source != NULL) - { - g_source_destroy (client->priv->watch_source); - client->priv->watch_source = NULL; - } - - if (client->priv->monitor != NULL) - { - udev_monitor_unref (client->priv->monitor); - client->priv->monitor = NULL; - } - - if (client->priv->udev != NULL) - { - udev_unref (client->priv->udev); - client->priv->udev = NULL; - } - - g_strfreev (client->priv->subsystems); - - if (G_OBJECT_CLASS (g_udev_client_parent_class)->finalize != NULL) - G_OBJECT_CLASS (g_udev_client_parent_class)->finalize (object); -} - -static void -g_udev_client_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GUdevClient *client = G_UDEV_CLIENT (object); - - switch (prop_id) - { - case PROP_SUBSYSTEMS: - if (client->priv->subsystems != NULL) - g_strfreev (client->priv->subsystems); - client->priv->subsystems = g_strdupv (g_value_get_boxed (value)); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -g_udev_client_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GUdevClient *client = G_UDEV_CLIENT (object); - - switch (prop_id) - { - case PROP_SUBSYSTEMS: - g_value_set_boxed (value, client->priv->subsystems); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -g_udev_client_constructed (GObject *object) -{ - GUdevClient *client = G_UDEV_CLIENT (object); - GIOChannel *channel; - guint n; - - client->priv->udev = udev_new (); - - /* connect to event source */ - client->priv->monitor = udev_monitor_new_from_netlink (client->priv->udev, "udev"); - - //g_debug ("ss = %p", client->priv->subsystems); - - if (client->priv->subsystems != NULL) - { - /* install subsystem filters to only wake up for certain events */ - for (n = 0; client->priv->subsystems[n] != NULL; n++) - { - gchar *subsystem; - gchar *devtype; - gchar *s; - - subsystem = g_strdup (client->priv->subsystems[n]); - devtype = NULL; - - //g_debug ("s = '%s'", subsystem); - - s = strstr (subsystem, "/"); - if (s != NULL) - { - devtype = s + 1; - *s = '\0'; - } - - if (client->priv->monitor != NULL) - udev_monitor_filter_add_match_subsystem_devtype (client->priv->monitor, subsystem, devtype); - - g_free (subsystem); - } - - /* listen to events, and buffer them */ - if (client->priv->monitor != NULL) - { - udev_monitor_enable_receiving (client->priv->monitor); - channel = g_io_channel_unix_new (udev_monitor_get_fd (client->priv->monitor)); - client->priv->watch_source = g_io_create_watch (channel, G_IO_IN); - g_io_channel_unref (channel); - g_source_set_callback (client->priv->watch_source, (GSourceFunc) monitor_event, client, NULL); - g_source_attach (client->priv->watch_source, g_main_context_get_thread_default ()); - g_source_unref (client->priv->watch_source); - } - else - { - client->priv->watch_source = NULL; - } - } - - if (G_OBJECT_CLASS (g_udev_client_parent_class)->constructed != NULL) - G_OBJECT_CLASS (g_udev_client_parent_class)->constructed (object); -} - - -static void -g_udev_client_class_init (GUdevClientClass *klass) -{ - GObjectClass *gobject_class = (GObjectClass *) klass; - - gobject_class->constructed = g_udev_client_constructed; - gobject_class->set_property = g_udev_client_set_property; - gobject_class->get_property = g_udev_client_get_property; - gobject_class->finalize = g_udev_client_finalize; - - /** - * GUdevClient:subsystems: - * - * The subsystems to listen for uevents on. - * - * To listen for only a specific DEVTYPE for a given SUBSYSTEM, use - * "subsystem/devtype". For example, to only listen for uevents - * where SUBSYSTEM is usb and DEVTYPE is usb_interface, use - * "usb/usb_interface". - * - * If this property is %NULL, then no events will be reported. If - * it's the empty array, events from all subsystems will be - * reported. - */ - g_object_class_install_property (gobject_class, - PROP_SUBSYSTEMS, - g_param_spec_boxed ("subsystems", - "The subsystems to listen for changes on", - "The subsystems to listen for changes on", - G_TYPE_STRV, - G_PARAM_CONSTRUCT_ONLY | - G_PARAM_READWRITE)); - - /** - * GUdevClient::uevent: - * @client: The #GUdevClient receiving the event. - * @action: The action for the uevent e.g. "add", "remove", "change", "move", etc. - * @device: Details about the #GUdevDevice the event is for. - * - * Emitted when @client receives an uevent. - * - * This signal is emitted in the - * <link linkend="g-main-context-push-thread-default">thread-default main loop</link> - * of the thread that @client was created in. - */ - signals[UEVENT_SIGNAL] = g_signal_new ("uevent", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GUdevClientClass, uevent), - NULL, - NULL, - g_udev_marshal_VOID__STRING_OBJECT, - G_TYPE_NONE, - 2, - G_TYPE_STRING, - G_UDEV_TYPE_DEVICE); - - g_type_class_add_private (klass, sizeof (GUdevClientPrivate)); -} - -static void -g_udev_client_init (GUdevClient *client) -{ - client->priv = G_TYPE_INSTANCE_GET_PRIVATE (client, - G_UDEV_TYPE_CLIENT, - GUdevClientPrivate); -} - -/** - * g_udev_client_new: - * @subsystems: (array zero-terminated=1) (element-type utf8) (transfer none) (allow-none): A %NULL terminated string array of subsystems to listen for uevents on, %NULL to not listen on uevents at all, or an empty array to listen to uevents on all subsystems. See the documentation for the #GUdevClient:subsystems property for details on this parameter. - * - * Constructs a #GUdevClient object that can be used to query - * information about devices. Connect to the #GUdevClient::uevent - * signal to listen for uevents. Note that signals are emitted in the - * <link linkend="g-main-context-push-thread-default">thread-default main loop</link> - * of the thread that you call this constructor from. - * - * Returns: A new #GUdevClient object. Free with g_object_unref(). - */ -GUdevClient * -g_udev_client_new (const gchar * const *subsystems) -{ - return G_UDEV_CLIENT (g_object_new (G_UDEV_TYPE_CLIENT, "subsystems", subsystems, NULL)); -} - -/** - * g_udev_client_query_by_subsystem: - * @client: A #GUdevClient. - * @subsystem: (allow-none): The subsystem to get devices for or %NULL to get all devices. - * - * Gets all devices belonging to @subsystem. - * - * Returns: (nullable) (element-type GUdevDevice) (transfer full): A - * list of #GUdevDevice objects. The caller should free the result by - * using g_object_unref() on each element in the list and then - * g_list_free() on the list. - */ -GList * -g_udev_client_query_by_subsystem (GUdevClient *client, - const gchar *subsystem) -{ - struct udev_enumerate *enumerate; - struct udev_list_entry *l, *devices; - GList *ret; - - g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL); - - ret = NULL; - - /* prepare a device scan */ - enumerate = udev_enumerate_new (client->priv->udev); - - /* filter for subsystem */ - if (subsystem != NULL) - udev_enumerate_add_match_subsystem (enumerate, subsystem); - /* retrieve the list */ - udev_enumerate_scan_devices (enumerate); - - /* add devices to the list */ - devices = udev_enumerate_get_list_entry (enumerate); - for (l = devices; l != NULL; l = udev_list_entry_get_next (l)) - { - struct udev_device *udevice; - GUdevDevice *device; - - udevice = udev_device_new_from_syspath (udev_enumerate_get_udev (enumerate), - udev_list_entry_get_name (l)); - if (udevice == NULL) - continue; - device = _g_udev_device_new (udevice); - udev_device_unref (udevice); - ret = g_list_prepend (ret, device); - } - udev_enumerate_unref (enumerate); - - ret = g_list_reverse (ret); - - return ret; -} - -/** - * g_udev_client_query_by_device_number: - * @client: A #GUdevClient. - * @type: A value from the #GUdevDeviceType enumeration. - * @number: A device number. - * - * Looks up a device for a type and device number. - * - * Returns: (nullable) (transfer full): A #GUdevDevice object or %NULL - * if the device was not found. Free with g_object_unref(). - */ -GUdevDevice * -g_udev_client_query_by_device_number (GUdevClient *client, - GUdevDeviceType type, - GUdevDeviceNumber number) -{ - struct udev_device *udevice; - GUdevDevice *device; - - g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL); - - device = NULL; - udevice = udev_device_new_from_devnum (client->priv->udev, type, number); - - if (udevice == NULL) - goto out; - - device = _g_udev_device_new (udevice); - udev_device_unref (udevice); - - out: - return device; -} - -/** - * g_udev_client_query_by_device_file: - * @client: A #GUdevClient. - * @device_file: A device file. - * - * Looks up a device for a device file. - * - * Returns: (nullable) (transfer full): A #GUdevDevice object or %NULL - * if the device was not found. Free with g_object_unref(). - */ -GUdevDevice * -g_udev_client_query_by_device_file (GUdevClient *client, - const gchar *device_file) -{ - struct stat stat_buf; - GUdevDevice *device; - - g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL); - g_return_val_if_fail (device_file != NULL, NULL); - - device = NULL; - - if (stat (device_file, &stat_buf) != 0) - goto out; - - if (stat_buf.st_rdev == 0) - goto out; - - if (S_ISBLK (stat_buf.st_mode)) - device = g_udev_client_query_by_device_number (client, G_UDEV_DEVICE_TYPE_BLOCK, stat_buf.st_rdev); - else if (S_ISCHR (stat_buf.st_mode)) - device = g_udev_client_query_by_device_number (client, G_UDEV_DEVICE_TYPE_CHAR, stat_buf.st_rdev); - - out: - return device; -} - -/** - * g_udev_client_query_by_sysfs_path: - * @client: A #GUdevClient. - * @sysfs_path: A sysfs path. - * - * Looks up a device for a sysfs path. - * - * Returns: (nullable) (transfer full): A #GUdevDevice object or %NULL - * if the device was not found. Free with g_object_unref(). - */ -GUdevDevice * -g_udev_client_query_by_sysfs_path (GUdevClient *client, - const gchar *sysfs_path) -{ - struct udev_device *udevice; - GUdevDevice *device; - - g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL); - g_return_val_if_fail (sysfs_path != NULL, NULL); - - device = NULL; - udevice = udev_device_new_from_syspath (client->priv->udev, sysfs_path); - if (udevice == NULL) - goto out; - - device = _g_udev_device_new (udevice); - udev_device_unref (udevice); - - out: - return device; -} - -/** - * g_udev_client_query_by_subsystem_and_name: - * @client: A #GUdevClient. - * @subsystem: A subsystem name. - * @name: The name of the device. - * - * Looks up a device for a subsystem and name. - * - * Returns: (nullable) (transfer full): A #GUdevDevice object or %NULL - * if the device was not found. Free with g_object_unref(). - */ -GUdevDevice * -g_udev_client_query_by_subsystem_and_name (GUdevClient *client, - const gchar *subsystem, - const gchar *name) -{ - struct udev_device *udevice; - GUdevDevice *device; - - g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL); - g_return_val_if_fail (subsystem != NULL, NULL); - g_return_val_if_fail (name != NULL, NULL); - - device = NULL; - udevice = udev_device_new_from_subsystem_sysname (client->priv->udev, subsystem, name); - if (udevice == NULL) - goto out; - - device = _g_udev_device_new (udevice); - udev_device_unref (udevice); - - out: - return device; -} - -struct udev * -_g_udev_client_get_udev (GUdevClient *client) -{ - g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL); - return client->priv->udev; -} diff --git a/src/gudev/gudevclient.h b/src/gudev/gudevclient.h deleted file mode 100644 index 23bfce615f..0000000000 --- a/src/gudev/gudevclient.h +++ /dev/null @@ -1,99 +0,0 @@ -/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- - * - * Copyright (C) 2008 David Zeuthen <davidz@redhat.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#if !defined (_GUDEV_COMPILATION) && !defined(_GUDEV_INSIDE_GUDEV_H) -#error "Only <gudev/gudev.h> can be included directly, this file may disappear or change contents." -#endif - -#ifndef __G_UDEV_CLIENT_H__ -#define __G_UDEV_CLIENT_H__ - -#include <gudev/gudevtypes.h> - -G_BEGIN_DECLS - -#define G_UDEV_TYPE_CLIENT (g_udev_client_get_type ()) -#define G_UDEV_CLIENT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_UDEV_TYPE_CLIENT, GUdevClient)) -#define G_UDEV_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_UDEV_TYPE_CLIENT, GUdevClientClass)) -#define G_UDEV_IS_CLIENT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_UDEV_TYPE_CLIENT)) -#define G_UDEV_IS_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_UDEV_TYPE_CLIENT)) -#define G_UDEV_CLIENT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_UDEV_TYPE_CLIENT, GUdevClientClass)) - -typedef struct _GUdevClientClass GUdevClientClass; -typedef struct _GUdevClientPrivate GUdevClientPrivate; - -/** - * GUdevClient: - * - * The #GUdevClient struct is opaque and should not be accessed directly. - */ -struct _GUdevClient -{ - GObject parent; - - /*< private >*/ - GUdevClientPrivate *priv; -}; - -/** - * GUdevClientClass: - * @parent_class: Parent class. - * @uevent: Signal class handler for the #GUdevClient::uevent signal. - * - * Class structure for #GUdevClient. - */ -struct _GUdevClientClass -{ - GObjectClass parent_class; - - /* signals */ - void (*uevent) (GUdevClient *client, - const gchar *action, - GUdevDevice *device); - - /*< private >*/ - /* Padding for future expansion */ - void (*reserved1) (void); - void (*reserved2) (void); - void (*reserved3) (void); - void (*reserved4) (void); - void (*reserved5) (void); - void (*reserved6) (void); - void (*reserved7) (void); - void (*reserved8) (void); -}; - -GType g_udev_client_get_type (void) G_GNUC_CONST; -GUdevClient *g_udev_client_new (const gchar* const *subsystems); -GList *g_udev_client_query_by_subsystem (GUdevClient *client, - const gchar *subsystem); -GUdevDevice *g_udev_client_query_by_device_number (GUdevClient *client, - GUdevDeviceType type, - GUdevDeviceNumber number); -GUdevDevice *g_udev_client_query_by_device_file (GUdevClient *client, - const gchar *device_file); -GUdevDevice *g_udev_client_query_by_sysfs_path (GUdevClient *client, - const gchar *sysfs_path); -GUdevDevice *g_udev_client_query_by_subsystem_and_name (GUdevClient *client, - const gchar *subsystem, - const gchar *name); - -G_END_DECLS - -#endif /* __G_UDEV_CLIENT_H__ */ diff --git a/src/gudev/gudevdevice.c b/src/gudev/gudevdevice.c deleted file mode 100644 index 28b229b8d8..0000000000 --- a/src/gudev/gudevdevice.c +++ /dev/null @@ -1,1027 +0,0 @@ -/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- - * - * Copyright (C) 2008 David Zeuthen <davidz@redhat.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include <stdlib.h> -#include <string.h> -#include <sys/stat.h> - -#include "gudevdevice.h" -#include "gudevprivate.h" - -/** - * SECTION:gudevdevice - * @short_description: Get information about a device - * - * The #GUdevDevice class is used to get information about a specific - * device. Note that you cannot instantiate a #GUdevDevice object - * yourself. Instead you must use #GUdevClient to obtain #GUdevDevice - * objects. - * - * To get basic information about a device, use - * g_udev_device_get_subsystem(), g_udev_device_get_devtype(), - * g_udev_device_get_name(), g_udev_device_get_number(), - * g_udev_device_get_sysfs_path(), g_udev_device_get_driver(), - * g_udev_device_get_action(), g_udev_device_get_seqnum(), - * g_udev_device_get_device_type(), g_udev_device_get_device_number(), - * g_udev_device_get_device_file(), - * g_udev_device_get_device_file_symlinks(). - * - * To navigate the device tree, use g_udev_device_get_parent() and - * g_udev_device_get_parent_with_subsystem(). - * - * To access udev properties for the device, use - * g_udev_device_get_property_keys(), - * g_udev_device_has_property(), - * g_udev_device_get_property(), - * g_udev_device_get_property_as_int(), - * g_udev_device_get_property_as_uint64(), - * g_udev_device_get_property_as_double(), - * g_udev_device_get_property_as_boolean() and - * g_udev_device_get_property_as_strv(). - * - * To access sysfs attributes for the device, use - * g_udev_device_get_sysfs_attr_keys(), - * g_udev_device_has_sysfs_attr(), - * g_udev_device_get_sysfs_attr(), - * g_udev_device_get_sysfs_attr_as_int(), - * g_udev_device_get_sysfs_attr_as_uint64(), - * g_udev_device_get_sysfs_attr_as_double(), - * g_udev_device_get_sysfs_attr_as_boolean() and - * g_udev_device_get_sysfs_attr_as_strv(). - * - * Note that all getters on #GUdevDevice are non-reffing – returned - * values are owned by the object, should not be freed and are only - * valid as long as the object is alive. - * - * By design, #GUdevDevice will not react to changes for a device – it - * only contains a snapshot of information when the #GUdevDevice - * object was created. To work with changes, you typically connect to - * the #GUdevClient::uevent signal on a #GUdevClient and get a new - * #GUdevDevice whenever an event happens. - */ - -struct _GUdevDevicePrivate -{ - struct udev_device *udevice; - - /* computed ondemand and cached */ - gchar **device_file_symlinks; - gchar **property_keys; - gchar **sysfs_attr_keys; - gchar **tags; - GHashTable *prop_strvs; - GHashTable *sysfs_attr_strvs; -}; - -G_DEFINE_TYPE (GUdevDevice, g_udev_device, G_TYPE_OBJECT) - -static void -g_udev_device_finalize (GObject *object) -{ - GUdevDevice *device = G_UDEV_DEVICE (object); - - g_strfreev (device->priv->device_file_symlinks); - g_strfreev (device->priv->property_keys); - g_strfreev (device->priv->sysfs_attr_keys); - g_strfreev (device->priv->tags); - - if (device->priv->udevice != NULL) - udev_device_unref (device->priv->udevice); - - if (device->priv->prop_strvs != NULL) - g_hash_table_unref (device->priv->prop_strvs); - - if (device->priv->sysfs_attr_strvs != NULL) - g_hash_table_unref (device->priv->sysfs_attr_strvs); - - if (G_OBJECT_CLASS (g_udev_device_parent_class)->finalize != NULL) - (* G_OBJECT_CLASS (g_udev_device_parent_class)->finalize) (object); -} - -static void -g_udev_device_class_init (GUdevDeviceClass *klass) -{ - GObjectClass *gobject_class = (GObjectClass *) klass; - - gobject_class->finalize = g_udev_device_finalize; - - g_type_class_add_private (klass, sizeof (GUdevDevicePrivate)); -} - -static void -g_udev_device_init (GUdevDevice *device) -{ - device->priv = G_TYPE_INSTANCE_GET_PRIVATE (device, - G_UDEV_TYPE_DEVICE, - GUdevDevicePrivate); -} - - -GUdevDevice * -_g_udev_device_new (struct udev_device *udevice) -{ - GUdevDevice *device; - - device = G_UDEV_DEVICE (g_object_new (G_UDEV_TYPE_DEVICE, NULL)); - device->priv->udevice = udev_device_ref (udevice); - - return device; -} - -/** - * g_udev_device_get_subsystem: - * @device: A #GUdevDevice. - * - * Gets the subsystem for @device. - * - * Returns: The subsystem for @device. - */ -const gchar * -g_udev_device_get_subsystem (GUdevDevice *device) -{ - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); - return udev_device_get_subsystem (device->priv->udevice); -} - -/** - * g_udev_device_get_devtype: - * @device: A #GUdevDevice. - * - * Gets the device type for @device. - * - * Returns: The devtype for @device. - */ -const gchar * -g_udev_device_get_devtype (GUdevDevice *device) -{ - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); - return udev_device_get_devtype (device->priv->udevice); -} - -/** - * g_udev_device_get_name: - * @device: A #GUdevDevice. - * - * Gets the name of @device, e.g. "sda3". - * - * Returns: The name of @device. - */ -const gchar * -g_udev_device_get_name (GUdevDevice *device) -{ - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); - return udev_device_get_sysname (device->priv->udevice); -} - -/** - * g_udev_device_get_number: - * @device: A #GUdevDevice. - * - * Gets the number of @device, e.g. "3" if g_udev_device_get_name() returns "sda3". - * - * Returns: The number of @device. - */ -const gchar * -g_udev_device_get_number (GUdevDevice *device) -{ - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); - return udev_device_get_sysnum (device->priv->udevice); -} - -/** - * g_udev_device_get_sysfs_path: - * @device: A #GUdevDevice. - * - * Gets the sysfs path for @device. - * - * Returns: The sysfs path for @device. - */ -const gchar * -g_udev_device_get_sysfs_path (GUdevDevice *device) -{ - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); - return udev_device_get_syspath (device->priv->udevice); -} - -/** - * g_udev_device_get_driver: - * @device: A #GUdevDevice. - * - * Gets the name of the driver used for @device. - * - * Returns: (nullable): The name of the driver for @device or %NULL if - * unknown. - */ -const gchar * -g_udev_device_get_driver (GUdevDevice *device) -{ - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); - return udev_device_get_driver (device->priv->udevice); -} - -/** - * g_udev_device_get_action: - * @device: A #GUdevDevice. - * - * Gets the most recent action (e.g. "add", "remove", "change", etc.) for @device. - * - * Returns: An action string. - */ -const gchar * -g_udev_device_get_action (GUdevDevice *device) -{ - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); - return udev_device_get_action (device->priv->udevice); -} - -/** - * g_udev_device_get_seqnum: - * @device: A #GUdevDevice. - * - * Gets the most recent sequence number for @device. - * - * Returns: A sequence number. - */ -guint64 -g_udev_device_get_seqnum (GUdevDevice *device) -{ - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), 0); - return udev_device_get_seqnum (device->priv->udevice); -} - -/** - * g_udev_device_get_device_type: - * @device: A #GUdevDevice. - * - * Gets the type of the device file, if any, for @device. - * - * Returns: The device number for @device or #G_UDEV_DEVICE_TYPE_NONE if the device does not have a device file. - */ -GUdevDeviceType -g_udev_device_get_device_type (GUdevDevice *device) -{ - struct stat stat_buf; - const gchar *device_file; - GUdevDeviceType type; - - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), G_UDEV_DEVICE_TYPE_NONE); - - type = G_UDEV_DEVICE_TYPE_NONE; - - /* TODO: would be better to have support for this in libudev... */ - - device_file = g_udev_device_get_device_file (device); - if (device_file == NULL) - goto out; - - if (stat (device_file, &stat_buf) != 0) - goto out; - - if (S_ISBLK (stat_buf.st_mode)) - type = G_UDEV_DEVICE_TYPE_BLOCK; - else if (S_ISCHR (stat_buf.st_mode)) - type = G_UDEV_DEVICE_TYPE_CHAR; - - out: - return type; -} - -/** - * g_udev_device_get_device_number: - * @device: A #GUdevDevice. - * - * Gets the device number, if any, for @device. - * - * Returns: The device number for @device or 0 if unknown. - */ -GUdevDeviceNumber -g_udev_device_get_device_number (GUdevDevice *device) -{ - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), 0); - return udev_device_get_devnum (device->priv->udevice); -} - -/** - * g_udev_device_get_device_file: - * @device: A #GUdevDevice. - * - * Gets the device file for @device. - * - * Returns: (nullable): The device file for @device or %NULL if no - * device file exists. - */ -const gchar * -g_udev_device_get_device_file (GUdevDevice *device) -{ - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); - return udev_device_get_devnode (device->priv->udevice); -} - -/** - * g_udev_device_get_device_file_symlinks: - * @device: A #GUdevDevice. - * - * Gets a list of symlinks (in <literal>/dev</literal>) that points to - * the device file for @device. - * - * Returns: (transfer none) (array zero-terminated=1) (element-type utf8): A %NULL terminated string array of symlinks. This array is owned by @device and should not be freed by the caller. - */ -const gchar * const * -g_udev_device_get_device_file_symlinks (GUdevDevice *device) -{ - struct udev_list_entry *l; - GPtrArray *p; - - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); - - if (device->priv->device_file_symlinks != NULL) - goto out; - - p = g_ptr_array_new (); - for (l = udev_device_get_devlinks_list_entry (device->priv->udevice); l != NULL; l = udev_list_entry_get_next (l)) - { - g_ptr_array_add (p, g_strdup (udev_list_entry_get_name (l))); - } - g_ptr_array_add (p, NULL); - device->priv->device_file_symlinks = (gchar **) g_ptr_array_free (p, FALSE); - - out: - return (const gchar * const *) device->priv->device_file_symlinks; -} - -/* ---------------------------------------------------------------------------------------------------- */ - -/** - * g_udev_device_get_parent: - * @device: A #GUdevDevice. - * - * Gets the immediate parent of @device, if any. - * - * Returns: (nullable) (transfer full): A #GUdevDevice or %NULL if - * @device has no parent. Free with g_object_unref(). - */ -GUdevDevice * -g_udev_device_get_parent (GUdevDevice *device) -{ - GUdevDevice *ret; - struct udev_device *udevice; - - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); - - ret = NULL; - - udevice = udev_device_get_parent (device->priv->udevice); - if (udevice == NULL) - goto out; - - ret = _g_udev_device_new (udevice); - - out: - return ret; -} - -/** - * g_udev_device_get_parent_with_subsystem: - * @device: A #GUdevDevice. - * @subsystem: The subsystem of the parent to get. - * @devtype: (allow-none): The devtype of the parent to get or %NULL. - * - * Walks up the chain of parents of @device and returns the first - * device encountered where @subsystem and @devtype matches, if any. - * - * Returns: (nullable) (transfer full): A #GUdevDevice or %NULL if - * @device has no parent with @subsystem and @devtype. Free with - * g_object_unref(). - */ -GUdevDevice * -g_udev_device_get_parent_with_subsystem (GUdevDevice *device, - const gchar *subsystem, - const gchar *devtype) -{ - GUdevDevice *ret; - struct udev_device *udevice; - - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); - g_return_val_if_fail (subsystem != NULL, NULL); - - ret = NULL; - - udevice = udev_device_get_parent_with_subsystem_devtype (device->priv->udevice, - subsystem, - devtype); - if (udevice == NULL) - goto out; - - ret = _g_udev_device_new (udevice); - - out: - return ret; -} - -/* ---------------------------------------------------------------------------------------------------- */ - -/** - * g_udev_device_get_property_keys: - * @device: A #GUdevDevice. - * - * Gets all keys for properties on @device. - * - * Returns: (transfer none) (array zero-terminated=1) (element-type utf8): A %NULL terminated string array of property keys. This array is owned by @device and should not be freed by the caller. - */ -const gchar* const * -g_udev_device_get_property_keys (GUdevDevice *device) -{ - struct udev_list_entry *l; - GPtrArray *p; - - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); - - if (device->priv->property_keys != NULL) - goto out; - - p = g_ptr_array_new (); - for (l = udev_device_get_properties_list_entry (device->priv->udevice); l != NULL; l = udev_list_entry_get_next (l)) - { - g_ptr_array_add (p, g_strdup (udev_list_entry_get_name (l))); - } - g_ptr_array_add (p, NULL); - device->priv->property_keys = (gchar **) g_ptr_array_free (p, FALSE); - - out: - return (const gchar * const *) device->priv->property_keys; -} - - -/** - * g_udev_device_has_property: - * @device: A #GUdevDevice. - * @key: Name of property. - * - * Check if a the property with the given key exists. - * - * Returns: %TRUE only if the value for @key exist. - */ -gboolean -g_udev_device_has_property (GUdevDevice *device, - const gchar *key) -{ - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), FALSE); - g_return_val_if_fail (key != NULL, FALSE); - return udev_device_get_property_value (device->priv->udevice, key) != NULL; -} - -/** - * g_udev_device_get_property: - * @device: A #GUdevDevice. - * @key: Name of property. - * - * Look up the value for @key on @device. - * - * Returns: (nullable): The value for @key or %NULL if @key doesn't - * exist on @device. Do not free this string, it is owned by @device. - */ -const gchar * -g_udev_device_get_property (GUdevDevice *device, - const gchar *key) -{ - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); - g_return_val_if_fail (key != NULL, NULL); - return udev_device_get_property_value (device->priv->udevice, key); -} - -/** - * g_udev_device_get_property_as_int: - * @device: A #GUdevDevice. - * @key: Name of property. - * - * Look up the value for @key on @device and convert it to an integer - * using strtol(). - * - * Returns: The value for @key or 0 if @key doesn't exist or - * isn't an integer. - */ -gint -g_udev_device_get_property_as_int (GUdevDevice *device, - const gchar *key) -{ - gint result; - const gchar *s; - - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), 0); - g_return_val_if_fail (key != NULL, 0); - - result = 0; - s = g_udev_device_get_property (device, key); - if (s == NULL) - goto out; - - result = strtol (s, NULL, 0); -out: - return result; -} - -/** - * g_udev_device_get_property_as_uint64: - * @device: A #GUdevDevice. - * @key: Name of property. - * - * Look up the value for @key on @device and convert it to an unsigned - * 64-bit integer using g_ascii_strtoull(). - * - * Returns: The value for @key or 0 if @key doesn't exist or isn't a - * #guint64. - */ -guint64 -g_udev_device_get_property_as_uint64 (GUdevDevice *device, - const gchar *key) -{ - guint64 result; - const gchar *s; - - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), 0); - g_return_val_if_fail (key != NULL, 0); - - result = 0; - s = g_udev_device_get_property (device, key); - if (s == NULL) - goto out; - - result = g_ascii_strtoull (s, NULL, 0); -out: - return result; -} - -/** - * g_udev_device_get_property_as_double: - * @device: A #GUdevDevice. - * @key: Name of property. - * - * Look up the value for @key on @device and convert it to a double - * precision floating point number using strtod(). - * - * Returns: The value for @key or 0.0 if @key doesn't exist or isn't a - * #gdouble. - */ -gdouble -g_udev_device_get_property_as_double (GUdevDevice *device, - const gchar *key) -{ - gdouble result; - const gchar *s; - - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), 0.0); - g_return_val_if_fail (key != NULL, 0.0); - - result = 0.0; - s = g_udev_device_get_property (device, key); - if (s == NULL) - goto out; - - result = strtod (s, NULL); -out: - return result; -} - -/** - * g_udev_device_get_property_as_boolean: - * @device: A #GUdevDevice. - * @key: Name of property. - * - * Look up the value for @key on @device and convert it to an - * boolean. This is done by doing a case-insensitive string comparison - * on the string value against "1" and "true". - * - * Returns: The value for @key or %FALSE if @key doesn't exist or - * isn't a #gboolean. - */ -gboolean -g_udev_device_get_property_as_boolean (GUdevDevice *device, - const gchar *key) -{ - gboolean result; - const gchar *s; - - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), FALSE); - g_return_val_if_fail (key != NULL, FALSE); - - result = FALSE; - s = g_udev_device_get_property (device, key); - if (s == NULL) - goto out; - - if (strcmp (s, "1") == 0 || g_ascii_strcasecmp (s, "true") == 0) - result = TRUE; - out: - return result; -} - -static gchar ** -split_at_whitespace (const gchar *s) -{ - gchar **result; - guint n; - guint m; - - result = g_strsplit_set (s, " \v\t\r\n", 0); - - /* remove empty strings, thanks GLib */ - for (n = 0; result[n] != NULL; n++) - { - if (strlen (result[n]) == 0) - { - g_free (result[n]); - for (m = n; result[m] != NULL; m++) - result[m] = result[m + 1]; - n--; - } - } - - return result; -} - -/** - * g_udev_device_get_property_as_strv: - * @device: A #GUdevDevice. - * @key: Name of property. - * - * Look up the value for @key on @device and return the result of - * splitting it into non-empty tokens split at white space (only space - * (' '), form-feed ('\f'), newline ('\n'), carriage return ('\r'), - * horizontal tab ('\t'), and vertical tab ('\v') are considered; the - * locale is not taken into account). - * - * Returns: (nullable) (transfer none) (array zero-terminated=1) (element-type utf8): - * The value of @key on @device split into tokens or %NULL if @key - * doesn't exist. This array is owned by @device and should not be - * freed by the caller. - */ -const gchar* const * -g_udev_device_get_property_as_strv (GUdevDevice *device, - const gchar *key) -{ - gchar **result; - const gchar *s; - - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); - g_return_val_if_fail (key != NULL, NULL); - - if (device->priv->prop_strvs != NULL) - { - result = g_hash_table_lookup (device->priv->prop_strvs, key); - if (result != NULL) - goto out; - } - - result = NULL; - s = g_udev_device_get_property (device, key); - if (s == NULL) - goto out; - - result = split_at_whitespace (s); - if (result == NULL) - goto out; - - if (device->priv->prop_strvs == NULL) - device->priv->prop_strvs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_strfreev); - g_hash_table_insert (device->priv->prop_strvs, g_strdup (key), result); - -out: - return (const gchar* const *) result; -} - -/* ---------------------------------------------------------------------------------------------------- */ - -/** - * g_udev_device_get_sysfs_attr_keys: - * @device: A #GUdevDevice. - * - * Gets all keys for sysfs attributes on @device. - * - * Returns: (transfer none) (array zero-terminated=1) (element-type utf8): A %NULL terminated string array of sysfs attribute keys. This array is owned by @device and should not be freed by the caller. - */ -const gchar * const * -g_udev_device_get_sysfs_attr_keys (GUdevDevice *device) -{ - struct udev_list_entry *l; - GPtrArray *p; - - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); - - if (device->priv->sysfs_attr_keys != NULL) - goto out; - - p = g_ptr_array_new (); - for (l = udev_device_get_sysattr_list_entry (device->priv->udevice); l != NULL; l = udev_list_entry_get_next (l)) - { - g_ptr_array_add (p, g_strdup (udev_list_entry_get_name (l))); - } - g_ptr_array_add (p, NULL); - device->priv->sysfs_attr_keys = (gchar **) g_ptr_array_free (p, FALSE); - - out: - return (const gchar * const *) device->priv->sysfs_attr_keys; -} - -/** - * g_udev_device_has_sysfs_attr: - * @device: A #GUdevDevice. - * @key: Name of sysfs attribute. - * - * Check if a the sysfs attribute with the given key exists. - * - * Returns: %TRUE only if the value for @key exist. - */ -gboolean -g_udev_device_has_sysfs_attr (GUdevDevice *device, - const gchar *key) -{ - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), FALSE); - g_return_val_if_fail (key != NULL, FALSE); - return udev_device_get_sysattr_value (device->priv->udevice, key) != NULL; -} - -/** - * g_udev_device_get_sysfs_attr: - * @device: A #GUdevDevice. - * @name: Name of the sysfs attribute. - * - * Look up the sysfs attribute with @name on @device. - * - * Returns: (nullable): The value of the sysfs attribute or %NULL if - * there is no such attribute. Do not free this string, it is owned by - * @device. - */ -const gchar * -g_udev_device_get_sysfs_attr (GUdevDevice *device, - const gchar *name) -{ - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); - g_return_val_if_fail (name != NULL, NULL); - return udev_device_get_sysattr_value (device->priv->udevice, name); -} - -/** - * g_udev_device_get_sysfs_attr_as_int: - * @device: A #GUdevDevice. - * @name: Name of the sysfs attribute. - * - * Look up the sysfs attribute with @name on @device and convert it to an integer - * using strtol(). - * - * Returns: The value of the sysfs attribute or 0 if there is no such - * attribute. - */ -gint -g_udev_device_get_sysfs_attr_as_int (GUdevDevice *device, - const gchar *name) -{ - gint result; - const gchar *s; - - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), 0); - g_return_val_if_fail (name != NULL, 0); - - result = 0; - s = g_udev_device_get_sysfs_attr (device, name); - if (s == NULL) - goto out; - - result = strtol (s, NULL, 0); -out: - return result; -} - -/** - * g_udev_device_get_sysfs_attr_as_uint64: - * @device: A #GUdevDevice. - * @name: Name of the sysfs attribute. - * - * Look up the sysfs attribute with @name on @device and convert it to an unsigned - * 64-bit integer using g_ascii_strtoull(). - * - * Returns: The value of the sysfs attribute or 0 if there is no such - * attribute. - */ -guint64 -g_udev_device_get_sysfs_attr_as_uint64 (GUdevDevice *device, - const gchar *name) -{ - guint64 result; - const gchar *s; - - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), 0); - g_return_val_if_fail (name != NULL, 0); - - result = 0; - s = g_udev_device_get_sysfs_attr (device, name); - if (s == NULL) - goto out; - - result = g_ascii_strtoull (s, NULL, 0); -out: - return result; -} - -/** - * g_udev_device_get_sysfs_attr_as_double: - * @device: A #GUdevDevice. - * @name: Name of the sysfs attribute. - * - * Look up the sysfs attribute with @name on @device and convert it to a double - * precision floating point number using strtod(). - * - * Returns: The value of the sysfs attribute or 0.0 if there is no such - * attribute. - */ -gdouble -g_udev_device_get_sysfs_attr_as_double (GUdevDevice *device, - const gchar *name) -{ - gdouble result; - const gchar *s; - - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), 0.0); - g_return_val_if_fail (name != NULL, 0.0); - - result = 0.0; - s = g_udev_device_get_sysfs_attr (device, name); - if (s == NULL) - goto out; - - result = strtod (s, NULL); -out: - return result; -} - -/** - * g_udev_device_get_sysfs_attr_as_boolean: - * @device: A #GUdevDevice. - * @name: Name of the sysfs attribute. - * - * Look up the sysfs attribute with @name on @device and convert it to an - * boolean. This is done by doing a case-insensitive string comparison - * on the string value against "1" and "true". - * - * Returns: The value of the sysfs attribute or %FALSE if there is no such - * attribute. - */ -gboolean -g_udev_device_get_sysfs_attr_as_boolean (GUdevDevice *device, - const gchar *name) -{ - gboolean result; - const gchar *s; - - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), FALSE); - g_return_val_if_fail (name != NULL, FALSE); - - result = FALSE; - s = g_udev_device_get_sysfs_attr (device, name); - if (s == NULL) - goto out; - - if (strcmp (s, "1") == 0 || g_ascii_strcasecmp (s, "true") == 0) - result = TRUE; - out: - return result; -} - -/** - * g_udev_device_get_sysfs_attr_as_strv: - * @device: A #GUdevDevice. - * @name: Name of the sysfs attribute. - * - * Look up the sysfs attribute with @name on @device and return the result of - * splitting it into non-empty tokens split at white space (only space (' '), - * form-feed ('\f'), newline ('\n'), carriage return ('\r'), horizontal - * tab ('\t'), and vertical tab ('\v') are considered; the locale is - * not taken into account). - * - * Returns: (nullable) (transfer none) (array zero-terminated=1) (element-type utf8): - * The value of the sysfs attribute split into tokens or %NULL if - * there is no such attribute. This array is owned by @device and - * should not be freed by the caller. - */ -const gchar * const * -g_udev_device_get_sysfs_attr_as_strv (GUdevDevice *device, - const gchar *name) -{ - gchar **result; - const gchar *s; - - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); - g_return_val_if_fail (name != NULL, NULL); - - if (device->priv->sysfs_attr_strvs != NULL) - { - result = g_hash_table_lookup (device->priv->sysfs_attr_strvs, name); - if (result != NULL) - goto out; - } - - result = NULL; - s = g_udev_device_get_sysfs_attr (device, name); - if (s == NULL) - goto out; - - result = split_at_whitespace (s); - if (result == NULL) - goto out; - - if (device->priv->sysfs_attr_strvs == NULL) - device->priv->sysfs_attr_strvs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_strfreev); - g_hash_table_insert (device->priv->sysfs_attr_strvs, g_strdup (name), result); - -out: - return (const gchar* const *) result; -} - -/** - * g_udev_device_get_tags: - * @device: A #GUdevDevice. - * - * Gets all tags for @device. - * - * Returns: (transfer none) (array zero-terminated=1) (element-type utf8): A %NULL terminated string array of tags. This array is owned by @device and should not be freed by the caller. - * - * Since: 165 - */ -const gchar* const * -g_udev_device_get_tags (GUdevDevice *device) -{ - struct udev_list_entry *l; - GPtrArray *p; - - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); - - if (device->priv->tags != NULL) - goto out; - - p = g_ptr_array_new (); - for (l = udev_device_get_tags_list_entry (device->priv->udevice); l != NULL; l = udev_list_entry_get_next (l)) - { - g_ptr_array_add (p, g_strdup (udev_list_entry_get_name (l))); - } - g_ptr_array_add (p, NULL); - device->priv->tags = (gchar **) g_ptr_array_free (p, FALSE); - - out: - return (const gchar * const *) device->priv->tags; -} - -/** - * g_udev_device_get_is_initialized: - * @device: A #GUdevDevice. - * - * Gets whether @device has been initialized. - * - * Returns: Whether @device has been initialized. - * - * Since: 165 - */ -gboolean -g_udev_device_get_is_initialized (GUdevDevice *device) -{ - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), FALSE); - return udev_device_get_is_initialized (device->priv->udevice); -} - -/** - * g_udev_device_get_usec_since_initialized: - * @device: A #GUdevDevice. - * - * Gets number of micro-seconds since @device was initialized. - * - * This only works for devices with properties in the udev - * database. All other devices return 0. - * - * Returns: Number of micro-seconds since @device was initialized or 0 if unknown. - * - * Since: 165 - */ -guint64 -g_udev_device_get_usec_since_initialized (GUdevDevice *device) -{ - g_return_val_if_fail (G_UDEV_IS_DEVICE (device), 0); - return udev_device_get_usec_since_initialized (device->priv->udevice); -} diff --git a/src/gudev/gudevdevice.h b/src/gudev/gudevdevice.h deleted file mode 100644 index 72ec180f55..0000000000 --- a/src/gudev/gudevdevice.h +++ /dev/null @@ -1,130 +0,0 @@ -/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- - * - * Copyright (C) 2008 David Zeuthen <davidz@redhat.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#if !defined (_GUDEV_COMPILATION) && !defined(_GUDEV_INSIDE_GUDEV_H) -#error "Only <gudev/gudev.h> can be included directly, this file may disappear or change contents." -#endif - -#ifndef __G_UDEV_DEVICE_H__ -#define __G_UDEV_DEVICE_H__ - -#include <gudev/gudevtypes.h> - -G_BEGIN_DECLS - -#define G_UDEV_TYPE_DEVICE (g_udev_device_get_type ()) -#define G_UDEV_DEVICE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_UDEV_TYPE_DEVICE, GUdevDevice)) -#define G_UDEV_DEVICE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_UDEV_TYPE_DEVICE, GUdevDeviceClass)) -#define G_UDEV_IS_DEVICE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_UDEV_TYPE_DEVICE)) -#define G_UDEV_IS_DEVICE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_UDEV_TYPE_DEVICE)) -#define G_UDEV_DEVICE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_UDEV_TYPE_DEVICE, GUdevDeviceClass)) - -typedef struct _GUdevDeviceClass GUdevDeviceClass; -typedef struct _GUdevDevicePrivate GUdevDevicePrivate; - -/** - * GUdevDevice: - * - * The #GUdevDevice struct is opaque and should not be accessed directly. - */ -struct _GUdevDevice -{ - GObject parent; - - /*< private >*/ - GUdevDevicePrivate *priv; -}; - -/** - * GUdevDeviceClass: - * @parent_class: Parent class. - * - * Class structure for #GUdevDevice. - */ -struct _GUdevDeviceClass -{ - GObjectClass parent_class; - - /*< private >*/ - /* Padding for future expansion */ - void (*reserved1) (void); - void (*reserved2) (void); - void (*reserved3) (void); - void (*reserved4) (void); - void (*reserved5) (void); - void (*reserved6) (void); - void (*reserved7) (void); - void (*reserved8) (void); -}; - -GType g_udev_device_get_type (void) G_GNUC_CONST; -gboolean g_udev_device_get_is_initialized (GUdevDevice *device); -guint64 g_udev_device_get_usec_since_initialized (GUdevDevice *device); -const gchar *g_udev_device_get_subsystem (GUdevDevice *device); -const gchar *g_udev_device_get_devtype (GUdevDevice *device); -const gchar *g_udev_device_get_name (GUdevDevice *device); -const gchar *g_udev_device_get_number (GUdevDevice *device); -const gchar *g_udev_device_get_sysfs_path (GUdevDevice *device); -const gchar *g_udev_device_get_driver (GUdevDevice *device); -const gchar *g_udev_device_get_action (GUdevDevice *device); -guint64 g_udev_device_get_seqnum (GUdevDevice *device); -GUdevDeviceType g_udev_device_get_device_type (GUdevDevice *device); -GUdevDeviceNumber g_udev_device_get_device_number (GUdevDevice *device); -const gchar *g_udev_device_get_device_file (GUdevDevice *device); -const gchar* const *g_udev_device_get_device_file_symlinks (GUdevDevice *device); -GUdevDevice *g_udev_device_get_parent (GUdevDevice *device); -GUdevDevice *g_udev_device_get_parent_with_subsystem (GUdevDevice *device, - const gchar *subsystem, - const gchar *devtype); -const gchar* const *g_udev_device_get_property_keys (GUdevDevice *device); -gboolean g_udev_device_has_property (GUdevDevice *device, - const gchar *key); -const gchar *g_udev_device_get_property (GUdevDevice *device, - const gchar *key); -gint g_udev_device_get_property_as_int (GUdevDevice *device, - const gchar *key); -guint64 g_udev_device_get_property_as_uint64 (GUdevDevice *device, - const gchar *key); -gdouble g_udev_device_get_property_as_double (GUdevDevice *device, - const gchar *key); -gboolean g_udev_device_get_property_as_boolean (GUdevDevice *device, - const gchar *key); -const gchar* const *g_udev_device_get_property_as_strv (GUdevDevice *device, - const gchar *key); - -const gchar* const *g_udev_device_get_sysfs_attr_keys (GUdevDevice *device); -gboolean g_udev_device_has_sysfs_attr (GUdevDevice *device, - const gchar *key); -const gchar *g_udev_device_get_sysfs_attr (GUdevDevice *device, - const gchar *name); -gint g_udev_device_get_sysfs_attr_as_int (GUdevDevice *device, - const gchar *name); -guint64 g_udev_device_get_sysfs_attr_as_uint64 (GUdevDevice *device, - const gchar *name); -gdouble g_udev_device_get_sysfs_attr_as_double (GUdevDevice *device, - const gchar *name); -gboolean g_udev_device_get_sysfs_attr_as_boolean (GUdevDevice *device, - const gchar *name); -const gchar* const *g_udev_device_get_sysfs_attr_as_strv (GUdevDevice *device, - const gchar *name); -const gchar* const *g_udev_device_get_tags (GUdevDevice *device); - -G_END_DECLS - -#endif /* __G_UDEV_DEVICE_H__ */ diff --git a/src/gudev/gudevenumerator.c b/src/gudev/gudevenumerator.c deleted file mode 100644 index 1fb3098709..0000000000 --- a/src/gudev/gudevenumerator.c +++ /dev/null @@ -1,429 +0,0 @@ -/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- - * - * Copyright (C) 2008-2010 David Zeuthen <davidz@redhat.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include <stdlib.h> -#include <string.h> - -#include "gudevclient.h" -#include "gudevenumerator.h" -#include "gudevdevice.h" -#include "gudevmarshal.h" -#include "gudevprivate.h" - -/** - * SECTION:gudevenumerator - * @short_description: Lookup and sort devices - * - * #GUdevEnumerator is used to lookup and sort devices. - * - * Since: 165 - */ - -struct _GUdevEnumeratorPrivate -{ - GUdevClient *client; - struct udev_enumerate *e; -}; - -enum -{ - PROP_0, - PROP_CLIENT, -}; - -G_DEFINE_TYPE (GUdevEnumerator, g_udev_enumerator, G_TYPE_OBJECT) - -/* ---------------------------------------------------------------------------------------------------- */ - -static void -g_udev_enumerator_finalize (GObject *object) -{ - GUdevEnumerator *enumerator = G_UDEV_ENUMERATOR (object); - - if (enumerator->priv->client != NULL) - { - g_object_unref (enumerator->priv->client); - enumerator->priv->client = NULL; - } - - if (enumerator->priv->e != NULL) - { - udev_enumerate_unref (enumerator->priv->e); - enumerator->priv->e = NULL; - } - - if (G_OBJECT_CLASS (g_udev_enumerator_parent_class)->finalize != NULL) - G_OBJECT_CLASS (g_udev_enumerator_parent_class)->finalize (object); -} - -static void -g_udev_enumerator_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GUdevEnumerator *enumerator = G_UDEV_ENUMERATOR (object); - - switch (prop_id) - { - case PROP_CLIENT: - if (enumerator->priv->client != NULL) - g_object_unref (enumerator->priv->client); - enumerator->priv->client = g_value_dup_object (value); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -g_udev_enumerator_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GUdevEnumerator *enumerator = G_UDEV_ENUMERATOR (object); - - switch (prop_id) - { - case PROP_CLIENT: - g_value_set_object (value, enumerator->priv->client); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -g_udev_enumerator_constructed (GObject *object) -{ - GUdevEnumerator *enumerator = G_UDEV_ENUMERATOR (object); - - g_assert (G_UDEV_IS_CLIENT (enumerator->priv->client)); - - enumerator->priv->e = udev_enumerate_new (_g_udev_client_get_udev (enumerator->priv->client)); - - if (G_OBJECT_CLASS (g_udev_enumerator_parent_class)->constructed != NULL) - G_OBJECT_CLASS (g_udev_enumerator_parent_class)->constructed (object); -} - -static void -g_udev_enumerator_class_init (GUdevEnumeratorClass *klass) -{ - GObjectClass *gobject_class = (GObjectClass *) klass; - - gobject_class->finalize = g_udev_enumerator_finalize; - gobject_class->set_property = g_udev_enumerator_set_property; - gobject_class->get_property = g_udev_enumerator_get_property; - gobject_class->constructed = g_udev_enumerator_constructed; - - /** - * GUdevEnumerator:client: - * - * The #GUdevClient to enumerate devices from. - * - * Since: 165 - */ - g_object_class_install_property (gobject_class, - PROP_CLIENT, - g_param_spec_object ("client", - "The client to enumerate devices from", - "The client to enumerate devices from", - G_UDEV_TYPE_CLIENT, - G_PARAM_CONSTRUCT_ONLY | - G_PARAM_READWRITE)); - - g_type_class_add_private (klass, sizeof (GUdevEnumeratorPrivate)); -} - -static void -g_udev_enumerator_init (GUdevEnumerator *enumerator) -{ - enumerator->priv = G_TYPE_INSTANCE_GET_PRIVATE (enumerator, - G_UDEV_TYPE_ENUMERATOR, - GUdevEnumeratorPrivate); -} - -/** - * g_udev_enumerator_new: - * @client: A #GUdevClient to enumerate devices from. - * - * Constructs a #GUdevEnumerator object that can be used to enumerate - * and sort devices. Use the add_match_*() and add_nomatch_*() methods - * and execute the query to get a list of devices with - * g_udev_enumerator_execute(). - * - * Returns: A new #GUdevEnumerator object. Free with g_object_unref(). - * - * Since: 165 - */ -GUdevEnumerator * -g_udev_enumerator_new (GUdevClient *client) -{ - g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL); - return G_UDEV_ENUMERATOR (g_object_new (G_UDEV_TYPE_ENUMERATOR, "client", client, NULL)); -} - - -/** - * g_udev_enumerator_add_match_subsystem: - * @enumerator: A #GUdevEnumerator. - * @subsystem: Wildcard for subsystem name e.g. 'scsi' or 'a*'. - * - * All returned devices will match the given @subsystem. - * - * Returns: (transfer none): The passed in @enumerator. - * - * Since: 165 - */ -GUdevEnumerator * -g_udev_enumerator_add_match_subsystem (GUdevEnumerator *enumerator, - const gchar *subsystem) -{ - g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL); - g_return_val_if_fail (subsystem != NULL, NULL); - udev_enumerate_add_match_subsystem (enumerator->priv->e, subsystem); - return enumerator; -} - -/** - * g_udev_enumerator_add_nomatch_subsystem: - * @enumerator: A #GUdevEnumerator. - * @subsystem: Wildcard for subsystem name e.g. 'scsi' or 'a*'. - * - * All returned devices will not match the given @subsystem. - * - * Returns: (transfer none): The passed in @enumerator. - * - * Since: 165 - */ -GUdevEnumerator * -g_udev_enumerator_add_nomatch_subsystem (GUdevEnumerator *enumerator, - const gchar *subsystem) -{ - g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL); - g_return_val_if_fail (subsystem != NULL, NULL); - udev_enumerate_add_nomatch_subsystem (enumerator->priv->e, subsystem); - return enumerator; -} - -/** - * g_udev_enumerator_add_match_sysfs_attr: - * @enumerator: A #GUdevEnumerator. - * @name: Wildcard filter for sysfs attribute key. - * @value: Wildcard filter for sysfs attribute value. - * - * All returned devices will have a sysfs attribute matching the given @name and @value. - * - * Returns: (transfer none): The passed in @enumerator. - * - * Since: 165 - */ -GUdevEnumerator * -g_udev_enumerator_add_match_sysfs_attr (GUdevEnumerator *enumerator, - const gchar *name, - const gchar *value) -{ - g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL); - g_return_val_if_fail (name != NULL, NULL); - g_return_val_if_fail (value != NULL, NULL); - udev_enumerate_add_match_sysattr (enumerator->priv->e, name, value); - return enumerator; -} - -/** - * g_udev_enumerator_add_nomatch_sysfs_attr: - * @enumerator: A #GUdevEnumerator. - * @name: Wildcard filter for sysfs attribute key. - * @value: Wildcard filter for sysfs attribute value. - * - * All returned devices will not have a sysfs attribute matching the given @name and @value. - * - * Returns: (transfer none): The passed in @enumerator. - * - * Since: 165 - */ -GUdevEnumerator * -g_udev_enumerator_add_nomatch_sysfs_attr (GUdevEnumerator *enumerator, - const gchar *name, - const gchar *value) -{ - g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL); - g_return_val_if_fail (name != NULL, NULL); - g_return_val_if_fail (value != NULL, NULL); - udev_enumerate_add_nomatch_sysattr (enumerator->priv->e, name, value); - return enumerator; -} - -/** - * g_udev_enumerator_add_match_property: - * @enumerator: A #GUdevEnumerator. - * @name: Wildcard filter for property name. - * @value: Wildcard filter for property value. - * - * All returned devices will have a property matching the given @name and @value. - * - * Returns: (transfer none): The passed in @enumerator. - * - * Since: 165 - */ -GUdevEnumerator * -g_udev_enumerator_add_match_property (GUdevEnumerator *enumerator, - const gchar *name, - const gchar *value) -{ - g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL); - g_return_val_if_fail (name != NULL, NULL); - g_return_val_if_fail (value != NULL, NULL); - udev_enumerate_add_match_property (enumerator->priv->e, name, value); - return enumerator; -} - -/** - * g_udev_enumerator_add_match_name: - * @enumerator: A #GUdevEnumerator. - * @name: Wildcard filter for kernel name e.g. "sda*". - * - * All returned devices will match the given @name. - * - * Returns: (transfer none): The passed in @enumerator. - * - * Since: 165 - */ -GUdevEnumerator * -g_udev_enumerator_add_match_name (GUdevEnumerator *enumerator, - const gchar *name) -{ - g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL); - g_return_val_if_fail (name != NULL, NULL); - udev_enumerate_add_match_sysname (enumerator->priv->e, name); - return enumerator; -} - -/** - * g_udev_enumerator_add_sysfs_path: - * @enumerator: A #GUdevEnumerator. - * @sysfs_path: A sysfs path, e.g. "/sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" - * - * Add a device to the list of devices, to retrieve it back sorted in dependency order. - * - * Returns: (transfer none): The passed in @enumerator. - * - * Since: 165 - */ -GUdevEnumerator * -g_udev_enumerator_add_sysfs_path (GUdevEnumerator *enumerator, - const gchar *sysfs_path) -{ - g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL); - g_return_val_if_fail (sysfs_path != NULL, NULL); - udev_enumerate_add_syspath (enumerator->priv->e, sysfs_path); - return enumerator; -} - -/** - * g_udev_enumerator_add_match_tag: - * @enumerator: A #GUdevEnumerator. - * @tag: A udev tag e.g. "udev-acl". - * - * All returned devices will match the given @tag. - * - * Returns: (transfer none): The passed in @enumerator. - * - * Since: 165 - */ -GUdevEnumerator * -g_udev_enumerator_add_match_tag (GUdevEnumerator *enumerator, - const gchar *tag) -{ - g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL); - g_return_val_if_fail (tag != NULL, NULL); - udev_enumerate_add_match_tag (enumerator->priv->e, tag); - return enumerator; -} - -/** - * g_udev_enumerator_add_match_is_initialized: - * @enumerator: A #GUdevEnumerator. - * - * All returned devices will be initialized. - * - * Returns: (transfer none): The passed in @enumerator. - * - * Since: 165 - */ -GUdevEnumerator * -g_udev_enumerator_add_match_is_initialized (GUdevEnumerator *enumerator) -{ - g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL); - udev_enumerate_add_match_is_initialized (enumerator->priv->e); - return enumerator; -} - -/** - * g_udev_enumerator_execute: - * @enumerator: A #GUdevEnumerator. - * - * Executes the query in @enumerator. - * - * Returns: (element-type GUdevDevice) (transfer full): A list of #GUdevDevice objects. The caller should free the result by using g_object_unref() on each element in the list and then g_list_free() on the list. - * - * Since: 165 - */ -GList * -g_udev_enumerator_execute (GUdevEnumerator *enumerator) -{ - GList *ret; - struct udev_list_entry *l, *devices; - - g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL); - - ret = NULL; - - /* retrieve the list */ - udev_enumerate_scan_devices (enumerator->priv->e); - - devices = udev_enumerate_get_list_entry (enumerator->priv->e); - for (l = devices; l != NULL; l = udev_list_entry_get_next (l)) - { - struct udev_device *udevice; - GUdevDevice *device; - - udevice = udev_device_new_from_syspath (udev_enumerate_get_udev (enumerator->priv->e), - udev_list_entry_get_name (l)); - if (udevice == NULL) - continue; - - device = _g_udev_device_new (udevice); - udev_device_unref (udevice); - ret = g_list_prepend (ret, device); - } - - ret = g_list_reverse (ret); - - return ret; -} diff --git a/src/gudev/gudevenumerator.h b/src/gudev/gudevenumerator.h deleted file mode 100644 index e1dbcf1441..0000000000 --- a/src/gudev/gudevenumerator.h +++ /dev/null @@ -1,106 +0,0 @@ -/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- - * - * Copyright (C) 2008-2010 David Zeuthen <davidz@redhat.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#if !defined (_GUDEV_COMPILATION) && !defined(_GUDEV_INSIDE_GUDEV_H) -#error "Only <gudev/gudev.h> can be included directly, this file may disappear or change contents." -#endif - -#ifndef __G_UDEV_ENUMERATOR_H__ -#define __G_UDEV_ENUMERATOR_H__ - -#include <gudev/gudevtypes.h> - -G_BEGIN_DECLS - -#define G_UDEV_TYPE_ENUMERATOR (g_udev_enumerator_get_type ()) -#define G_UDEV_ENUMERATOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_UDEV_TYPE_ENUMERATOR, GUdevEnumerator)) -#define G_UDEV_ENUMERATOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_UDEV_TYPE_ENUMERATOR, GUdevEnumeratorClass)) -#define G_UDEV_IS_ENUMERATOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_UDEV_TYPE_ENUMERATOR)) -#define G_UDEV_IS_ENUMERATOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_UDEV_TYPE_ENUMERATOR)) -#define G_UDEV_ENUMERATOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_UDEV_TYPE_ENUMERATOR, GUdevEnumeratorClass)) - -typedef struct _GUdevEnumeratorClass GUdevEnumeratorClass; -typedef struct _GUdevEnumeratorPrivate GUdevEnumeratorPrivate; - -/** - * GUdevEnumerator: - * - * The #GUdevEnumerator struct is opaque and should not be accessed directly. - * - * Since: 165 - */ -struct _GUdevEnumerator -{ - GObject parent; - - /*< private >*/ - GUdevEnumeratorPrivate *priv; -}; - -/** - * GUdevEnumeratorClass: - * @parent_class: Parent class. - * - * Class structure for #GUdevEnumerator. - * - * Since: 165 - */ -struct _GUdevEnumeratorClass -{ - GObjectClass parent_class; - - /*< private >*/ - /* Padding for future expansion */ - void (*reserved1) (void); - void (*reserved2) (void); - void (*reserved3) (void); - void (*reserved4) (void); - void (*reserved5) (void); - void (*reserved6) (void); - void (*reserved7) (void); - void (*reserved8) (void); -}; - -GType g_udev_enumerator_get_type (void) G_GNUC_CONST; -GUdevEnumerator *g_udev_enumerator_new (GUdevClient *client); -GUdevEnumerator *g_udev_enumerator_add_match_subsystem (GUdevEnumerator *enumerator, - const gchar *subsystem); -GUdevEnumerator *g_udev_enumerator_add_nomatch_subsystem (GUdevEnumerator *enumerator, - const gchar *subsystem); -GUdevEnumerator *g_udev_enumerator_add_match_sysfs_attr (GUdevEnumerator *enumerator, - const gchar *name, - const gchar *value); -GUdevEnumerator *g_udev_enumerator_add_nomatch_sysfs_attr (GUdevEnumerator *enumerator, - const gchar *name, - const gchar *value); -GUdevEnumerator *g_udev_enumerator_add_match_property (GUdevEnumerator *enumerator, - const gchar *name, - const gchar *value); -GUdevEnumerator *g_udev_enumerator_add_match_name (GUdevEnumerator *enumerator, - const gchar *name); -GUdevEnumerator *g_udev_enumerator_add_match_tag (GUdevEnumerator *enumerator, - const gchar *tag); -GUdevEnumerator *g_udev_enumerator_add_match_is_initialized (GUdevEnumerator *enumerator); -GUdevEnumerator *g_udev_enumerator_add_sysfs_path (GUdevEnumerator *enumerator, - const gchar *sysfs_path); -GList *g_udev_enumerator_execute (GUdevEnumerator *enumerator); - -G_END_DECLS - -#endif /* __G_UDEV_ENUMERATOR_H__ */ diff --git a/src/gudev/gudevenums.h b/src/gudev/gudevenums.h deleted file mode 100644 index 467e93bd60..0000000000 --- a/src/gudev/gudevenums.h +++ /dev/null @@ -1,48 +0,0 @@ -/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- - * - * Copyright (C) 2008 David Zeuthen <davidz@redhat.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#if !defined (_GUDEV_COMPILATION) && !defined(_GUDEV_INSIDE_GUDEV_H) -#error "Only <gudev/gudev.h> can be included directly, this file may disappear or change contents." -#endif - -#ifndef __G_UDEV_ENUMS_H__ -#define __G_UDEV_ENUMS_H__ - -#include <glib-object.h> - -G_BEGIN_DECLS - -/** - * GUdevDeviceType: - * @G_UDEV_DEVICE_TYPE_NONE: Device does not have a device file. - * @G_UDEV_DEVICE_TYPE_BLOCK: Device is a block device. - * @G_UDEV_DEVICE_TYPE_CHAR: Device is a character device. - * - * Enumeration used to specify a the type of a device. - */ -typedef enum -{ - G_UDEV_DEVICE_TYPE_NONE = 0, - G_UDEV_DEVICE_TYPE_BLOCK = 'b', - G_UDEV_DEVICE_TYPE_CHAR = 'c', -} GUdevDeviceType; - -G_END_DECLS - -#endif /* __G_UDEV_ENUMS_H__ */ diff --git a/src/gudev/gudevenumtypes.c.template b/src/gudev/gudevenumtypes.c.template deleted file mode 100644 index fc30b39e2e..0000000000 --- a/src/gudev/gudevenumtypes.c.template +++ /dev/null @@ -1,39 +0,0 @@ -/*** BEGIN file-header ***/ -#include <gudev.h> - -/*** END file-header ***/ - -/*** BEGIN file-production ***/ -/* enumerations from "@filename@" */ -/*** END file-production ***/ - -/*** BEGIN value-header ***/ -GType -@enum_name@_get_type (void) -{ - static volatile gsize g_define_type_id__volatile = 0; - - if (g_once_init_enter (&g_define_type_id__volatile)) - { - static const G@Type@Value values[] = { -/*** END value-header ***/ - -/*** BEGIN value-production ***/ - { @VALUENAME@, "@VALUENAME@", "@valuenick@" }, -/*** END value-production ***/ - -/*** BEGIN value-tail ***/ - { 0, NULL, NULL } - }; - GType g_define_type_id = - g_@type@_register_static (g_intern_static_string ("@EnumName@"), values); - g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); - } - - return g_define_type_id__volatile; -} - -/*** END value-tail ***/ - -/*** BEGIN file-tail ***/ -/*** END file-tail ***/ diff --git a/src/gudev/gudevenumtypes.h.template b/src/gudev/gudevenumtypes.h.template deleted file mode 100644 index d0ab3393e6..0000000000 --- a/src/gudev/gudevenumtypes.h.template +++ /dev/null @@ -1,24 +0,0 @@ -/*** BEGIN file-header ***/ -#ifndef __GUDEV_ENUM_TYPES_H__ -#define __GUDEV_ENUM_TYPES_H__ - -#include <glib-object.h> - -G_BEGIN_DECLS -/*** END file-header ***/ - -/*** BEGIN file-production ***/ - -/* enumerations from "@filename@" */ -/*** END file-production ***/ - -/*** BEGIN value-header ***/ -GType @enum_name@_get_type (void) G_GNUC_CONST; -#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type ()) -/*** END value-header ***/ - -/*** BEGIN file-tail ***/ -G_END_DECLS - -#endif /* __GUDEV_ENUM_TYPES_H__ */ -/*** END file-tail ***/ diff --git a/src/gudev/gudevmarshal.list b/src/gudev/gudevmarshal.list deleted file mode 100644 index 7e665999e8..0000000000 --- a/src/gudev/gudevmarshal.list +++ /dev/null @@ -1 +0,0 @@ -VOID:STRING,OBJECT diff --git a/src/gudev/gudevprivate.h b/src/gudev/gudevprivate.h deleted file mode 100644 index 52e272be3d..0000000000 --- a/src/gudev/gudevprivate.h +++ /dev/null @@ -1,40 +0,0 @@ -/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- - * - * Copyright (C) 2008 David Zeuthen <davidz@redhat.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#if !defined (_GUDEV_COMPILATION) && !defined(_GUDEV_INSIDE_GUDEV_H) -#error "Only <gudev/gudev.h> can be included directly, this file may disappear or change contents." -#endif - -#ifndef __G_UDEV_PRIVATE_H__ -#define __G_UDEV_PRIVATE_H__ - -#include <gudev/gudevtypes.h> - -#include <libudev.h> - -G_BEGIN_DECLS - -GUdevDevice * -_g_udev_device_new (struct udev_device *udevice); - -struct udev *_g_udev_client_get_udev (GUdevClient *client); - -G_END_DECLS - -#endif /* __G_UDEV_PRIVATE_H__ */ diff --git a/src/gudev/gudevtypes.h b/src/gudev/gudevtypes.h deleted file mode 100644 index e2f688ff2d..0000000000 --- a/src/gudev/gudevtypes.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- - * - * Copyright (C) 2008 David Zeuthen <davidz@redhat.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#if !defined (_GUDEV_COMPILATION) && !defined(_GUDEV_INSIDE_GUDEV_H) -#error "Only <gudev/gudev.h> can be included directly, this file may disappear or change contents." -#endif - -#ifndef __G_UDEV_TYPES_H__ -#define __G_UDEV_TYPES_H__ - -#include <gudev/gudevenums.h> -#include <sys/types.h> - -G_BEGIN_DECLS - -typedef struct _GUdevClient GUdevClient; -typedef struct _GUdevDevice GUdevDevice; -typedef struct _GUdevEnumerator GUdevEnumerator; - -/** - * GUdevDeviceNumber: - * - * Corresponds to the standard #dev_t type as defined by POSIX (Until - * bug 584517 is resolved this work-around is needed). - */ -#ifdef _GUDEV_WORK_AROUND_DEV_T_BUG -typedef guint64 GUdevDeviceNumber; /* __UQUAD_TYPE */ -#else -typedef dev_t GUdevDeviceNumber; -#endif - -G_END_DECLS - -#endif /* __G_UDEV_TYPES_H__ */ diff --git a/src/gudev/libgudev-1.0.sym b/src/gudev/libgudev-1.0.sym deleted file mode 100644 index 0600486e9c..0000000000 --- a/src/gudev/libgudev-1.0.sym +++ /dev/null @@ -1,68 +0,0 @@ -/*** - This file is part of systemd. - - systemd is free software; you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. -***/ - -{ -global: - g_udev_client_get_type; - g_udev_client_new; - g_udev_client_query_by_device_file; - g_udev_client_query_by_device_number; - g_udev_client_query_by_subsystem; - g_udev_client_query_by_subsystem_and_name; - g_udev_client_query_by_sysfs_path; - g_udev_device_get_action; - g_udev_device_get_device_file; - g_udev_device_get_device_file_symlinks; - g_udev_device_get_device_number; - g_udev_device_get_device_type; - g_udev_device_get_devtype; - g_udev_device_get_driver; - g_udev_device_get_is_initialized; - g_udev_device_get_name; - g_udev_device_get_number; - g_udev_device_get_parent; - g_udev_device_get_parent_with_subsystem; - g_udev_device_get_property; - g_udev_device_get_property_as_boolean; - g_udev_device_get_property_as_double; - g_udev_device_get_property_as_int; - g_udev_device_get_property_as_strv; - g_udev_device_get_property_as_uint64; - g_udev_device_get_property_keys; - g_udev_device_get_seqnum; - g_udev_device_get_subsystem; - g_udev_device_get_sysfs_attr; - g_udev_device_get_sysfs_attr_as_boolean; - g_udev_device_get_sysfs_attr_as_double; - g_udev_device_get_sysfs_attr_as_int; - g_udev_device_get_sysfs_attr_as_strv; - g_udev_device_get_sysfs_attr_as_uint64; - g_udev_device_get_sysfs_attr_keys; - g_udev_device_get_sysfs_path; - g_udev_device_get_tags; - g_udev_device_get_type; - g_udev_device_get_usec_since_initialized; - g_udev_device_has_property; - g_udev_device_has_sysfs_attr; - g_udev_device_type_get_type; - g_udev_enumerator_add_match_is_initialized; - g_udev_enumerator_add_match_name; - g_udev_enumerator_add_match_property; - g_udev_enumerator_add_match_subsystem; - g_udev_enumerator_add_match_sysfs_attr; - g_udev_enumerator_add_match_tag; - g_udev_enumerator_add_nomatch_subsystem; - g_udev_enumerator_add_nomatch_sysfs_attr; - g_udev_enumerator_add_sysfs_path; - g_udev_enumerator_execute; - g_udev_enumerator_get_type; - g_udev_enumerator_new; -local: - *; -}; diff --git a/src/gudev/seed-example-enum.js b/src/gudev/seed-example-enum.js deleted file mode 100755 index 66206ad806..0000000000 --- a/src/gudev/seed-example-enum.js +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env seed - -const GLib = imports.gi.GLib; -const GUdev = imports.gi.GUdev; - -function print_device(device) { - print(" initialized: " + device.get_is_initialized()); - print(" usec since initialized: " + device.get_usec_since_initialized()); - print(" subsystem: " + device.get_subsystem()); - print(" devtype: " + device.get_devtype()); - print(" name: " + device.get_name()); - print(" number: " + device.get_number()); - print(" sysfs_path: " + device.get_sysfs_path()); - print(" driver: " + device.get_driver()); - print(" action: " + device.get_action()); - print(" seqnum: " + device.get_seqnum()); - print(" device type: " + device.get_device_type()); - print(" device number: " + device.get_device_number()); - print(" device file: " + device.get_device_file()); - print(" device file symlinks: " + device.get_device_file_symlinks()); - print(" tags: " + device.get_tags()); - var keys = device.get_property_keys(); - for (var n = 0; n < keys.length; n++) { - print(" " + keys[n] + "=" + device.get_property(keys[n])); - } -} - -var client = new GUdev.Client({subsystems: []}); -var enumerator = new GUdev.Enumerator({client: client}); -enumerator.add_match_subsystem('b*') - -var devices = enumerator.execute(); - -for (var n=0; n < devices.length; n++) { - var device = devices[n]; - print_device(device); - print(""); -} diff --git a/src/gudev/seed-example.js b/src/gudev/seed-example.js deleted file mode 100755 index e2ac324d23..0000000000 --- a/src/gudev/seed-example.js +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env seed - -// seed example - -const GLib = imports.gi.GLib; -const GUdev = imports.gi.GUdev; - -function print_device (device) { - print (" subsystem: " + device.get_subsystem ()); - print (" devtype: " + device.get_devtype ()); - print (" name: " + device.get_name ()); - print (" number: " + device.get_number ()); - print (" sysfs_path: " + device.get_sysfs_path ()); - print (" driver: " + device.get_driver ()); - print (" action: " + device.get_action ()); - print (" seqnum: " + device.get_seqnum ()); - print (" device type: " + device.get_device_type ()); - print (" device number: " + device.get_device_number ()); - print (" device file: " + device.get_device_file ()); - print (" device file symlinks: " + device.get_device_file_symlinks ()); - print (" foo: " + device.get_sysfs_attr_as_strv ("stat")); - var keys = device.get_property_keys (); - for (var n = 0; n < keys.length; n++) { - print (" " + keys[n] + "=" + device.get_property (keys[n])); - } -} - -function on_uevent (client, action, device) { - print ("action " + action + " on device " + device.get_sysfs_path()); - print_device (device); - print (""); -} - -var client = new GUdev.Client ({subsystems: ["block", "usb/usb_interface"]}); -client.signal.connect ("uevent", on_uevent); - -var block_devices = client.query_by_subsystem ("block"); -for (var n = 0; n < block_devices.length; n++) { - print ("block device: " + block_devices[n].get_device_file ()); -} - -var d; - -d = client.query_by_device_number (GUdev.DeviceType.BLOCK, 0x0810); -if (d == null) { - print ("query_by_device_number 0x810 -> null"); -} else { - print ("query_by_device_number 0x810 -> " + d.get_device_file ()); - dd = d.get_parent_with_subsystem ("usb", null); - print_device (dd); - print ("--------------------------------------------------------------------------"); - while (d != null) { - print_device (d); - print (""); - d = d.get_parent (); - } -} - -d = client.query_by_sysfs_path ("/sys/block/sda/sda1"); -print ("query_by_sysfs_path (\"/sys/block/sda1\") -> " + d.get_device_file ()); - -d = client.query_by_subsystem_and_name ("block", "sda2"); -print ("query_by_subsystem_and_name (\"block\", \"sda2\") -> " + d.get_device_file ()); - -d = client.query_by_device_file ("/dev/sda"); -print ("query_by_device_file (\"/dev/sda\") -> " + d.get_device_file ()); - -d = client.query_by_device_file ("/dev/block/8:0"); -print ("query_by_device_file (\"/dev/block/8:0\") -> " + d.get_device_file ()); - -var mainloop = GLib.main_loop_new (); -GLib.main_loop_run (mainloop); diff --git a/src/import/export.c b/src/import/export.c index 201c5ab356..d4bc88e010 100644 --- a/src/import/export.c +++ b/src/import/export.c @@ -23,6 +23,7 @@ #include "sd-event.h" #include "event-util.h" +#include "signal-util.h" #include "verbs.h" #include "build.h" #include "machine-image.h" diff --git a/src/import/import-common.c b/src/import/import-common.c index aede2f9b36..9711614000 100644 --- a/src/import/import-common.c +++ b/src/import/import-common.c @@ -26,6 +26,7 @@ #include "util.h" #include "btrfs-util.h" #include "capability.h" +#include "signal-util.h" #include "import-common.h" int import_make_read_only_fd(int fd) { diff --git a/src/import/import.c b/src/import/import.c index f3072b3775..fff5a104b1 100644 --- a/src/import/import.c +++ b/src/import/import.c @@ -25,6 +25,7 @@ #include "event-util.h" #include "verbs.h" #include "build.h" +#include "signal-util.h" #include "machine-image.h" #include "import-util.h" #include "import-tar.h" diff --git a/src/import/importd.c b/src/import/importd.c index 45d1d93343..50566a6e5c 100644 --- a/src/import/importd.c +++ b/src/import/importd.c @@ -34,6 +34,7 @@ #include "path-util.h" #include "import-util.h" #include "process-util.h" +#include "signal-util.h" typedef struct Transfer Transfer; typedef struct Manager Manager; diff --git a/src/import/pull-common.c b/src/import/pull-common.c index 59091ba7cb..d2588d4fa0 100644 --- a/src/import/pull-common.c +++ b/src/import/pull-common.c @@ -30,6 +30,7 @@ #include "pull-job.h" #include "pull-common.h" #include "process-util.h" +#include "signal-util.h" #define FILENAME_ESCAPE "/.#\"\'" diff --git a/src/import/pull.c b/src/import/pull.c index 0f2ad92187..eec4583868 100644 --- a/src/import/pull.c +++ b/src/import/pull.c @@ -25,6 +25,7 @@ #include "event-util.h" #include "verbs.h" #include "build.h" +#include "signal-util.h" #include "machine-image.h" #include "import-util.h" #include "pull-tar.h" diff --git a/src/journal-remote/journal-remote.c b/src/journal-remote/journal-remote.c index f87a939168..911e2a178b 100644 --- a/src/journal-remote/journal-remote.c +++ b/src/journal-remote/journal-remote.c @@ -30,6 +30,7 @@ #include <getopt.h> #include "sd-daemon.h" +#include "signal-util.h" #include "journal-file.h" #include "journald-native.h" #include "socket-util.h" diff --git a/src/journal-remote/journal-upload.c b/src/journal-remote/journal-upload.c index ddbb8731e2..ddb1ef0396 100644 --- a/src/journal-remote/journal-upload.c +++ b/src/journal-remote/journal-upload.c @@ -33,8 +33,9 @@ #include "mkdir.h" #include "conf-parser.h" #include "sigbus.h" -#include "journal-upload.h" #include "formats-util.h" +#include "signal-util.h" +#include "journal-upload.h" #define PRIV_KEY_FILE CERTIFICATE_ROOT "/private/journal-upload.pem" #define CERT_FILE CERTIFICATE_ROOT "/certs/journal-upload.pem" diff --git a/src/journal/coredumpctl.c b/src/journal/coredumpctl.c index bcb0ff9c39..381bf72776 100644 --- a/src/journal/coredumpctl.c +++ b/src/journal/coredumpctl.c @@ -39,6 +39,7 @@ #include "sigbus.h" #include "process-util.h" #include "terminal-util.h" +#include "signal-util.h" static enum { ACTION_NONE, diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c index b3a4b53080..3353024f4e 100644 --- a/src/journal/journald-server.c +++ b/src/journal/journald-server.c @@ -25,6 +25,10 @@ #include <sys/statvfs.h> #include <sys/mman.h> +#ifdef HAVE_SELINUX +#include <selinux/selinux.h> +#endif + #include <libudev.h> #include "sd-journal.h" @@ -43,6 +47,7 @@ #include "formats-util.h" #include "process-util.h" #include "hostname-util.h" +#include "signal-util.h" #include "journal-internal.h" #include "journal-vacuum.h" #include "journal-authenticate.h" @@ -54,10 +59,6 @@ #include "journald-audit.h" #include "journald-server.h" -#ifdef HAVE_SELINUX -#include <selinux/selinux.h> -#endif - #define USER_JOURNALS_MAX 1024 #define DEFAULT_SYNC_INTERVAL_USEC (5*USEC_PER_MINUTE) diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install index d433e00a5c..4c9b1f0327 100644 --- a/src/kernel-install/90-loaderentry.install +++ b/src/kernel-install/90-loaderentry.install @@ -43,14 +43,14 @@ fi declare -a BOOT_OPTIONS if [[ -f /etc/kernel/cmdline ]]; then - readarray -t BOOT_OPTIONS < /etc/kernel/cmdline + read -r -d '' -a BOOT_OPTIONS < /etc/kernel/cmdline fi if ! [[ ${BOOT_OPTIONS[*]} ]]; then - read -a line -r < /proc/cmdline + read -r -d '' -a line < /proc/cmdline for i in "${line[@]}"; do [[ "${i#initrd=*}" != "$i" ]] && continue - BOOT_OPTIONS[${#BOOT_OPTIONS[@]}]="$i" + BOOT_OPTIONS+=("$i") done fi diff --git a/src/libsystemd-terminal/evcat.c b/src/libsystemd-terminal/evcat.c index d274225ed0..bfa166c489 100644 --- a/src/libsystemd-terminal/evcat.c +++ b/src/libsystemd-terminal/evcat.c @@ -35,19 +35,20 @@ #include <stdlib.h> #include <sys/ioctl.h> #include <sys/stat.h> -#include <systemd/sd-bus.h> -#include <systemd/sd-event.h> -#include <systemd/sd-login.h> #include <termios.h> #include <unistd.h> #include <xkbcommon/xkbcommon.h> +#include "sd-bus.h" +#include "sd-event.h" +#include "sd-login.h" #include "build.h" #include "event-util.h" -#include "idev.h" #include "macro.h" +#include "signal-util.h" +#include "util.h" +#include "idev.h" #include "sysview.h" #include "term-internal.h" -#include "util.h" typedef struct Evcat Evcat; diff --git a/src/libsystemd-terminal/grdev-drm.c b/src/libsystemd-terminal/grdev-drm.c index 01a70fd320..4cee95f469 100644 --- a/src/libsystemd-terminal/grdev-drm.c +++ b/src/libsystemd-terminal/grdev-drm.c @@ -27,8 +27,6 @@ #include <sys/ioctl.h> #include <sys/mman.h> #include <sys/types.h> -#include <systemd/sd-bus.h> -#include <systemd/sd-event.h> #include <unistd.h> /* Yuck! DRM headers need system headers included first.. but we have to @@ -37,12 +35,14 @@ #include <drm_fourcc.h> #include <drm_mode.h> -#include "bus-util.h" +#include "sd-bus.h" +#include "sd-event.h" #include "hashmap.h" -#include "grdev.h" -#include "grdev-internal.h" #include "macro.h" #include "util.h" +#include "bus-util.h" +#include "grdev.h" +#include "grdev-internal.h" #define GRDRM_MAX_TRIES (16) diff --git a/src/libsystemd-terminal/grdev-internal.h b/src/libsystemd-terminal/grdev-internal.h index f455dd4172..46d65f0248 100644 --- a/src/libsystemd-terminal/grdev-internal.h +++ b/src/libsystemd-terminal/grdev-internal.h @@ -25,12 +25,12 @@ #include <libudev.h> #include <stdbool.h> #include <stdlib.h> -#include <systemd/sd-bus.h> -#include <systemd/sd-event.h> -#include "grdev.h" +#include "sd-bus.h" +#include "sd-event.h" #include "hashmap.h" #include "list.h" #include "util.h" +#include "grdev.h" typedef struct grdev_tile grdev_tile; typedef struct grdev_display_cache grdev_display_cache; diff --git a/src/libsystemd-terminal/grdev.c b/src/libsystemd-terminal/grdev.c index feed579295..c386e65982 100644 --- a/src/libsystemd-terminal/grdev.c +++ b/src/libsystemd-terminal/grdev.c @@ -22,14 +22,14 @@ #include <libudev.h> #include <stdbool.h> #include <stdlib.h> -#include <systemd/sd-bus.h> -#include <systemd/sd-event.h> -#include "grdev.h" -#include "grdev-internal.h" +#include "sd-bus.h" +#include "sd-event.h" #include "hashmap.h" #include "login-shared.h" #include "macro.h" #include "util.h" +#include "grdev.h" +#include "grdev-internal.h" static void pipe_enable(grdev_pipe *pipe); static void pipe_disable(grdev_pipe *pipe); diff --git a/src/libsystemd-terminal/grdev.h b/src/libsystemd-terminal/grdev.h index db2a508fd8..110d24e6d5 100644 --- a/src/libsystemd-terminal/grdev.h +++ b/src/libsystemd-terminal/grdev.h @@ -56,8 +56,8 @@ #include <libudev.h> #include <stdbool.h> #include <stdlib.h> -#include <systemd/sd-bus.h> -#include <systemd/sd-event.h> +#include "sd-bus.h" +#include "sd-event.h" #include "util.h" typedef struct grdev_fb grdev_fb; diff --git a/src/libsystemd-terminal/idev-evdev.c b/src/libsystemd-terminal/idev-evdev.c index 64e703eb67..f1a18b91d3 100644 --- a/src/libsystemd-terminal/idev-evdev.c +++ b/src/libsystemd-terminal/idev-evdev.c @@ -24,13 +24,13 @@ #include <libudev.h> #include <stdbool.h> #include <stdlib.h> -#include <systemd/sd-bus.h> -#include <systemd/sd-event.h> +#include "sd-bus.h" +#include "sd-event.h" +#include "macro.h" +#include "util.h" #include "bus-util.h" #include "idev.h" #include "idev-internal.h" -#include "macro.h" -#include "util.h" typedef struct idev_evdev idev_evdev; typedef struct unmanaged_evdev unmanaged_evdev; diff --git a/src/libsystemd-terminal/idev-internal.h b/src/libsystemd-terminal/idev-internal.h index a159aef211..a02a16c408 100644 --- a/src/libsystemd-terminal/idev-internal.h +++ b/src/libsystemd-terminal/idev-internal.h @@ -26,13 +26,13 @@ #include <linux/input.h> #include <stdbool.h> #include <stdlib.h> -#include <systemd/sd-bus.h> -#include <systemd/sd-event.h> #include <xkbcommon/xkbcommon.h> +#include "sd-bus.h" +#include "sd-event.h" #include "hashmap.h" -#include "idev.h" #include "list.h" #include "util.h" +#include "idev.h" typedef struct idev_link idev_link; typedef struct idev_device_vtable idev_device_vtable; diff --git a/src/libsystemd-terminal/idev-keyboard.c b/src/libsystemd-terminal/idev-keyboard.c index ef56ee2482..93f49e9458 100644 --- a/src/libsystemd-terminal/idev-keyboard.c +++ b/src/libsystemd-terminal/idev-keyboard.c @@ -21,17 +21,17 @@ #include <stdbool.h> #include <stdlib.h> -#include <systemd/sd-bus.h> -#include <systemd/sd-event.h> #include <xkbcommon/xkbcommon.h> #include <xkbcommon/xkbcommon-compose.h> -#include "bus-util.h" +#include "sd-bus.h" +#include "sd-event.h" #include "hashmap.h" +#include "macro.h" +#include "util.h" +#include "bus-util.h" #include "idev.h" #include "idev-internal.h" -#include "macro.h" #include "term-internal.h" -#include "util.h" typedef struct kbdtbl kbdtbl; typedef struct kbdmap kbdmap; diff --git a/src/libsystemd-terminal/idev.c b/src/libsystemd-terminal/idev.c index 0ba2b28ab7..b187934977 100644 --- a/src/libsystemd-terminal/idev.c +++ b/src/libsystemd-terminal/idev.c @@ -22,14 +22,14 @@ #include <libudev.h> #include <stdbool.h> #include <stdlib.h> -#include <systemd/sd-bus.h> -#include <systemd/sd-event.h> +#include "sd-bus.h" +#include "sd-event.h" #include "hashmap.h" -#include "idev.h" -#include "idev-internal.h" #include "login-shared.h" #include "macro.h" #include "util.h" +#include "idev.h" +#include "idev-internal.h" static void element_open(idev_element *e); static void element_close(idev_element *e); diff --git a/src/libsystemd-terminal/idev.h b/src/libsystemd-terminal/idev.h index 0e846179e6..241677cbbe 100644 --- a/src/libsystemd-terminal/idev.h +++ b/src/libsystemd-terminal/idev.h @@ -28,9 +28,9 @@ #include <libudev.h> #include <linux/input.h> #include <stdbool.h> -#include <systemd/sd-bus.h> -#include <systemd/sd-event.h> #include <xkbcommon/xkbcommon.h> +#include "sd-bus.h" +#include "sd-event.h" typedef struct idev_data idev_data; typedef struct idev_data_evdev idev_data_evdev; diff --git a/src/libsystemd-terminal/modeset.c b/src/libsystemd-terminal/modeset.c index 621d6c4fa3..f3a60e1fb0 100644 --- a/src/libsystemd-terminal/modeset.c +++ b/src/libsystemd-terminal/modeset.c @@ -35,18 +35,18 @@ #include <stdlib.h> #include <sys/ioctl.h> #include <sys/stat.h> -#include <systemd/sd-bus.h> -#include <systemd/sd-event.h> -#include <systemd/sd-login.h> #include <termios.h> #include <unistd.h> - +#include "sd-bus.h" +#include "sd-event.h" +#include "sd-login.h" #include "build.h" -#include "grdev.h" #include "macro.h" -#include "sysview.h" -#include "util.h" #include "random-util.h" +#include "signal-util.h" +#include "util.h" +#include "grdev.h" +#include "sysview.h" typedef struct Modeset Modeset; diff --git a/src/libsystemd-terminal/subterm.c b/src/libsystemd-terminal/subterm.c index 983a2a14ab..d10e2f549f 100644 --- a/src/libsystemd-terminal/subterm.c +++ b/src/libsystemd-terminal/subterm.c @@ -34,13 +34,14 @@ #include <string.h> #include <sys/ioctl.h> #include <termios.h> +#include "sd-event.h" #include "macro.h" #include "pty.h" #include "ring.h" -#include "sd-event.h" -#include "term-internal.h" -#include "util.h" +#include "signal-util.h" #include "utf8.h" +#include "util.h" +#include "term-internal.h" typedef struct Output Output; typedef struct Terminal Terminal; diff --git a/src/libsystemd-terminal/sysview-internal.h b/src/libsystemd-terminal/sysview-internal.h index f1fd4b5f53..251c8d7300 100644 --- a/src/libsystemd-terminal/sysview-internal.h +++ b/src/libsystemd-terminal/sysview-internal.h @@ -25,13 +25,13 @@ #include <libudev.h> #include <stdbool.h> #include <stdlib.h> -#include <systemd/sd-bus.h> -#include <systemd/sd-event.h> +#include "sd-bus.h" +#include "sd-event.h" #include "hashmap.h" #include "list.h" #include "macro.h" -#include "sysview.h" #include "util.h" +#include "sysview.h" /* * Devices diff --git a/src/libsystemd-terminal/sysview.c b/src/libsystemd-terminal/sysview.c index 1e13167a79..2e9b15859a 100644 --- a/src/libsystemd-terminal/sysview.c +++ b/src/libsystemd-terminal/sysview.c @@ -23,15 +23,15 @@ #include <libudev.h> #include <stdbool.h> #include <stdlib.h> -#include <systemd/sd-bus.h> -#include <systemd/sd-event.h> -#include <systemd/sd-login.h> -#include "bus-util.h" +#include "sd-bus.h" +#include "sd-event.h" +#include "sd-login.h" #include "macro.h" -#include "sysview.h" -#include "sysview-internal.h" #include "udev-util.h" #include "util.h" +#include "bus-util.h" +#include "sysview.h" +#include "sysview-internal.h" static int context_raise_session_control(sysview_context *c, sysview_session *session, int error); @@ -196,7 +196,7 @@ int sysview_session_new(sysview_session **out, sysview_seat *seat, const char *n if (r < 0) return r; - session->custom = false;; + session->custom = false; } else { /* * No session name was given. We assume this is an unmanaged diff --git a/src/libsystemd-terminal/sysview.h b/src/libsystemd-terminal/sysview.h index 71e56e7ebf..a5e7a38df3 100644 --- a/src/libsystemd-terminal/sysview.h +++ b/src/libsystemd-terminal/sysview.h @@ -37,8 +37,8 @@ #pragma once #include <stdbool.h> -#include <systemd/sd-bus.h> -#include <systemd/sd-event.h> +#include "sd-bus.h" +#include "sd-event.h" typedef struct sysview_event sysview_event; typedef struct sysview_device sysview_device; diff --git a/src/libsystemd/sd-bus/bus-kernel.c b/src/libsystemd/sd-bus/bus-kernel.c index d5cc8100ce..417e4d5903 100644 --- a/src/libsystemd/sd-bus/bus-kernel.c +++ b/src/libsystemd/sd-bus/bus-kernel.c @@ -1770,32 +1770,6 @@ int bus_kernel_realize_attach_flags(sd_bus *bus) { return 0; } -int bus_kernel_fix_attach_mask(void) { - _cleanup_free_ char *mask = NULL; - uint64_t m = (uint64_t) -1; - char buf[2+16+2]; - int r; - - /* By default we don't want any kdbus metadata fields to be - * suppressed, hence we reset the kernel mask for it to - * (uint64_t) -1. If the module argument was overwritten by - * the kernel cmdline, we leave it as is. */ - - r = get_proc_cmdline_key("kdbus.attach_flags_mask=", &mask); - if (r < 0) - return log_warning_errno(r, "Failed to read kernel command line: %m"); - - if (r == 0) { - sprintf(buf, "0x%" PRIx64 "\n", m); - r = write_string_file("/sys/module/kdbus/parameters/attach_flags_mask", buf); - if (r < 0) - return log_full_errno(IN_SET(r, -ENOENT, -EROFS) ? LOG_DEBUG : LOG_WARNING, r, - "Failed to write kdbus attach mask: %m"); - } - - return 0; -} - int bus_kernel_get_bus_name(sd_bus *bus, char **name) { struct kdbus_cmd_info cmd = { .size = sizeof(struct kdbus_cmd_info), diff --git a/src/libsystemd/sd-bus/bus-kernel.h b/src/libsystemd/sd-bus/bus-kernel.h index b9f31ba790..bb4dff6d82 100644 --- a/src/libsystemd/sd-bus/bus-kernel.h +++ b/src/libsystemd/sd-bus/bus-kernel.h @@ -90,8 +90,6 @@ int bus_kernel_drop_one(int fd); int bus_kernel_realize_attach_flags(sd_bus *bus); -int bus_kernel_fix_attach_mask(void); - int bus_kernel_get_bus_name(sd_bus *bus, char **name); int bus_kernel_cmd_free(sd_bus *bus, uint64_t offset); diff --git a/src/libsystemd/sd-bus/bus-socket.c b/src/libsystemd/sd-bus/bus-socket.c index 881efb176a..4fffc6581d 100644 --- a/src/libsystemd/sd-bus/bus-socket.c +++ b/src/libsystemd/sd-bus/bus-socket.c @@ -24,12 +24,13 @@ #include <unistd.h> #include <poll.h> +#include "sd-daemon.h" #include "util.h" #include "macro.h" #include "missing.h" #include "utf8.h" -#include "sd-daemon.h" #include "formats-util.h" +#include "signal-util.h" #include "sd-bus.h" #include "bus-socket.h" diff --git a/src/libsystemd/sd-bus/bus-util.c b/src/libsystemd/sd-bus/bus-util.c index 5e375af206..99937799b3 100644 --- a/src/libsystemd/sd-bus/bus-util.c +++ b/src/libsystemd/sd-bus/bus-util.c @@ -30,6 +30,7 @@ #include "path-util.h" #include "missing.h" #include "set.h" +#include "signal-util.h" #include "unit-name.h" #include "sd-bus.h" diff --git a/src/libsystemd/sd-bus/kdbus.h b/src/libsystemd/sd-bus/kdbus.h index fc1d77dd7c..00a6e142c9 100644 --- a/src/libsystemd/sd-bus/kdbus.h +++ b/src/libsystemd/sd-bus/kdbus.h @@ -5,8 +5,8 @@ * your option) any later version. */ -#ifndef _KDBUS_UAPI_H_ -#define _KDBUS_UAPI_H_ +#ifndef _UAPI_KDBUS_H_ +#define _UAPI_KDBUS_H_ #include <linux/ioctl.h> #include <linux/types.h> @@ -544,7 +544,7 @@ struct kdbus_msg_info { * reply to this message. The * KDBUS_CMD_SEND ioctl() will block * until the reply is received, and - * offset_reply in struct kdbus_msg will + * reply in struct kdbus_cmd_send will * yield the offset in the sender's pool * where the reply can be found. * This flag is only valid if @@ -976,4 +976,4 @@ enum kdbus_ioctl_type { struct kdbus_cmd_match), }; -#endif /* _KDBUS_UAPI_H_ */ +#endif /* _UAPI_KDBUS_H_ */ diff --git a/src/libsystemd/sd-bus/test-bus-kernel.c b/src/libsystemd/sd-bus/test-bus-kernel.c index 8f4f60b65f..6506eaab2e 100644 --- a/src/libsystemd/sd-bus/test-bus-kernel.c +++ b/src/libsystemd/sd-bus/test-bus-kernel.c @@ -43,8 +43,6 @@ int main(int argc, char *argv[]) { assert_se(asprintf(&name, "deine-mutter-%u", (unsigned) getpid()) >= 0); - bus_kernel_fix_attach_mask(); - bus_ref = bus_kernel_create_bus(name, false, &bus_name); if (bus_ref == -ENOENT) return EXIT_TEST_SKIP; diff --git a/src/libsystemd/sd-device/device-enumerator.c b/src/libsystemd/sd-device/device-enumerator.c index ce4862d7f0..7fd77e9480 100644 --- a/src/libsystemd/sd-device/device-enumerator.c +++ b/src/libsystemd/sd-device/device-enumerator.c @@ -137,7 +137,6 @@ _public_ int sd_device_enumerator_add_match_sysattr(sd_device_enumerator *enumer assert_return(enumerator, -EINVAL); assert_return(_sysattr, -EINVAL); - assert_return(_value, -EINVAL); if (match) hashmap = &enumerator->match_sysattr; @@ -152,9 +151,11 @@ _public_ int sd_device_enumerator_add_match_sysattr(sd_device_enumerator *enumer if (!sysattr) return -ENOMEM; - value = strdup(_value); - if (!value) - return -ENOMEM; + if (_value) { + value = strdup(_value); + if (!value) + return -ENOMEM; + } r = hashmap_put(*hashmap, sysattr, value); if (r < 0) @@ -174,7 +175,6 @@ _public_ int sd_device_enumerator_add_match_property(sd_device_enumerator *enume assert_return(enumerator, -EINVAL); assert_return(_property, -EINVAL); - assert_return(_value, -EINVAL); r = hashmap_ensure_allocated(&enumerator->match_property, NULL); if (r < 0) @@ -184,9 +184,11 @@ _public_ int sd_device_enumerator_add_match_property(sd_device_enumerator *enume if (!property) return -ENOMEM; - value = strdup(_value); - if (!value) - return -ENOMEM; + if (_value) { + value = strdup(_value); + if (!value) + return -ENOMEM; + } r = hashmap_put(enumerator->match_property, property, value); if (r < 0) @@ -367,11 +369,11 @@ static bool match_sysattr(sd_device_enumerator *enumerator, sd_device *device) { assert(enumerator); assert(device); - HASHMAP_FOREACH_KEY(sysattr, value, enumerator->nomatch_sysattr, i) + HASHMAP_FOREACH_KEY(value, sysattr, enumerator->nomatch_sysattr, i) if (match_sysattr_value(device, sysattr, value)) return false; - HASHMAP_FOREACH_KEY(sysattr, value, enumerator->match_sysattr, i) + HASHMAP_FOREACH_KEY(value, sysattr, enumerator->match_sysattr, i) if (!match_sysattr_value(device, sysattr, value)) return false; @@ -389,7 +391,7 @@ static bool match_property(sd_device_enumerator *enumerator, sd_device *device) if (hashmap_isempty(enumerator->match_property)) return true; - HASHMAP_FOREACH_KEY(property, value, enumerator->match_property, i) { + HASHMAP_FOREACH_KEY(value, property, enumerator->match_property, i) { const char *property_dev, *value_dev; FOREACH_DEVICE_PROPERTY(device, property_dev, value_dev) { diff --git a/src/libsystemd/sd-device/device-private.c b/src/libsystemd/sd-device/device-private.c index 3cadedbf4a..2e60433246 100644 --- a/src/libsystemd/sd-device/device-private.c +++ b/src/libsystemd/sd-device/device-private.c @@ -636,10 +636,10 @@ int device_new_from_nulstr(sd_device **ret, uint8_t *nulstr, size_t len) { static int device_update_properties_bufs(sd_device *device) { const char *val, *prop; - char **buf_strv = NULL; - uint8_t *buf_nulstr = NULL; - size_t allocated_nulstr = 0, allocated_strv = 0; - size_t nulstr_len = 0, strv_size = 0; + _cleanup_free_ char **buf_strv = NULL; + _cleanup_free_ uint8_t *buf_nulstr = NULL; + size_t allocated_nulstr = 0; + size_t nulstr_len = 0, num = 0, i = 0; assert(device); @@ -655,20 +655,29 @@ static int device_update_properties_bufs(sd_device *device) { if (!buf_nulstr) return -ENOMEM; - buf_strv = GREEDY_REALLOC0(buf_strv, allocated_strv, strv_size + 2); - if (!buf_strv) - return -ENOMEM; - - buf_strv[++ strv_size] = (char *)&buf_nulstr[nulstr_len]; strscpyl((char *)buf_nulstr + nulstr_len, len + 1, prop, "=", val, NULL); nulstr_len += len + 1; + ++num; + } + + /* build buf_strv from buf_nulstr */ + buf_strv = new0(char *, num + 1); + if (!buf_strv) + return -ENOMEM; + + NULSTR_FOREACH(val, (char*) buf_nulstr) { + buf_strv[i] = (char *) val; + assert(i < num); + i++; } free(device->properties_nulstr); - free(device->properties_strv); device->properties_nulstr = buf_nulstr; + buf_nulstr = NULL; device->properties_nulstr_len = nulstr_len; + free(device->properties_strv); device->properties_strv = buf_strv; + buf_strv = NULL; device->properties_buf_outdated = false; diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c index 97da4a8eea..8e63b9ef56 100644 --- a/src/libsystemd/sd-device/sd-device.c +++ b/src/libsystemd/sd-device/sd-device.c @@ -785,7 +785,7 @@ _public_ int sd_device_get_subsystem(sd_device *device, const char **ret) { path_startswith(device->devpath, "/class/") || path_startswith(device->devpath, "/bus/")) r = device_set_subsystem(device, "subsystem"); - if (r < 0) + if (r < 0 && r != -ENOENT) return log_debug_errno(r, "sd-device: could not set subsystem for %s: %m", device->devpath); device->subsystem_set = true; @@ -901,8 +901,11 @@ _public_ int sd_device_get_driver(sd_device *device, const char **ret) { if (r >= 0) { r = device_set_driver(device, driver); if (r < 0) - return r; - } + return log_debug_errno(r, "sd-device: could not set driver for %s: %m", device->devpath); + } else if (r == -ENOENT) + device->driver_set = true; + else + return log_debug_errno(r, "sd-device: could not set driver for %s: %m", device->devpath); } *ret = device->driver; @@ -1188,6 +1191,8 @@ int device_get_id_filename(sd_device *device, const char **ret) { return r; if (major(devnum) > 0) { + assert(subsystem); + /* use dev_t -- b259:131072, c254:0 */ r = asprintf(&id, "%c%u:%u", streq(subsystem, "block") ? 'b' : 'c', @@ -1209,6 +1214,9 @@ int device_get_id_filename(sd_device *device, const char **ret) { if (!sysname) return -EINVAL; + if (!subsystem) + return -EINVAL; + r = asprintf(&id, "+%s:%s", subsystem, sysname); if (r < 0) return -ENOMEM; @@ -1262,7 +1270,7 @@ int device_read_db_aux(sd_device *device, bool force) { } /* devices with a database entry are initialized */ - device->is_initialized = true;; + device->is_initialized = true; for (i = 0; i < db_len; i++) { switch (state) { diff --git a/src/libsystemd/sd-event/sd-event.c b/src/libsystemd/sd-event/sd-event.c index 0dc4680376..2b8d1b87ed 100644 --- a/src/libsystemd/sd-event/sd-event.c +++ b/src/libsystemd/sd-event/sd-event.c @@ -33,6 +33,7 @@ #include "missing.h" #include "set.h" #include "list.h" +#include "signal-util.h" #include "sd-event.h" @@ -473,6 +474,9 @@ static int source_io_unregister(sd_event_source *s) { assert(s); assert(s->type == SOURCE_IO); + if (event_pid_changed(s->event)) + return 0; + if (!s->io.registered) return 0; @@ -603,6 +607,9 @@ static int event_update_signal_fd(sd_event *e) { assert(e); + if (event_pid_changed(e)) + return 0; + add_to_epoll = e->signal_fd < 0; r = signalfd(e->signal_fd, &e->sigset, SFD_NONBLOCK|SFD_CLOEXEC); diff --git a/src/libsystemd/sd-event/test-event.c b/src/libsystemd/sd-event/test-event.c index 721700be7b..94e98e0077 100644 --- a/src/libsystemd/sd-event/test-event.c +++ b/src/libsystemd/sd-event/test-event.c @@ -23,6 +23,7 @@ #include "log.h" #include "util.h" #include "macro.h" +#include "signal-util.h" static int prepare_handler(sd_event_source *s, void *userdata) { log_info("preparing %c", PTR_TO_INT(userdata)); diff --git a/src/libsystemd/sd-hwdb/sd-hwdb.c b/src/libsystemd/sd-hwdb/sd-hwdb.c index 3bbf02896b..2a0e00f7d2 100644 --- a/src/libsystemd/sd-hwdb/sd-hwdb.c +++ b/src/libsystemd/sd-hwdb/sd-hwdb.c @@ -317,7 +317,7 @@ _public_ int sd_hwdb_new(sd_hwdb **ret) { if (memcmp(hwdb->map, sig, sizeof(hwdb->head->signature)) != 0 || (size_t)hwdb->st.st_size != le64toh(hwdb->head->file_size)) { log_debug("error recognizing the format of %s", hwdb_bin_path); - return -EINVAL;; + return -EINVAL; } log_debug("=== trie on-disk ==="); diff --git a/src/libudev/libudev-device.c b/src/libudev/libudev-device.c index 893d72c19f..c27b01db96 100644 --- a/src/libudev/libudev-device.c +++ b/src/libudev/libudev-device.c @@ -178,7 +178,8 @@ _public_ const char *udev_device_get_subsystem(struct udev_device *udev_device) if (r < 0) { errno = -r; return NULL; - } + } else if (!subsystem) + errno = ENODATA; return subsystem; } diff --git a/src/libudev/libudev-enumerate.c b/src/libudev/libudev-enumerate.c index 255fbe808d..df088946df 100644 --- a/src/libudev/libudev-enumerate.c +++ b/src/libudev/libudev-enumerate.c @@ -196,6 +196,9 @@ _public_ struct udev_list_entry *udev_enumerate_get_list_entry(struct udev_enume _public_ int udev_enumerate_add_match_subsystem(struct udev_enumerate *udev_enumerate, const char *subsystem) { assert_return(udev_enumerate, -EINVAL); + if (!subsystem) + return 0; + return sd_device_enumerator_add_match_subsystem(udev_enumerate->enumerator, subsystem, true); } @@ -211,6 +214,9 @@ _public_ int udev_enumerate_add_match_subsystem(struct udev_enumerate *udev_enum _public_ int udev_enumerate_add_nomatch_subsystem(struct udev_enumerate *udev_enumerate, const char *subsystem) { assert_return(udev_enumerate, -EINVAL); + if (!subsystem) + return 0; + return sd_device_enumerator_add_match_subsystem(udev_enumerate->enumerator, subsystem, false); } @@ -227,6 +233,9 @@ _public_ int udev_enumerate_add_nomatch_subsystem(struct udev_enumerate *udev_en _public_ int udev_enumerate_add_match_sysattr(struct udev_enumerate *udev_enumerate, const char *sysattr, const char *value) { assert_return(udev_enumerate, -EINVAL); + if (!sysattr) + return 0; + return sd_device_enumerator_add_match_sysattr(udev_enumerate->enumerator, sysattr, value, true); } @@ -243,6 +252,9 @@ _public_ int udev_enumerate_add_match_sysattr(struct udev_enumerate *udev_enumer _public_ int udev_enumerate_add_nomatch_sysattr(struct udev_enumerate *udev_enumerate, const char *sysattr, const char *value) { assert_return(udev_enumerate, -EINVAL); + if (!sysattr) + return 0; + return sd_device_enumerator_add_match_sysattr(udev_enumerate->enumerator, sysattr, value, false); } @@ -259,6 +271,9 @@ _public_ int udev_enumerate_add_nomatch_sysattr(struct udev_enumerate *udev_enum _public_ int udev_enumerate_add_match_property(struct udev_enumerate *udev_enumerate, const char *property, const char *value) { assert_return(udev_enumerate, -EINVAL); + if (!property) + return 0; + return sd_device_enumerator_add_match_property(udev_enumerate->enumerator, property, value); } @@ -274,6 +289,9 @@ _public_ int udev_enumerate_add_match_property(struct udev_enumerate *udev_enume _public_ int udev_enumerate_add_match_tag(struct udev_enumerate *udev_enumerate, const char *tag) { assert_return(udev_enumerate, -EINVAL); + if (!tag) + return 0; + return sd_device_enumerator_add_match_tag(udev_enumerate->enumerator, tag); } @@ -335,6 +353,9 @@ _public_ int udev_enumerate_add_match_is_initialized(struct udev_enumerate *udev _public_ int udev_enumerate_add_match_sysname(struct udev_enumerate *udev_enumerate, const char *sysname) { assert_return(udev_enumerate, -EINVAL); + if (!sysname) + return 0; + return sd_device_enumerator_add_match_sysname(udev_enumerate->enumerator, sysname); } diff --git a/src/libudev/libudev-monitor.c b/src/libudev/libudev-monitor.c index b13c579460..282aa2b0d9 100644 --- a/src/libudev/libudev-monitor.c +++ b/src/libudev/libudev-monitor.c @@ -144,6 +144,22 @@ static bool udev_has_devtmpfs(struct udev *udev) { return false; } +static void monitor_set_nl_address(struct udev_monitor *udev_monitor) { + union sockaddr_union snl; + socklen_t addrlen; + int r; + + assert(udev_monitor); + + /* get the address the kernel has assigned us + * it is usually, but not necessarily the pid + */ + addrlen = sizeof(struct sockaddr_nl); + r = getsockname(udev_monitor->sock, &snl.sa, &addrlen); + if (r >= 0) + udev_monitor->snl.nl.nl_pid = snl.nl.nl_pid; +} + struct udev_monitor *udev_monitor_new_from_netlink_fd(struct udev *udev, const char *name, int fd) { struct udev_monitor *udev_monitor; @@ -183,7 +199,7 @@ struct udev_monitor *udev_monitor_new_from_netlink_fd(struct udev *udev, const c if (fd < 0) { udev_monitor->sock = socket(PF_NETLINK, SOCK_RAW|SOCK_CLOEXEC|SOCK_NONBLOCK, NETLINK_KOBJECT_UEVENT); - if (udev_monitor->sock == -1) { + if (udev_monitor->sock < 0) { log_debug_errno(errno, "error getting socket: %m"); free(udev_monitor); return NULL; @@ -191,6 +207,7 @@ struct udev_monitor *udev_monitor_new_from_netlink_fd(struct udev *udev, const c } else { udev_monitor->bound = true; udev_monitor->sock = fd; + monitor_set_nl_address(udev_monitor); } udev_monitor->snl.nl.nl_family = AF_NETLINK; @@ -366,6 +383,7 @@ int udev_monitor_allow_unicast_sender(struct udev_monitor *udev_monitor, struct udev_monitor->snl_trusted_sender.nl.nl_pid = sender->snl.nl.nl_pid; return 0; } + /** * udev_monitor_enable_receiving: * @udev_monitor: the monitor which should receive events @@ -388,19 +406,9 @@ _public_ int udev_monitor_enable_receiving(struct udev_monitor *udev_monitor) udev_monitor->bound = true; } - if (err >= 0) { - union sockaddr_union snl; - socklen_t addrlen; - - /* - * get the address the kernel has assigned us - * it is usually, but not necessarily the pid - */ - addrlen = sizeof(struct sockaddr_nl); - err = getsockname(udev_monitor->sock, &snl.sa, &addrlen); - if (err == 0) - udev_monitor->snl.nl.nl_pid = snl.nl.nl_pid; - } else { + if (err >= 0) + monitor_set_nl_address(udev_monitor); + else { log_debug_errno(errno, "bind failed: %m"); return -errno; } diff --git a/src/login/71-seat.rules.in b/src/login/71-seat.rules.in index ad26acbbb3..ab7b66f651 100644 --- a/src/login/71-seat.rules.in +++ b/src/login/71-seat.rules.in @@ -11,6 +11,7 @@ TAG=="uaccess", SUBSYSTEM!="sound", TAG+="seat" SUBSYSTEM=="sound", KERNEL=="card*", TAG+="seat" SUBSYSTEM=="input", KERNEL=="input*", TAG+="seat" SUBSYSTEM=="graphics", KERNEL=="fb[0-9]*", TAG+="seat", TAG+="master-of-seat" +SUBSYSTEM=="drm", KERNEL=="card[0-9]*", TAG+="seat", TAG+="master-of-seat" SUBSYSTEM=="usb", ATTR{bDeviceClass}=="09", TAG+="seat" # 'Plugable' USB hub, sound, network, graphics adapter diff --git a/src/login/loginctl.c b/src/login/loginctl.c index 4a5a618472..02d240c704 100644 --- a/src/login/loginctl.c +++ b/src/login/loginctl.c @@ -43,6 +43,7 @@ #include "verbs.h" #include "process-util.h" #include "terminal-util.h" +#include "signal-util.h" static char **arg_property = NULL; static bool arg_all = false; diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c index 10a9df0961..b272401e5b 100644 --- a/src/login/logind-dbus.c +++ b/src/login/logind-dbus.c @@ -2522,6 +2522,7 @@ int match_job_removed(sd_bus_message *message, void *userdata, sd_bus_error *err session_jobs_reply(session, unit, result); session_save(session); + user_save(session->user); session_add_to_gc_queue(session); } diff --git a/src/login/logind-user.c b/src/login/logind-user.c index 71bff96728..dc3db9abda 100644 --- a/src/login/logind-user.c +++ b/src/login/logind-user.c @@ -320,7 +320,7 @@ static int user_mkdir_runtime_path(User *u) { } else p = u->runtime_path; - if (path_is_mount_point(p, false) <= 0) { + if (path_is_mount_point(p, 0) <= 0) { _cleanup_free_ char *t = NULL; (void) mkdir(p, 0700); diff --git a/src/login/logind.c b/src/login/logind.c index 5e66cb924e..00f8dbdab2 100644 --- a/src/login/logind.c +++ b/src/login/logind.c @@ -30,9 +30,10 @@ #include "conf-parser.h" #include "bus-util.h" #include "bus-error.h" -#include "logind.h" #include "udev-util.h" #include "formats-util.h" +#include "signal-util.h" +#include "logind.h" static void manager_free(Manager *m); diff --git a/src/machine/machinectl.c b/src/machine/machinectl.c index b21a33941a..c86c36c2de 100644 --- a/src/machine/machinectl.c +++ b/src/machine/machinectl.c @@ -54,6 +54,7 @@ #include "import-util.h" #include "process-util.h" #include "terminal-util.h" +#include "signal-util.h" static char **arg_property = NULL; static bool arg_all = false; diff --git a/src/machine/machined.c b/src/machine/machined.c index 1e862ad8f2..754c770040 100644 --- a/src/machine/machined.c +++ b/src/machine/machined.c @@ -28,9 +28,10 @@ #include "bus-util.h" #include "bus-error.h" #include "label.h" +#include "formats-util.h" +#include "signal-util.h" #include "machine-image.h" #include "machined.h" -#include "formats-util.h" Manager *manager_new(void) { Manager *m; diff --git a/src/network/networkctl.c b/src/network/networkctl.c index 69b4ab4a5c..3454394977 100644 --- a/src/network/networkctl.c +++ b/src/network/networkctl.c @@ -62,7 +62,7 @@ static int link_get_type_string(int iftype, sd_device *d, char **ret) { assert(ret); if (iftype == ARPHRD_ETHER && d) { - const char *devtype, *id = NULL; + const char *devtype = NULL, *id = NULL; /* WLANs have iftype ARPHRD_ETHER, but we want * to show a more useful type string for * them */ diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index f039a2d687..b30fd7ae89 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -1481,6 +1481,9 @@ static int link_set_ipv4_forward(Link *link) { const char *p = NULL; int r; + if (link->network->ip_forward == ADDRESS_FAMILY_KERNEL) + return 0; + p = strjoina("/proc/sys/net/ipv4/conf/", link->ifname, "/forwarding"); r = write_string_file_no_create(p, one_zero(link_ipv4_forward_enabled(link))); if (r < 0) @@ -1497,6 +1500,9 @@ static int link_set_ipv6_forward(Link *link) { if (!socket_ipv6_is_supported()) return 0; + if (link->network->ip_forward == ADDRESS_FAMILY_KERNEL) + return 0; + p = strjoina("/proc/sys/net/ipv6/conf/", link->ifname, "/forwarding"); r = write_string_file_no_create(p, one_zero(link_ipv6_forward_enabled(link))); if (r < 0) diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index db737ad484..2cc53df4b1 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -853,6 +853,8 @@ const char *address_family_boolean_to_string(AddressFamilyBoolean b) { return "ipv4"; if (b == ADDRESS_FAMILY_IPV6) return "ipv6"; + if (b == ADDRESS_FAMILY_KERNEL) + return "kernel"; return NULL; } @@ -872,6 +874,8 @@ AddressFamilyBoolean address_family_boolean_from_string(const char *s) { return ADDRESS_FAMILY_IPV4; if (streq(s, "ipv6")) return ADDRESS_FAMILY_IPV6; + if (streq(s, "kernel")) + return ADDRESS_FAMILY_KERNEL; return _ADDRESS_FAMILY_BOOLEAN_INVALID; } diff --git a/src/network/networkd-wait-online.c b/src/network/networkd-wait-online.c index f0ca6def87..6a96f1de55 100644 --- a/src/network/networkd-wait-online.c +++ b/src/network/networkd-wait-online.c @@ -21,11 +21,10 @@ #include <getopt.h> #include "sd-daemon.h" - -#include "networkd-wait-online.h" - #include "strv.h" #include "build.h" +#include "signal-util.h" +#include "networkd-wait-online.h" static bool arg_quiet = false; static usec_t arg_timeout = 120 * USEC_PER_SEC; diff --git a/src/network/networkd.c b/src/network/networkd.c index 543a4e4d95..41ec7cf904 100644 --- a/src/network/networkd.c +++ b/src/network/networkd.c @@ -19,9 +19,9 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>. ***/ -#include "capability.h" #include "sd-daemon.h" - +#include "capability.h" +#include "signal-util.h" #include "networkd.h" int main(int argc, char *argv[]) { diff --git a/src/network/networkd.h b/src/network/networkd.h index 4b13d4aed1..49afeffe81 100644 --- a/src/network/networkd.h +++ b/src/network/networkd.h @@ -60,6 +60,7 @@ typedef enum AddressFamilyBoolean { ADDRESS_FAMILY_IPV4 = 1, ADDRESS_FAMILY_IPV6 = 2, ADDRESS_FAMILY_YES = 3, + ADDRESS_FAMILY_KERNEL = 4, _ADDRESS_FAMILY_BOOLEAN_MAX, _ADDRESS_FAMILY_BOOLEAN_INVALID = -1, } AddressFamilyBoolean; diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c index 23bb959171..4211a3d779 100644 --- a/src/nspawn/nspawn.c +++ b/src/nspawn/nspawn.c @@ -96,6 +96,7 @@ #include "process-util.h" #include "terminal-util.h" #include "hostname-util.h" +#include "signal-util.h" #ifdef HAVE_SECCOMP #include "seccomp-util.h" @@ -1099,7 +1100,7 @@ static int mount_all(const char *dest, bool userns) { if (!where) return log_oom(); - r = path_is_mount_point(where, true); + r = path_is_mount_point(where, AT_SYMLINK_FOLLOW); if (r < 0 && r != -ENOENT) return log_error_errno(r, "Failed to detect whether %s is a mount point: %m", where); @@ -1298,7 +1299,7 @@ static int mount_cgroup_hierarchy(const char *dest, const char *controller, cons to = strjoina(dest, "/sys/fs/cgroup/", hierarchy); - r = path_is_mount_point(to, false); + r = path_is_mount_point(to, 0); if (r < 0 && r != -ENOENT) return log_error_errno(r, "Failed to determine if %s is mounted already: %m", to); if (r > 0) @@ -2154,7 +2155,7 @@ static int setup_journal(const char *directory) { p = strjoina("/var/log/journal/", id); q = prefix_roota(directory, p); - if (path_is_mount_point(p, false) > 0) { + if (path_is_mount_point(p, 0) > 0) { if (arg_link_journal != LINK_AUTO) { log_error("%s: already a mount point, refusing to use for journal", p); return -EEXIST; @@ -2163,7 +2164,7 @@ static int setup_journal(const char *directory) { return 0; } - if (path_is_mount_point(q, false) > 0) { + if (path_is_mount_point(q, 0) > 0) { if (arg_link_journal != LINK_AUTO) { log_error("%s: already a mount point, refusing to use for journal", q); return -EEXIST; @@ -4507,7 +4508,7 @@ int main(int argc, char *argv[]) { * the specified is not a mount point we * create the new snapshot in the parent * directory, just next to it. */ - r = path_is_mount_point(arg_directory, false); + r = path_is_mount_point(arg_directory, 0); if (r < 0) { log_error_errno(r, "Failed to determine whether directory %s is mount point: %m", arg_directory); goto finish; diff --git a/src/python-systemd/docs/layout.html b/src/python-systemd/docs/layout.html index be5ff980ef..930a6a7afe 100644 --- a/src/python-systemd/docs/layout.html +++ b/src/python-systemd/docs/layout.html @@ -4,8 +4,6 @@ <a href="../man/systemd.index.html">Index </a>· <a href="../man/systemd.directives.html">Directives </a>· <a href="index.html">Python </a>· - <a href="../libudev/index.html">libudev </a>· - <a href="../libudev/index.html">gudev </a> <span style="float:right">systemd {{release}}</span> <hr /> {% endblock %} diff --git a/src/remount-fs/remount-fs.c b/src/remount-fs/remount-fs.c index a09531b26f..e701fc9fae 100644 --- a/src/remount-fs/remount-fs.c +++ b/src/remount-fs/remount-fs.c @@ -29,6 +29,7 @@ #include "log.h" #include "util.h" #include "path-util.h" +#include "signal-util.h" #include "mount-setup.h" #include "exit-status.h" diff --git a/src/resolve/resolved.c b/src/resolve/resolved.c index 271247ca3f..e283d8a749 100644 --- a/src/resolve/resolved.c +++ b/src/resolve/resolved.c @@ -24,6 +24,7 @@ #include "mkdir.h" #include "capability.h" #include "selinux-util.h" +#include "signal-util.h" #include "resolved-manager.h" #include "resolved-conf.h" diff --git a/src/run/run.c b/src/run/run.c index fcd6b06f7d..5b9f31c4aa 100644 --- a/src/run/run.c +++ b/src/run/run.c @@ -35,6 +35,7 @@ #include "calendarspec.h" #include "ptyfwd.h" #include "formats-util.h" +#include "signal-util.h" static bool arg_scope = false; static bool arg_remain_after_exit = false; diff --git a/src/shared/ask-password-api.c b/src/shared/ask-password-api.c index a3a2e51bb9..ef3788be68 100644 --- a/src/shared/ask-password-api.c +++ b/src/shared/ask-password-api.c @@ -37,7 +37,7 @@ #include "strv.h" #include "random-util.h" #include "terminal-util.h" - +#include "signal-util.h" #include "ask-password-api.h" static void backspace_chars(int ttyfd, size_t p) { diff --git a/src/shared/cgroup-util.c b/src/shared/cgroup-util.c index c0b0ca4cf2..9988e5c574 100644 --- a/src/shared/cgroup-util.c +++ b/src/shared/cgroup-util.c @@ -489,7 +489,7 @@ int cg_get_path(const char *controller, const char *path, const char *suffix, ch if (_unlikely_(!good)) { int r; - r = path_is_mount_point("/sys/fs/cgroup", false); + r = path_is_mount_point("/sys/fs/cgroup", 0); if (r < 0) return r; if (r == 0) diff --git a/src/shared/condition.c b/src/shared/condition.c index 9f2574c2f6..24871b0dae 100644 --- a/src/shared/condition.c +++ b/src/shared/condition.c @@ -349,7 +349,7 @@ static int condition_test_path_is_mount_point(Condition *c) { assert(c->parameter); assert(c->type == CONDITION_PATH_IS_MOUNT_POINT); - return path_is_mount_point(c->parameter, true) > 0; + return path_is_mount_point(c->parameter, AT_SYMLINK_FOLLOW) > 0; } static int condition_test_path_is_read_write(Condition *c) { diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c index 2c855157a9..7370c786f9 100644 --- a/src/shared/conf-parser.c +++ b/src/shared/conf-parser.c @@ -444,7 +444,7 @@ int config_parse_many(const char *conf_file, if (r < 0) \ log_syntax(unit, LOG_ERR, filename, line, -r, \ "Failed to parse %s value, ignoring: %s", \ - #vartype, rvalue); \ + #type, rvalue); \ \ return 0; \ } diff --git a/src/shared/log.c b/src/shared/log.c index 6168a2955d..b96afc4de4 100644 --- a/src/shared/log.c +++ b/src/shared/log.c @@ -38,6 +38,7 @@ #include "formats-util.h" #include "process-util.h" #include "terminal-util.h" +#include "signal-util.h" #define SNDBUF_SIZE (8*1024*1024) diff --git a/src/shared/machine-pool.c b/src/shared/machine-pool.c index 9920d150ab..d27931cb4a 100644 --- a/src/shared/machine-pool.c +++ b/src/shared/machine-pool.c @@ -30,6 +30,7 @@ #include "mkdir.h" #include "btrfs-util.h" #include "path-util.h" +#include "signal-util.h" #include "machine-pool.h" #define VAR_LIB_MACHINES_SIZE_START (1024UL*1024UL*500UL) @@ -198,7 +199,7 @@ int setup_machine_directory(uint64_t size, sd_bus_error *error) { return 0; } - if (path_is_mount_point("/var/lib/machines", true) > 0 || + if (path_is_mount_point("/var/lib/machines", AT_SYMLINK_FOLLOW) > 0 || dir_is_empty("/var/lib/machines") == 0) return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "/var/lib/machines is not a btrfs file system. Operation is not supported on legacy file systems."); diff --git a/src/shared/missing.h b/src/shared/missing.h index 9194009491..be7f6186fc 100644 --- a/src/shared/missing.h +++ b/src/shared/missing.h @@ -269,6 +269,11 @@ struct btrfs_qgroup_inherit { __u64 qgroups[0]; }; +struct btrfs_ioctl_qgroup_limit_args { + __u64 qgroupid; + struct btrfs_qgroup_limit lim; +}; + struct btrfs_ioctl_vol_args_v2 { __s64 fd; __u64 transid; @@ -360,6 +365,14 @@ struct btrfs_ioctl_clone_range_args { __u64 src_offset, src_length; __u64 dest_offset; }; + +#define BTRFS_QUOTA_CTL_ENABLE 1 +#define BTRFS_QUOTA_CTL_DISABLE 2 +#define BTRFS_QUOTA_CTL_RESCAN__NOTUSED 3 +struct btrfs_ioctl_quota_ctl_args { + __u64 cmd; + __u64 status; +}; #endif #ifndef BTRFS_IOC_DEFRAG @@ -367,6 +380,11 @@ struct btrfs_ioctl_clone_range_args { struct btrfs_ioctl_vol_args) #endif +#ifndef BTRFS_IOC_RESIZE +#define BTRFS_IOC_RESIZE _IOW(BTRFS_IOCTL_MAGIC, 3, \ + struct btrfs_ioctl_vol_args) +#endif + #ifndef BTRFS_IOC_CLONE #define BTRFS_IOC_CLONE _IOW(BTRFS_IOCTL_MAGIC, 9, int) #endif @@ -424,6 +442,16 @@ struct btrfs_ioctl_clone_range_args { struct btrfs_ioctl_vol_args) #endif +#ifndef BTRFS_IOC_QUOTA_CTL +#define BTRFS_IOC_QUOTA_CTL _IOWR(BTRFS_IOCTL_MAGIC, 40, \ + struct btrfs_ioctl_quota_ctl_args) +#endif + +#ifndef BTRFS_IOC_QGROUP_LIMIT +#define BTRFS_IOC_QGROUP_LIMIT _IOR(BTRFS_IOCTL_MAGIC, 43, \ + struct btrfs_ioctl_qgroup_limit_args) +#endif + #ifndef BTRFS_FIRST_FREE_OBJECTID #define BTRFS_FIRST_FREE_OBJECTID 256 #endif diff --git a/src/shared/path-util.c b/src/shared/path-util.c index 7090989fcb..be50a1865d 100644 --- a/src/shared/path-util.c +++ b/src/shared/path-util.c @@ -509,7 +509,7 @@ static int fd_fdinfo_mnt_id(int fd, const char *filename, int flags, int *mnt_id return safe_atoi(p, mnt_id); } -int fd_is_mount_point(int fd) { +int fd_is_mount_point(int fd, const char *filename, int flags) { union file_handle_union h = FILE_HANDLE_INIT, h_parent = FILE_HANDLE_INIT; int mount_id = -1, mount_id_parent = -1; bool nosupp = false, check_st_dev = true; @@ -517,6 +517,7 @@ int fd_is_mount_point(int fd) { int r; assert(fd >= 0); + assert(filename); /* First we will try the name_to_handle_at() syscall, which * tells us the mount id and an opaque file "handle". It is @@ -541,7 +542,7 @@ int fd_is_mount_point(int fd) { * subvolumes have different st_dev, even though they aren't * real mounts of their own. */ - r = name_to_handle_at(fd, "", &h.handle, &mount_id, AT_EMPTY_PATH); + r = name_to_handle_at(fd, filename, &h.handle, &mount_id, flags); if (r < 0) { if (errno == ENOSYS) /* This kernel does not support name_to_handle_at() @@ -558,7 +559,7 @@ int fd_is_mount_point(int fd) { return -errno; } - r = name_to_handle_at(fd, "..", &h_parent.handle, &mount_id_parent, 0); + r = name_to_handle_at(fd, "", &h_parent.handle, &mount_id_parent, AT_EMPTY_PATH); if (r < 0) { if (errno == EOPNOTSUPP) { if (nosupp) @@ -593,13 +594,13 @@ int fd_is_mount_point(int fd) { return mount_id != mount_id_parent; fallback_fdinfo: - r = fd_fdinfo_mnt_id(fd, "", AT_EMPTY_PATH, &mount_id); + r = fd_fdinfo_mnt_id(fd, filename, flags, &mount_id); if (r == -EOPNOTSUPP) goto fallback_fstat; if (r < 0) return r; - r = fd_fdinfo_mnt_id(fd, "..", 0, &mount_id_parent); + r = fd_fdinfo_mnt_id(fd, "", AT_EMPTY_PATH, &mount_id_parent); if (r < 0) return r; @@ -615,10 +616,16 @@ fallback_fdinfo: check_st_dev = false; fallback_fstat: - if (fstatat(fd, "", &a, AT_EMPTY_PATH) < 0) + /* yay for fstatat() taking a different set of flags than the other + * _at() above */ + if (flags & AT_SYMLINK_FOLLOW) + flags &= ~AT_SYMLINK_FOLLOW; + else + flags |= AT_SYMLINK_NOFOLLOW; + if (fstatat(fd, filename, &a, flags) < 0) return -errno; - if (fstatat(fd, "..", &b, 0) < 0) + if (fstatat(fd, "", &b, AT_EMPTY_PATH) < 0) return -errno; /* A directory with same device and inode as its parent? Must @@ -630,19 +637,26 @@ fallback_fstat: return check_st_dev && (a.st_dev != b.st_dev); } -int path_is_mount_point(const char *t, bool allow_symlink) { +/* flags can be AT_SYMLINK_FOLLOW or 0 */ +int path_is_mount_point(const char *t, int flags) { _cleanup_close_ int fd = -1; + _cleanup_free_ char *parent = NULL; + int r; assert(t); if (path_equal(t, "/")) return 1; - fd = openat(AT_FDCWD, t, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|(allow_symlink ? 0 : O_PATH)); + r = path_get_parent(t, &parent); + if (r < 0) + return r; + + fd = openat(AT_FDCWD, parent, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|O_PATH); if (fd < 0) return -errno; - return fd_is_mount_point(fd); + return fd_is_mount_point(fd, basename(t), flags); } int path_is_read_only_fs(const char *path) { diff --git a/src/shared/path-util.h b/src/shared/path-util.h index 4f45cfd2b7..1eac89c51b 100644 --- a/src/shared/path-util.h +++ b/src/shared/path-util.h @@ -53,8 +53,8 @@ char** path_strv_make_absolute_cwd(char **l); char** path_strv_resolve(char **l, const char *prefix); char** path_strv_resolve_uniq(char **l, const char *prefix); -int fd_is_mount_point(int fd); -int path_is_mount_point(const char *path, bool allow_symlink); +int fd_is_mount_point(int fd, const char *filename, int flags); +int path_is_mount_point(const char *path, int flags); int path_is_read_only_fs(const char *path); int path_is_os_tree(const char *path); diff --git a/src/shared/process-util.c b/src/shared/process-util.c index 92a69f50e7..cfc876567d 100644 --- a/src/shared/process-util.c +++ b/src/shared/process-util.c @@ -28,10 +28,11 @@ #include <signal.h> #include <ctype.h> -#include "process-util.h" #include "fileio.h" #include "util.h" #include "log.h" +#include "signal-util.h" +#include "process-util.h" int get_process_state(pid_t pid) { const char *p; diff --git a/src/shared/pty.c b/src/shared/pty.c index 0f80f4863b..119d66e9a2 100644 --- a/src/shared/pty.c +++ b/src/shared/pty.c @@ -57,9 +57,10 @@ #include "barrier.h" #include "macro.h" -#include "pty.h" #include "ring.h" #include "util.h" +#include "signal-util.h" +#include "pty.h" #define PTY_BUFSIZE 4096 diff --git a/src/shared/random-util.c b/src/shared/random-util.c index 88f5182508..b230044f50 100644 --- a/src/shared/random-util.c +++ b/src/shared/random-util.c @@ -23,7 +23,9 @@ #include <sys/stat.h> #include <fcntl.h> #include <time.h> +#ifdef HAVE_SYS_AUXV_H #include <sys/auxv.h> +#endif #include <linux/random.h> #include "random-util.h" diff --git a/src/shared/rm-rf.c b/src/shared/rm-rf.c index a89e8afc2a..bafd483be2 100644 --- a/src/shared/rm-rf.c +++ b/src/shared/rm-rf.c @@ -103,7 +103,7 @@ int rm_rf_children(int fd, RemoveFlags flags, struct stat *root_dev) { } /* Stop at mount points */ - r = fd_is_mount_point(subdir_fd); + r = fd_is_mount_point(fd, de->d_name, 0); if (r < 0) { if (ret == 0 && r != -ENOENT) ret = r; diff --git a/src/shared/signal-util.c b/src/shared/signal-util.c new file mode 100644 index 0000000000..9a2973b6fd --- /dev/null +++ b/src/shared/signal-util.c @@ -0,0 +1,228 @@ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ + +/*** + This file is part of systemd. + + Copyright 2015 Lennart Poettering + + systemd is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + systemd is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include "util.h" +#include "signal-util.h" + +int reset_all_signal_handlers(void) { + int sig, r = 0; + + for (sig = 1; sig < _NSIG; sig++) { + static const struct sigaction sa = { + .sa_handler = SIG_DFL, + .sa_flags = SA_RESTART, + }; + + /* These two cannot be caught... */ + if (sig == SIGKILL || sig == SIGSTOP) + continue; + + /* On Linux the first two RT signals are reserved by + * glibc, and sigaction() will return EINVAL for them. */ + if ((sigaction(sig, &sa, NULL) < 0)) + if (errno != EINVAL && r == 0) + r = -errno; + } + + return r; +} + +int reset_signal_mask(void) { + sigset_t ss; + + if (sigemptyset(&ss) < 0) + return -errno; + + if (sigprocmask(SIG_SETMASK, &ss, NULL) < 0) + return -errno; + + return 0; +} + +int sigaction_many(const struct sigaction *sa, ...) { + va_list ap; + int r = 0, sig; + + va_start(ap, sa); + while ((sig = va_arg(ap, int)) > 0) + if (sigaction(sig, sa, NULL) < 0) + r = -errno; + va_end(ap); + + return r; +} + +int ignore_signals(int sig, ...) { + static const struct sigaction sa = { + .sa_handler = SIG_IGN, + .sa_flags = SA_RESTART, + }; + va_list ap; + int r = 0; + + if (sigaction(sig, &sa, NULL) < 0) + r = -errno; + + va_start(ap, sig); + while ((sig = va_arg(ap, int)) > 0) + if (sigaction(sig, &sa, NULL) < 0) + r = -errno; + va_end(ap); + + return r; +} + +int default_signals(int sig, ...) { + static const struct sigaction sa = { + .sa_handler = SIG_DFL, + .sa_flags = SA_RESTART, + }; + va_list ap; + int r = 0; + + if (sigaction(sig, &sa, NULL) < 0) + r = -errno; + + va_start(ap, sig); + while ((sig = va_arg(ap, int)) > 0) + if (sigaction(sig, &sa, NULL) < 0) + r = -errno; + va_end(ap); + + return r; +} + +void sigset_add_many(sigset_t *ss, ...) { + va_list ap; + int sig; + + assert(ss); + + va_start(ap, ss); + while ((sig = va_arg(ap, int)) > 0) + assert_se(sigaddset(ss, sig) == 0); + va_end(ap); +} + +int sigprocmask_many(int how, ...) { + va_list ap; + sigset_t ss; + int sig; + + assert_se(sigemptyset(&ss) == 0); + + va_start(ap, how); + while ((sig = va_arg(ap, int)) > 0) + assert_se(sigaddset(&ss, sig) == 0); + va_end(ap); + + if (sigprocmask(how, &ss, NULL) < 0) + return -errno; + + return 0; +} + +static const char *const __signal_table[] = { + [SIGHUP] = "HUP", + [SIGINT] = "INT", + [SIGQUIT] = "QUIT", + [SIGILL] = "ILL", + [SIGTRAP] = "TRAP", + [SIGABRT] = "ABRT", + [SIGBUS] = "BUS", + [SIGFPE] = "FPE", + [SIGKILL] = "KILL", + [SIGUSR1] = "USR1", + [SIGSEGV] = "SEGV", + [SIGUSR2] = "USR2", + [SIGPIPE] = "PIPE", + [SIGALRM] = "ALRM", + [SIGTERM] = "TERM", +#ifdef SIGSTKFLT + [SIGSTKFLT] = "STKFLT", /* Linux on SPARC doesn't know SIGSTKFLT */ +#endif + [SIGCHLD] = "CHLD", + [SIGCONT] = "CONT", + [SIGSTOP] = "STOP", + [SIGTSTP] = "TSTP", + [SIGTTIN] = "TTIN", + [SIGTTOU] = "TTOU", + [SIGURG] = "URG", + [SIGXCPU] = "XCPU", + [SIGXFSZ] = "XFSZ", + [SIGVTALRM] = "VTALRM", + [SIGPROF] = "PROF", + [SIGWINCH] = "WINCH", + [SIGIO] = "IO", + [SIGPWR] = "PWR", + [SIGSYS] = "SYS" +}; + +DEFINE_PRIVATE_STRING_TABLE_LOOKUP(__signal, int); + +const char *signal_to_string(int signo) { + static thread_local char buf[sizeof("RTMIN+")-1 + DECIMAL_STR_MAX(int) + 1]; + const char *name; + + name = __signal_to_string(signo); + if (name) + return name; + + if (signo >= SIGRTMIN && signo <= SIGRTMAX) + snprintf(buf, sizeof(buf), "RTMIN+%d", signo - SIGRTMIN); + else + snprintf(buf, sizeof(buf), "%d", signo); + + return buf; +} + +int signal_from_string(const char *s) { + int signo; + int offset = 0; + unsigned u; + + signo = __signal_from_string(s); + if (signo > 0) + return signo; + + if (startswith(s, "RTMIN+")) { + s += 6; + offset = SIGRTMIN; + } + if (safe_atou(s, &u) >= 0) { + signo = (int) u + offset; + if (signo > 0 && signo < _NSIG) + return signo; + } + return -EINVAL; +} + +int signal_from_string_try_harder(const char *s) { + int signo; + assert(s); + + signo = signal_from_string(s); + if (signo <= 0) + if (startswith(s, "SIG")) + return signal_from_string(s+3); + + return signo; +} diff --git a/src/shared/signal-util.h b/src/shared/signal-util.h new file mode 100644 index 0000000000..ddf64cda76 --- /dev/null +++ b/src/shared/signal-util.h @@ -0,0 +1,41 @@ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ + +#pragma once + +/*** + This file is part of systemd. + + Copyright 2010-2015 Lennart Poettering + + systemd is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + systemd is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <signal.h> + +#include "macro.h" + +int reset_all_signal_handlers(void); +int reset_signal_mask(void); + +int ignore_signals(int sig, ...); +int default_signals(int sig, ...); +int sigaction_many(const struct sigaction *sa, ...); + +void sigset_add_many(sigset_t *ss, ...); +int sigprocmask_many(int how, ...); + +const char *signal_to_string(int i) _const_; +int signal_from_string(const char *s) _pure_; + +int signal_from_string_try_harder(const char *s); diff --git a/src/shared/util.c b/src/shared/util.c index 74a2190031..311acbb349 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -93,6 +93,7 @@ #include "random-util.h" #include "terminal-util.h" #include "hostname-util.h" +#include "signal-util.h" /* Put this test here for a lack of better place */ assert_cc(EAGAIN == EWOULDBLOCK); @@ -771,41 +772,6 @@ int readlink_and_canonicalize(const char *p, char **r) { return 0; } -int reset_all_signal_handlers(void) { - int sig, r = 0; - - for (sig = 1; sig < _NSIG; sig++) { - struct sigaction sa = { - .sa_handler = SIG_DFL, - .sa_flags = SA_RESTART, - }; - - /* These two cannot be caught... */ - if (sig == SIGKILL || sig == SIGSTOP) - continue; - - /* On Linux the first two RT signals are reserved by - * glibc, and sigaction() will return EINVAL for them. */ - if ((sigaction(sig, &sa, NULL) < 0)) - if (errno != EINVAL && r == 0) - r = -errno; - } - - return r; -} - -int reset_signal_mask(void) { - sigset_t ss; - - if (sigemptyset(&ss) < 0) - return -errno; - - if (sigprocmask(SIG_SETMASK, &ss, NULL) < 0) - return -errno; - - return 0; -} - char *strstrip(char *s) { char *e; @@ -1186,7 +1152,7 @@ static int cunescape_one(const char *p, size_t length, char *ret, uint32_t *ret_ int a, b, c; uint32_t m; - if (length != (size_t) -1 && length < 4) + if (length != (size_t) -1 && length < 3) return -EINVAL; a = unoctchar(p[0]); @@ -1561,59 +1527,6 @@ int flush_fd(int fd) { } } -int sigaction_many(const struct sigaction *sa, ...) { - va_list ap; - int r = 0, sig; - - va_start(ap, sa); - while ((sig = va_arg(ap, int)) > 0) - if (sigaction(sig, sa, NULL) < 0) - r = -errno; - va_end(ap); - - return r; -} - -int ignore_signals(int sig, ...) { - struct sigaction sa = { - .sa_handler = SIG_IGN, - .sa_flags = SA_RESTART, - }; - va_list ap; - int r = 0; - - if (sigaction(sig, &sa, NULL) < 0) - r = -errno; - - va_start(ap, sig); - while ((sig = va_arg(ap, int)) > 0) - if (sigaction(sig, &sa, NULL) < 0) - r = -errno; - va_end(ap); - - return r; -} - -int default_signals(int sig, ...) { - struct sigaction sa = { - .sa_handler = SIG_DFL, - .sa_flags = SA_RESTART, - }; - va_list ap; - int r = 0; - - if (sigaction(sig, &sa, NULL) < 0) - r = -errno; - - va_start(ap, sig); - while ((sig = va_arg(ap, int)) > 0) - if (sigaction(sig, &sa, NULL) < 0) - r = -errno; - va_end(ap); - - return r; -} - void safe_close_pair(int p[]) { assert(p); @@ -1927,35 +1840,6 @@ void rename_process(const char name[8]) { } } -void sigset_add_many(sigset_t *ss, ...) { - va_list ap; - int sig; - - assert(ss); - - va_start(ap, ss); - while ((sig = va_arg(ap, int)) > 0) - assert_se(sigaddset(ss, sig) == 0); - va_end(ap); -} - -int sigprocmask_many(int how, ...) { - va_list ap; - sigset_t ss; - int sig; - - assert_se(sigemptyset(&ss) == 0); - - va_start(ap, how); - while ((sig = va_arg(ap, int)) > 0) - assert_se(sigaddset(&ss, sig) == 0); - va_end(ap); - - if (sigprocmask(how, &ss, NULL) < 0) - return -errno; - - return 0; -} char *lookup_uid(uid_t uid) { long bufsize; char *name; @@ -2344,18 +2228,6 @@ DIR *xopendirat(int fd, const char *name, int flags) { return d; } -int signal_from_string_try_harder(const char *s) { - int signo; - assert(s); - - signo = signal_from_string(s); - if (signo <= 0) - if (startswith(s, "SIG")) - return signal_from_string(s+3); - - return signo; -} - static char *tag_to_udev_node(const char *tagvalue, const char *by) { _cleanup_free_ char *t = NULL, *u = NULL; size_t enc_len; @@ -3312,81 +3184,6 @@ static const char* const ip_tos_table[] = { DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(ip_tos, int, 0xff); -static const char *const __signal_table[] = { - [SIGHUP] = "HUP", - [SIGINT] = "INT", - [SIGQUIT] = "QUIT", - [SIGILL] = "ILL", - [SIGTRAP] = "TRAP", - [SIGABRT] = "ABRT", - [SIGBUS] = "BUS", - [SIGFPE] = "FPE", - [SIGKILL] = "KILL", - [SIGUSR1] = "USR1", - [SIGSEGV] = "SEGV", - [SIGUSR2] = "USR2", - [SIGPIPE] = "PIPE", - [SIGALRM] = "ALRM", - [SIGTERM] = "TERM", -#ifdef SIGSTKFLT - [SIGSTKFLT] = "STKFLT", /* Linux on SPARC doesn't know SIGSTKFLT */ -#endif - [SIGCHLD] = "CHLD", - [SIGCONT] = "CONT", - [SIGSTOP] = "STOP", - [SIGTSTP] = "TSTP", - [SIGTTIN] = "TTIN", - [SIGTTOU] = "TTOU", - [SIGURG] = "URG", - [SIGXCPU] = "XCPU", - [SIGXFSZ] = "XFSZ", - [SIGVTALRM] = "VTALRM", - [SIGPROF] = "PROF", - [SIGWINCH] = "WINCH", - [SIGIO] = "IO", - [SIGPWR] = "PWR", - [SIGSYS] = "SYS" -}; - -DEFINE_PRIVATE_STRING_TABLE_LOOKUP(__signal, int); - -const char *signal_to_string(int signo) { - static thread_local char buf[sizeof("RTMIN+")-1 + DECIMAL_STR_MAX(int) + 1]; - const char *name; - - name = __signal_to_string(signo); - if (name) - return name; - - if (signo >= SIGRTMIN && signo <= SIGRTMAX) - snprintf(buf, sizeof(buf), "RTMIN+%d", signo - SIGRTMIN); - else - snprintf(buf, sizeof(buf), "%d", signo); - - return buf; -} - -int signal_from_string(const char *s) { - int signo; - int offset = 0; - unsigned u; - - signo = __signal_from_string(s); - if (signo > 0) - return signo; - - if (startswith(s, "RTMIN+")) { - s += 6; - offset = SIGRTMIN; - } - if (safe_atou(s, &u) >= 0) { - signo = (int) u + offset; - if (signo > 0 && signo < _NSIG) - return signo; - } - return -EINVAL; -} - bool kexec_loaded(void) { bool loaded = false; char *s; diff --git a/src/shared/util.h b/src/shared/util.h index eb3595250d..467ae234a0 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -29,7 +29,6 @@ #include <stdbool.h> #include <stdlib.h> #include <stdio.h> -#include <signal.h> #include <sched.h> #include <limits.h> #include <sys/types.h> @@ -227,9 +226,6 @@ int readlink_value(const char *p, char **ret); int readlink_and_make_absolute(const char *p, char **r); int readlink_and_canonicalize(const char *p, char **r); -int reset_all_signal_handlers(void); -int reset_signal_mask(void); - char *strstrip(char *s); char *delete_chars(char *s, const char *bad); char *truncate_nl(char *s); @@ -334,10 +330,6 @@ bool fstype_is_network(const char *fstype); int flush_fd(int fd); -int ignore_signals(int sig, ...); -int default_signals(int sig, ...); -int sigaction_many(const struct sigaction *sa, ...); - int fopen_temporary(const char *path, FILE **_f, char **_temp_path); ssize_t loop_read(int fd, void *buf, size_t nbytes, bool do_poll); @@ -349,9 +341,6 @@ bool is_device_path(const char *path); int dir_is_empty(const char *path); char* dirname_malloc(const char *path); -void sigset_add_many(sigset_t *ss, ...); -int sigprocmask_many(int how, ...); - char* lookup_uid(uid_t uid); char* getlogname_malloc(void); char* getusername_malloc(void); @@ -465,11 +454,6 @@ int rlimit_from_string(const char *s) _pure_; int ip_tos_to_string_alloc(int i, char **s); int ip_tos_from_string(const char *s); -const char *signal_to_string(int i) _const_; -int signal_from_string(const char *s) _pure_; - -int signal_from_string_try_harder(const char *s); - extern int saved_argc; extern char **saved_argv; diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index f8e10a4710..b3d90d2c33 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -72,6 +72,7 @@ #include "process-util.h" #include "terminal-util.h" #include "hostname-util.h" +#include "signal-util.h" static char **arg_types = NULL; static char **arg_states = NULL; @@ -5098,7 +5099,7 @@ static int import_environment(sd_bus *bus, char **args) { static int enable_sysv_units(const char *verb, char **args) { int r = 0; -#if defined(HAVE_SYSV_COMPAT) && defined(HAVE_CHKCONFIG) +#if defined(HAVE_SYSV_COMPAT) unsigned f = 0; _cleanup_lookup_paths_free_ LookupPaths paths = {}; @@ -5123,7 +5124,7 @@ static int enable_sysv_units(const char *verb, char **args) { _cleanup_free_ char *p = NULL, *q = NULL, *l = NULL; bool found_native = false, found_sysv; unsigned c = 1; - const char *argv[6] = { "/sbin/chkconfig", NULL, NULL, NULL, NULL }; + const char *argv[6] = { ROOTLIBEXECDIR "/systemd-sysv-install", NULL, NULL, NULL, NULL }; char **k; int j; pid_t pid; @@ -5149,7 +5150,10 @@ static int enable_sysv_units(const char *verb, char **args) { break; } - if (found_native) + /* If we have both a native unit and a SysV script, + * enable/disable them both (below); for is-enabled, prefer the + * native unit */ + if (found_native && streq(verb, "is-enabled")) continue; p = path_join(arg_root, SYSTEM_SYSVINIT_PATH, name); @@ -5161,15 +5165,16 @@ static int enable_sysv_units(const char *verb, char **args) { if (!found_sysv) continue; - log_info("%s is not a native service, redirecting to /sbin/chkconfig.", name); + if (found_native) + log_info("Synchronizing state of %s with SysV init with %s...", name, argv[0]); + else + log_info("%s is not a native service, redirecting to systemd-sysv-install", name); if (!isempty(arg_root)) argv[c++] = q = strappend("--root=", arg_root); + argv[c++] = verb; argv[c++] = basename(p); - argv[c++] = - streq(verb, "enable") ? "on" : - streq(verb, "disable") ? "off" : "--level=5"; argv[c] = NULL; l = strv_join((char**)argv, " "); @@ -5185,6 +5190,7 @@ static int enable_sysv_units(const char *verb, char **args) { /* Child */ execv(argv[0], (char**) argv); + log_error("Failed to execute %s: %m", argv[0]); _exit(EXIT_FAILURE); } @@ -5210,6 +5216,9 @@ static int enable_sysv_units(const char *verb, char **args) { } else return -EPROTO; + if (found_native) + continue; + /* Remove this entry, so that we don't try enabling it as native unit */ assert(f > 0); f--; @@ -5870,7 +5879,7 @@ static int run_editor(char **paths) { execvp(editor, (char* const*) args); } - FOREACH_STRING(p, "nano", "vim", "vi") { + FOREACH_STRING(p, "editor", "nano", "vim", "vi") { args[0] = p; execvp(p, (char* const*) args); /* We do not fail if the editor doesn't exist diff --git a/src/systemctl/systemd-sysv-install.SKELETON b/src/systemctl/systemd-sysv-install.SKELETON new file mode 100755 index 0000000000..a53a3e6221 --- /dev/null +++ b/src/systemctl/systemd-sysv-install.SKELETON @@ -0,0 +1,47 @@ +#!/bin/sh +# This script is called by "systemctl enable/disable" when the given unit is a +# SysV init.d script. It needs to call the distribution's mechanism for +# enabling/disabling those, such as chkconfig, update-rc.d, or similar. This +# can optionally take a --root argument for enabling a SysV init script +# in a chroot or similar. +set -e + +usage() { + echo "Usage: $0 [--root=path] enable|disable|is-enabled <sysv script name>" >&2 + exit 1 +} + +# parse options +eval set -- "$(getopt -o r: --long root: -- "$@")" +while true; do + case "$1" in + -r|--root) + ROOT="$2" + shift 2 ;; + --) shift ; break ;; + *) usage ;; + esac +done + +NAME="$2" +[ -n "$NAME" ] || usage + +case "$1" in + enable) + # call the command to enable SysV init script $NAME here + # (consider optional $ROOT) + echo "IMPLEMENT ME: enabling SysV init.d script $NAME" + ;; + disable) + # call the command to disable SysV init script $NAME here + # (consider optional $ROOT) + echo "IMPLEMENT ME: disabling SysV init.d script $NAME" + ;; + is-enabled) + # exit with 0 if $NAME is enabled, non-zero if it is disabled + # (consider optional $ROOT) + echo "IMPLEMENT ME: checking SysV init.d script $NAME" + ;; + *) + usage ;; +esac diff --git a/src/test/test-conf-parser.c b/src/test/test-conf-parser.c new file mode 100644 index 0000000000..463906d304 --- /dev/null +++ b/src/test/test-conf-parser.c @@ -0,0 +1,234 @@ +/*** + This file is part of systemd. + + Copyright 2015 Ronny Chevalier + + systemd is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + systemd is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include "conf-parser.h" +#include "macro.h" +#include "util.h" +#include "strv.h" +#include "log.h" + +static void test_config_parse_path_one(const char *rvalue, const char *expected) { + char *path = NULL; + + assert_se(config_parse_path("unit", "filename", 1, "section", 1, "lvalue", 0, rvalue, &path, NULL) >= 0); + assert_se(streq_ptr(expected, path)); + + free(path); +} + +static void test_config_parse_log_level_one(const char *rvalue, int expected) { + int log_level = 0; + + assert_se(config_parse_log_level("unit", "filename", 1, "section", 1, "lvalue", 0, rvalue, &log_level, NULL) >= 0); + assert_se(expected == log_level); +} + +static void test_config_parse_log_facility_one(const char *rvalue, int expected) { + int log_facility = 0; + + assert_se(config_parse_log_facility("unit", "filename", 1, "section", 1, "lvalue", 0, rvalue, &log_facility, NULL) >= 0); + assert_se(expected == log_facility); +} + +static void test_config_parse_iec_size_one(const char *rvalue, size_t expected) { + size_t iec_size = 0; + + assert_se(config_parse_iec_size("unit", "filename", 1, "section", 1, "lvalue", 0, rvalue, &iec_size, NULL) >= 0); + assert_se(expected == iec_size); +} + +static void test_config_parse_si_size_one(const char *rvalue, size_t expected) { + size_t si_size = 0; + + assert_se(config_parse_si_size("unit", "filename", 1, "section", 1, "lvalue", 0, rvalue, &si_size, NULL) >= 0); + assert_se(expected == si_size); +} + +static void test_config_parse_int_one(const char *rvalue, int expected) { + int v = -1; + + assert_se(config_parse_int("unit", "filename", 1, "section", 1, "lvalue", 0, rvalue, &v, NULL) >= 0); + assert_se(expected == v); +} + +static void test_config_parse_unsigned_one(const char *rvalue, unsigned expected) { + unsigned v = 0; + + assert_se(config_parse_unsigned("unit", "filename", 1, "section", 1, "lvalue", 0, rvalue, &v, NULL) >= 0); + assert_se(expected == v); +} + +static void test_config_parse_strv_one(const char *rvalue, char **expected) { + char **strv = 0; + + assert_se(config_parse_strv("unit", "filename", 1, "section", 1, "lvalue", 0, rvalue, &strv, NULL) >= 0); + assert_se(strv_equal(expected, strv)); + + strv_free(strv); +} + +static void test_config_parse_mode_one(const char *rvalue, mode_t expected) { + mode_t v = 0; + + assert_se(config_parse_mode("unit", "filename", 1, "section", 1, "lvalue", 0, rvalue, &v, NULL) >= 0); + assert_se(expected == v); +} + +static void test_config_parse_sec_one(const char *rvalue, usec_t expected) { + usec_t v = 0; + + assert_se(config_parse_sec("unit", "filename", 1, "section", 1, "lvalue", 0, rvalue, &v, NULL) >= 0); + assert_se(expected == v); +} + +static void test_config_parse_nsec_one(const char *rvalue, nsec_t expected) { + nsec_t v = 0; + + assert_se(config_parse_nsec("unit", "filename", 1, "nsection", 1, "lvalue", 0, rvalue, &v, NULL) >= 0); + assert_se(expected == v); +} + +static void test_config_parse_path(void) { + test_config_parse_path_one("/path", "/path"); + test_config_parse_path_one("/path//////////", "/path"); + test_config_parse_path_one("///path/foo///bar////bar//", "/path/foo/bar/bar"); + + test_config_parse_path_one("not_absolute/path", NULL); +} + +static void test_config_parse_log_level(void) { + test_config_parse_log_level_one("debug", LOG_DEBUG); + test_config_parse_log_level_one("info", LOG_INFO); + + test_config_parse_log_level_one("garbage", 0); +} + +static void test_config_parse_log_facility(void) { + test_config_parse_log_facility_one("mail", LOG_MAIL); + test_config_parse_log_facility_one("user", LOG_USER); + + test_config_parse_log_facility_one("garbage", 0); +} + +static void test_config_parse_iec_size(void) { + test_config_parse_iec_size_one("1024", 1024); + test_config_parse_iec_size_one("2K", 2048); + test_config_parse_iec_size_one("10M", 10 * 1024 * 1024); + test_config_parse_iec_size_one("1G", 1 * 1024 * 1024 * 1024); + test_config_parse_iec_size_one("0G", 0); + test_config_parse_iec_size_one("0", 0); + + test_config_parse_iec_size_one("-982", 0); + test_config_parse_iec_size_one("49874444198739873000000G", 0); + test_config_parse_iec_size_one("garbage", 0); +} + +static void test_config_parse_si_size(void) { + test_config_parse_si_size_one("1024", 1024); + test_config_parse_si_size_one("2K", 2000); + test_config_parse_si_size_one("10M", 10 * 1000 * 1000); + test_config_parse_si_size_one("1G", 1 * 1000 * 1000 * 1000); + test_config_parse_si_size_one("0G", 0); + test_config_parse_si_size_one("0", 0); + + test_config_parse_si_size_one("-982", 0); + test_config_parse_si_size_one("49874444198739873000000G", 0); + test_config_parse_si_size_one("garbage", 0); +} + +static void test_config_parse_int(void) { + test_config_parse_int_one("1024", 1024); + test_config_parse_int_one("-1024", -1024); + test_config_parse_int_one("0", 0); + + test_config_parse_int_one("99999999999999999999999999999999999999999999999999999999", -1); + test_config_parse_int_one("-99999999999999999999999999999999999999999999999999999999", -1); + test_config_parse_int_one("1G", -1); + test_config_parse_int_one("garbage", -1); +} + +static void test_config_parse_unsigned(void) { + test_config_parse_unsigned_one("10241024", 10241024); + test_config_parse_unsigned_one("1024", 1024); + test_config_parse_unsigned_one("0", 0); + + test_config_parse_unsigned_one("99999999999999999999999999999999999999999999999999999999", 0); + test_config_parse_unsigned_one("1G", 0); + test_config_parse_unsigned_one("garbage", 0); + test_config_parse_unsigned_one("1000garbage", 0); +} + +static void test_config_parse_strv(void) { + test_config_parse_strv_one("", STRV_MAKE_EMPTY); + test_config_parse_strv_one("foo", STRV_MAKE("foo")); + test_config_parse_strv_one("foo bar foo", STRV_MAKE("foo", "bar", "foo")); + test_config_parse_strv_one("\"foo bar\" foo", STRV_MAKE("foo bar", "foo")); +} + +static void test_config_parse_mode(void) { + test_config_parse_mode_one("777", 0777); + test_config_parse_mode_one("644", 0644); + + test_config_parse_mode_one("-777", 0); + test_config_parse_mode_one("999", 0); + test_config_parse_mode_one("garbage", 0); + test_config_parse_mode_one("777garbage", 0); + test_config_parse_mode_one("777 garbage", 0); +} + +static void test_config_parse_sec(void) { + test_config_parse_sec_one("1", 1 * USEC_PER_SEC); + test_config_parse_sec_one("1s", 1 * USEC_PER_SEC); + test_config_parse_sec_one("100ms", 100 * USEC_PER_MSEC); + test_config_parse_sec_one("5min 20s", 5 * 60 * USEC_PER_SEC + 20 * USEC_PER_SEC); + + test_config_parse_sec_one("-1", 0); + test_config_parse_sec_one("10foo", 0); + test_config_parse_sec_one("garbage", 0); +} + +static void test_config_parse_nsec(void) { + test_config_parse_nsec_one("1", 1); + test_config_parse_nsec_one("1s", 1 * NSEC_PER_SEC); + test_config_parse_nsec_one("100ms", 100 * NSEC_PER_MSEC); + test_config_parse_nsec_one("5min 20s", 5 * 60 * NSEC_PER_SEC + 20 * NSEC_PER_SEC); + + test_config_parse_nsec_one("-1", 0); + test_config_parse_nsec_one("10foo", 0); + test_config_parse_nsec_one("garbage", 0); +} + +int main(int argc, char **argv) { + log_parse_environment(); + log_open(); + + test_config_parse_path(); + test_config_parse_log_level(); + test_config_parse_log_facility(); + test_config_parse_iec_size(); + test_config_parse_si_size(); + test_config_parse_int(); + test_config_parse_unsigned(); + test_config_parse_strv(); + test_config_parse_mode(); + test_config_parse_sec(); + test_config_parse_nsec(); + + return 0; +} diff --git a/src/test/test-fdset.c b/src/test/test-fdset.c index 91df7eb663..242c5d9dc2 100644 --- a/src/test/test-fdset.c +++ b/src/test/test-fdset.c @@ -154,6 +154,56 @@ static void test_fdset_iterate(void) { unlink(name); } +static void test_fdset_isempty(void) { + int fd; + _cleanup_fdset_free_ FDSet *fdset = NULL; + char name[] = "/tmp/test-fdset_isempty.XXXXXX"; + + fd = mkostemp_safe(name, O_RDWR|O_CLOEXEC); + assert_se(fd >= 0); + + fdset = fdset_new(); + assert_se(fdset); + + assert_se(fdset_isempty(fdset)); + assert_se(fdset_put(fdset, fd) >= 0); + assert_se(!fdset_isempty(fdset)); + + unlink(name); +} + +static void test_fdset_steal_first(void) { + int fd; + _cleanup_fdset_free_ FDSet *fdset = NULL; + char name[] = "/tmp/test-fdset_steal_first.XXXXXX"; + + fd = mkostemp_safe(name, O_RDWR|O_CLOEXEC); + assert_se(fd >= 0); + + fdset = fdset_new(); + assert_se(fdset); + + assert_se(fdset_steal_first(fdset) < 0); + assert_se(fdset_put(fdset, fd) >= 0); + assert_se(fdset_steal_first(fdset) == fd); + assert_se(fdset_steal_first(fdset) < 0); + assert_se(fdset_put(fdset, fd) >= 0); + + unlink(name); +} + +static void test_fdset_new_array(void) { + int fds[] = {10, 11, 12, 13}; + _cleanup_fdset_free_ FDSet *fdset = NULL; + + assert_se(fdset_new_array(&fdset, fds, 4) >= 0); + assert_se(fdset_size(fdset) == 4); + assert_se(fdset_contains(fdset, 10)); + assert_se(fdset_contains(fdset, 11)); + assert_se(fdset_contains(fdset, 12)); + assert_se(fdset_contains(fdset, 13)); +} + int main(int argc, char *argv[]) { test_fdset_new_fill(); test_fdset_put_dup(); @@ -161,6 +211,9 @@ int main(int argc, char *argv[]) { test_fdset_close_others(); test_fdset_remove(); test_fdset_iterate(); + test_fdset_isempty(); + test_fdset_steal_first(); + test_fdset_new_array(); return 0; } diff --git a/src/test/test-path-util.c b/src/test/test-path-util.c index 09f0f2f89e..0045ae6824 100644 --- a/src/test/test-path-util.c +++ b/src/test/test-path-util.c @@ -21,6 +21,7 @@ #include <stdio.h> #include <unistd.h> +#include <sys/mount.h> #include "path-util.h" #include "util.h" @@ -88,21 +89,9 @@ static void test_path(void) { test_parent("/aa///file...", "/aa///"); test_parent("file.../", NULL); - assert_se(path_is_mount_point("/", true) > 0); - assert_se(path_is_mount_point("/", false) > 0); - fd = open("/", O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOCTTY); assert_se(fd >= 0); - assert_se(fd_is_mount_point(fd) > 0); - - assert_se(path_is_mount_point("/proc", true) > 0); - assert_se(path_is_mount_point("/proc", false) > 0); - - assert_se(path_is_mount_point("/proc/1", true) == 0); - assert_se(path_is_mount_point("/proc/1", false) == 0); - - assert_se(path_is_mount_point("/sys", true) > 0); - assert_se(path_is_mount_point("/sys", false) > 0); + assert_se(fd_is_mount_point(fd, "/", 0) > 0); { char p1[] = "aaa/bbb////ccc"; @@ -322,6 +311,66 @@ static void test_prefix_root(void) { test_prefix_root_one("/foo///", "//bar", "/foo/bar"); } +static void test_path_is_mount_point(void) { + int fd, rt, rf, rlt, rlf; + char tmp_dir[] = "/tmp/test-path-is-mount-point-XXXXXX"; + _cleanup_free_ char *file1 = NULL, *file2 = NULL, *link1 = NULL, *link2 = NULL; + + assert_se(path_is_mount_point("/", AT_SYMLINK_FOLLOW) > 0); + assert_se(path_is_mount_point("/", 0) > 0); + + assert_se(path_is_mount_point("/proc", AT_SYMLINK_FOLLOW) > 0); + assert_se(path_is_mount_point("/proc", 0) > 0); + + assert_se(path_is_mount_point("/proc/1", AT_SYMLINK_FOLLOW) == 0); + assert_se(path_is_mount_point("/proc/1", 0) == 0); + + assert_se(path_is_mount_point("/sys", AT_SYMLINK_FOLLOW) > 0); + assert_se(path_is_mount_point("/sys", 0) > 0); + + /* file mountpoints */ + assert_se(mkdtemp(tmp_dir) != NULL); + file1 = path_join(NULL, tmp_dir, "file1"); + assert_se(file1); + file2 = path_join(NULL, tmp_dir, "file2"); + assert_se(file2); + fd = open(file1, O_WRONLY|O_CREAT|O_EXCL|O_CLOEXEC, 0664); + assert_se(fd > 0); + close(fd); + fd = open(file2, O_WRONLY|O_CREAT|O_EXCL|O_CLOEXEC, 0664); + assert_se(fd > 0); + close(fd); + link1 = path_join(NULL, tmp_dir, "link1"); + assert_se(link1); + assert_se(symlink("file1", link1) == 0); + link2 = path_join(NULL, tmp_dir, "link2"); + assert_se(link1); + assert_se(symlink("file2", link2) == 0); + + assert_se(path_is_mount_point(file1, AT_SYMLINK_FOLLOW) == 0); + assert_se(path_is_mount_point(file1, 0) == 0); + assert_se(path_is_mount_point(link1, AT_SYMLINK_FOLLOW) == 0); + assert_se(path_is_mount_point(link1, 0) == 0); + + /* this test will only work as root */ + if (mount(file1, file2, NULL, MS_BIND, NULL) >= 0) { + rf = path_is_mount_point(file2, 0); + rt = path_is_mount_point(file2, AT_SYMLINK_FOLLOW); + rlf = path_is_mount_point(link2, 0); + rlt = path_is_mount_point(link2, AT_SYMLINK_FOLLOW); + + assert_se(umount(file2) == 0); + + assert_se(rf == 1); + assert_se(rt == 1); + assert_se(rlf == 0); + assert_se(rlt == 1); + } else + printf("Skipping bind mount file test: %m\n"); + + assert_se(rm_rf(tmp_dir, REMOVE_ROOT|REMOVE_PHYSICAL) == 0); +} + int main(int argc, char **argv) { test_path(); test_find_binary(argv[0], true); @@ -333,6 +382,7 @@ int main(int argc, char **argv) { test_strv_resolve(); test_path_startswith(); test_prefix_root(); + test_path_is_mount_point(); return 0; } diff --git a/src/test/test-pty.c b/src/test/test-pty.c index b5f4d4f094..f8807c9150 100644 --- a/src/test/test-pty.c +++ b/src/test/test-pty.c @@ -27,6 +27,7 @@ #include "pty.h" #include "util.h" +#include "signal-util.h" static const char sndmsg[] = "message\n"; static const char rcvmsg[] = "message\r\n"; diff --git a/src/test/test-udev.c b/src/test/test-udev.c index 23b7faa939..d1fe953071 100644 --- a/src/test/test-udev.c +++ b/src/test/test-udev.c @@ -28,6 +28,7 @@ #include "missing.h" #include "selinux-util.h" +#include "signal-util.h" #include "udev.h" #include "udev-util.h" @@ -79,7 +80,6 @@ int main(int argc, char *argv[]) { char syspath[UTIL_PATH_SIZE]; const char *devpath; const char *action; - sigset_t mask, sigmask_orig; int err; err = fake_filesystems(); @@ -93,8 +93,6 @@ int main(int argc, char *argv[]) { log_debug("version %s", VERSION); mac_selinux_init("/dev"); - sigprocmask(SIG_SETMASK, NULL, &sigmask_orig); - action = argv[1]; if (action == NULL) { log_error("action missing"); @@ -118,13 +116,7 @@ int main(int argc, char *argv[]) { event = udev_event_new(dev); - sigfillset(&mask); - sigprocmask(SIG_SETMASK, &mask, &sigmask_orig); - event->fd_signal = signalfd(-1, &mask, SFD_NONBLOCK|SFD_CLOEXEC); - if (event->fd_signal < 0) { - fprintf(stderr, "error creating signalfd\n"); - goto out; - } + assert_se(sigprocmask_many(SIG_BLOCK, SIGTERM, SIGINT, SIGHUP, SIGCHLD, -1) == 0); /* do what devtmpfs usually provides us */ if (udev_device_get_devnode(dev) != NULL) { @@ -147,14 +139,10 @@ int main(int argc, char *argv[]) { udev_event_execute_rules(event, 3 * USEC_PER_SEC, USEC_PER_SEC, NULL, - rules, - &sigmask_orig); + rules); udev_event_execute_run(event, - 3 * USEC_PER_SEC, USEC_PER_SEC, - NULL); + 3 * USEC_PER_SEC, USEC_PER_SEC); out: - if (event != NULL && event->fd_signal >= 0) - close(event->fd_signal); mac_selinux_finish(); return err ? EXIT_FAILURE : EXIT_SUCCESS; diff --git a/src/test/test-unit-file.c b/src/test/test-unit-file.c index a9711ac9f5..a8025c825b 100644 --- a/src/test/test-unit-file.c +++ b/src/test/test-unit-file.c @@ -225,6 +225,15 @@ static void test_config_parse_exec(void) { check_execcommand(c1, "/sbin/find", NULL, ";", "x", false); + log_info("/* encoded semicolon */"); + r = config_parse_exec(NULL, "fake", 5, "section", 1, + "LValue", 0, + "/bin/find \\073", + &c, NULL); + assert_se(r >= 0); + c1 = c1->command_next; + check_execcommand(c1, "/bin/find", NULL, ";", NULL, false); + log_info("/* spaces in the filename */"); r = config_parse_exec(NULL, "fake", 5, "section", 1, "LValue", 0, @@ -296,6 +305,16 @@ static void test_config_parse_exec(void) { c1 = c1->command_next; check_execcommand(c1, "/path ", NULL, NULL, NULL, false); + log_info("/* quoted backslashes */"); + r = config_parse_exec(NULL, "fake", 5, "section", 1, + "LValue", 0, + "/bin/grep '\\w+\\K'", + &c, NULL); + assert_se(r >= 0); + c1 = c1->command_next; + check_execcommand(c1, "/bin/grep", NULL, "\\w+\\K", NULL, false); + + log_info("/* trailing backslash: \\ */"); /* backslash is invalid */ r = config_parse_exec(NULL, "fake", 4, "section", 1, diff --git a/src/test/test-util.c b/src/test/test-util.c index 41cbe81b3d..9d5516a18d 100644 --- a/src/test/test-util.c +++ b/src/test/test-util.c @@ -39,6 +39,7 @@ #include "virt.h" #include "process-util.h" #include "hostname-util.h" +#include "signal-util.h" static void test_streq_ptr(void) { assert_se(streq_ptr(NULL, NULL)); @@ -459,6 +460,11 @@ static void test_cunescape(void) { assert_se(cunescape("\\u0000", 0, &unescaped) < 0); assert_se(cunescape("\\u00DF\\U000000df\\u03a0\\U00000041", UNESCAPE_RELAX, &unescaped) >= 0); assert_se(streq_ptr(unescaped, "ßßΠA")); + free(unescaped); + unescaped = NULL; + + assert_se(cunescape("\\073", 0, &unescaped) >= 0); + assert_se(streq_ptr(unescaped, ";")); } static void test_foreach_word(void) { diff --git a/src/timesync/timesyncd.c b/src/timesync/timesyncd.c index 735668bede..d69129ee03 100644 --- a/src/timesync/timesyncd.c +++ b/src/timesync/timesyncd.c @@ -24,6 +24,7 @@ #include "capability.h" #include "clock-util.h" #include "network-util.h" +#include "signal-util.h" #include "timesyncd-manager.h" #include "timesyncd-conf.h" diff --git a/src/tty-ask-password-agent/tty-ask-password-agent.c b/src/tty-ask-password-agent/tty-ask-password-agent.c index c440170f95..97251ef0aa 100644 --- a/src/tty-ask-password-agent/tty-ask-password-agent.c +++ b/src/tty-ask-password-agent/tty-ask-password-agent.c @@ -44,6 +44,7 @@ #include "def.h" #include "process-util.h" #include "terminal-util.h" +#include "signal-util.h" static enum { ACTION_LIST, diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c index ce038abee5..5610b2808e 100644 --- a/src/udev/net/link-config.c +++ b/src/udev/net/link-config.c @@ -240,6 +240,10 @@ int link_config_get(link_config_ctx *ctx, struct udev_device *device, link_config **ret) { link_config *link; + assert(ctx); + assert(device); + assert(ret); + LIST_FOREACH(links, link, ctx->links) { const char* attr_value; diff --git a/src/udev/udev-builtin-hwdb.c b/src/udev/udev-builtin-hwdb.c index 5e0e7ebb11..7dfc74e6fa 100644 --- a/src/udev/udev-builtin-hwdb.c +++ b/src/udev/udev-builtin-hwdb.c @@ -85,6 +85,8 @@ static int udev_builtin_hwdb_search(struct udev_device *dev, struct udev_device bool last = false; int r = 0; + assert(dev); + for (d = srcdev; d && !last; d = udev_device_get_parent(d)) { const char *dsubsys; const char *modalias = NULL; diff --git a/src/udev/udev-builtin-input_id.c b/src/udev/udev-builtin-input_id.c index b14190e423..e3fa4bc162 100644 --- a/src/udev/udev-builtin-input_id.c +++ b/src/udev/udev-builtin-input_id.c @@ -133,79 +133,99 @@ static bool test_pointers(struct udev_device *dev, const unsigned long* bitmask_rel, const unsigned long* bitmask_props, bool test) { - int is_mouse = 0; - int is_touchpad = 0; - bool ret = false; - - if (test_bit(INPUT_PROP_ACCELEROMETER, bitmask_props)) { + bool has_abs_coordinates = false; + bool has_rel_coordinates = false; + bool has_mt_coordinates = false; + bool has_joystick_axes_or_buttons = false; + bool is_direct = false; + bool has_touch = false; + bool has_3d_coordinates = false; + bool has_keys = false; + bool stylus_or_pen = false; + bool finger_but_no_pen = false; + bool has_mouse_button = false; + bool is_mouse = false; + bool is_touchpad = false; + bool is_touchscreen = false; + bool is_tablet = false; + bool is_joystick = false; + bool is_accelerometer = false; + bool is_pointing_stick= false; + + has_keys = test_bit(EV_KEY, bitmask_ev); + has_abs_coordinates = test_bit(ABS_X, bitmask_abs) && test_bit(ABS_Y, bitmask_abs); + has_3d_coordinates = has_abs_coordinates && test_bit(ABS_Z, bitmask_abs); + is_accelerometer = test_bit(INPUT_PROP_ACCELEROMETER, bitmask_props); + + if (!has_keys && has_3d_coordinates) + is_accelerometer = true; + + if (is_accelerometer) { udev_builtin_add_property(dev, test, "ID_INPUT_ACCELEROMETER", "1"); return true; } - if (!test_bit(EV_KEY, bitmask_ev)) { - if (test_bit(EV_ABS, bitmask_ev) && - test_bit(ABS_X, bitmask_abs) && - test_bit(ABS_Y, bitmask_abs) && - test_bit(ABS_Z, bitmask_abs)) { - udev_builtin_add_property(dev, test, "ID_INPUT_ACCELEROMETER", "1"); - ret = true; - } - return ret; - } - - if (test_bit(EV_ABS, bitmask_ev) && - test_bit(ABS_X, bitmask_abs) && test_bit(ABS_Y, bitmask_abs)) { - if (test_bit(BTN_STYLUS, bitmask_key) || test_bit(BTN_TOOL_PEN, bitmask_key)) { - udev_builtin_add_property(dev, test, "ID_INPUT_TABLET", "1"); - ret = true; - } else if (test_bit(BTN_TOOL_FINGER, bitmask_key) && !test_bit(BTN_TOOL_PEN, bitmask_key)) { - is_touchpad = 1; - } else if (test_bit(BTN_MOUSE, bitmask_key)) { + is_pointing_stick = test_bit(INPUT_PROP_POINTING_STICK, bitmask_props); + stylus_or_pen = test_bit(BTN_STYLUS, bitmask_key) || test_bit(BTN_TOOL_PEN, bitmask_key); + finger_but_no_pen = test_bit(BTN_TOOL_FINGER, bitmask_key) && !test_bit(BTN_TOOL_PEN, bitmask_key); + has_mouse_button = test_bit(BTN_LEFT, bitmask_key); + has_rel_coordinates = test_bit(EV_REL, bitmask_ev) && test_bit(REL_X, bitmask_rel) && test_bit(REL_Y, bitmask_rel); + has_mt_coordinates = test_bit(ABS_MT_POSITION_X, bitmask_abs) && test_bit(ABS_MT_POSITION_Y, bitmask_abs); + + /* unset has_mt_coordinates if devices claims to have all abs axis */ + if(has_mt_coordinates && test_bit(ABS_MT_SLOT, bitmask_abs) && test_bit(ABS_MT_SLOT - 1, bitmask_abs)) + has_mt_coordinates = false; + is_direct = test_bit(INPUT_PROP_DIRECT, bitmask_props); + has_touch = test_bit(BTN_TOUCH, bitmask_key); + /* joysticks don't necessarily have buttons; e. g. + * rudders/pedals are joystick-like, but buttonless; they have + * other fancy axes */ + has_joystick_axes_or_buttons = test_bit(BTN_TRIGGER, bitmask_key) || + test_bit(BTN_A, bitmask_key) || + test_bit(BTN_1, bitmask_key) || + test_bit(ABS_RX, bitmask_abs) || + test_bit(ABS_RY, bitmask_abs) || + test_bit(ABS_RZ, bitmask_abs) || + test_bit(ABS_THROTTLE, bitmask_abs) || + test_bit(ABS_RUDDER, bitmask_abs) || + test_bit(ABS_WHEEL, bitmask_abs) || + test_bit(ABS_GAS, bitmask_abs) || + test_bit(ABS_BRAKE, bitmask_abs); + + if (has_abs_coordinates) { + if (stylus_or_pen) + is_tablet = true; + else if (finger_but_no_pen && !is_direct) + is_touchpad = true; + else if (has_mouse_button) /* This path is taken by VMware's USB mouse, which has * absolute axes, but no touch/pressure button. */ - is_mouse = 1; - } else if (test_bit(BTN_TOUCH, bitmask_key)) { - udev_builtin_add_property(dev, test, "ID_INPUT_TOUCHSCREEN", "1"); - ret = true; - /* joysticks don't necessarily have to have buttons; e. g. - * rudders/pedals are joystick-like, but buttonless; they have - * other fancy axes */ - } else if (test_bit(BTN_TRIGGER, bitmask_key) || - test_bit(BTN_A, bitmask_key) || - test_bit(BTN_1, bitmask_key) || - test_bit(ABS_RX, bitmask_abs) || - test_bit(ABS_RY, bitmask_abs) || - test_bit(ABS_RZ, bitmask_abs) || - test_bit(ABS_THROTTLE, bitmask_abs) || - test_bit(ABS_RUDDER, bitmask_abs) || - test_bit(ABS_WHEEL, bitmask_abs) || - test_bit(ABS_GAS, bitmask_abs) || - test_bit(ABS_BRAKE, bitmask_abs)) { - udev_builtin_add_property(dev, test, "ID_INPUT_JOYSTICK", "1"); - ret = true; - } + is_mouse = true; + else if (has_touch) + is_touchscreen = true; + else if (has_joystick_axes_or_buttons) + is_joystick = true; } + if (has_mt_coordinates && is_direct) + is_touchscreen = true; - if (test_bit(INPUT_PROP_POINTING_STICK, bitmask_props)) { - udev_builtin_add_property(dev, test, "ID_INPUT_POINTINGSTICK", "1"); - ret = true; - } + if (has_rel_coordinates && has_mouse_button) + is_mouse = true; - if (test_bit(EV_REL, bitmask_ev) && - test_bit(REL_X, bitmask_rel) && test_bit(REL_Y, bitmask_rel) && - test_bit(BTN_MOUSE, bitmask_key)) - is_mouse = 1; - - if (is_mouse) { + if (is_pointing_stick) + udev_builtin_add_property(dev, test, "ID_INPUT_POINTINGSTICK", "1"); + if (is_mouse) udev_builtin_add_property(dev, test, "ID_INPUT_MOUSE", "1"); - ret = true; - } - if (is_touchpad) { + if (is_touchpad) udev_builtin_add_property(dev, test, "ID_INPUT_TOUCHPAD", "1"); - ret = true; - } - - return ret; + if (is_touchscreen) + udev_builtin_add_property(dev, test, "ID_INPUT_TOUCHSCREEN", "1"); + if (is_joystick) + udev_builtin_add_property(dev, test, "ID_INPUT_JOYSTICK", "1"); + if (is_tablet) + udev_builtin_add_property(dev, test, "ID_INPUT_TABLET", "1"); + + return is_tablet || is_mouse || is_touchpad || is_touchscreen || is_joystick || is_pointing_stick; } /* key like devices */ @@ -268,6 +288,8 @@ static int builtin_input_id(struct udev_device *dev, int argc, char *argv[], boo bool is_pointer; bool is_key; + assert(dev); + /* walk up the parental chain until we find the real input device; the * argument is very likely a subdevice of this, like eventN */ pdev = dev; diff --git a/src/udev/udev-builtin-keyboard.c b/src/udev/udev-builtin-keyboard.c index ed990c58fb..01f3879f37 100644 --- a/src/udev/udev-builtin-keyboard.c +++ b/src/udev/udev-builtin-keyboard.c @@ -37,6 +37,9 @@ static int install_force_release(struct udev_device *dev, const unsigned *releas unsigned i; int ret; + assert(dev); + assert(release); + atkbd = udev_device_get_parent_with_subsystem_devtype(dev, "serio", NULL); if (!atkbd) return -ENODEV; @@ -152,6 +155,9 @@ static void set_trackpoint_sensitivity(struct udev_device *dev, const char *valu char val_s[DECIMAL_STR_MAX(int)]; int r, val_i; + assert(dev); + assert(value); + /* The sensitivity sysfs attr belongs to the serio parent device */ pdev = udev_device_get_parent_with_subsystem_devtype(dev, "serio", NULL); if (!pdev) { diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c index 448920507a..6e7e1271fb 100644 --- a/src/udev/udev-builtin-net_id.c +++ b/src/udev/udev-builtin-net_id.c @@ -276,6 +276,9 @@ out: static int names_pci(struct udev_device *dev, struct netnames *names) { struct udev_device *parent; + assert(dev); + assert(names); + parent = udev_device_get_parent(dev); if (!parent) return -ENOENT; @@ -302,6 +305,9 @@ static int names_usb(struct udev_device *dev, struct netnames *names) { size_t l; char *s; + assert(dev); + assert(names); + usbdev = udev_device_get_parent_with_subsystem_devtype(dev, "usb", "usb_interface"); if (!usbdev) return -ENOENT; @@ -350,6 +356,9 @@ static int names_bcma(struct udev_device *dev, struct netnames *names) { struct udev_device *bcmadev; unsigned int core; + assert(dev); + assert(names); + bcmadev = udev_device_get_parent_with_subsystem_devtype(dev, "bcma", NULL); if (!bcmadev) return -ENOENT; @@ -371,6 +380,9 @@ static int names_ccw(struct udev_device *dev, struct netnames *names) { size_t bus_id_len; int rc; + assert(dev); + assert(names); + /* Retrieve the associated CCW device */ cdev = udev_device_get_parent(dev); if (!cdev) diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c index b6749aab76..4ca0a69d7d 100644 --- a/src/udev/udev-builtin-path_id.c +++ b/src/udev/udev-builtin-path_id.c @@ -77,6 +77,9 @@ static int format_lun_number(struct udev_device *dev, char **path) { static struct udev_device *skip_subsystem(struct udev_device *dev, const char *subsys) { struct udev_device *parent = dev; + assert(dev); + assert(subsys); + while (parent != NULL) { const char *subsystem; @@ -96,6 +99,9 @@ static struct udev_device *handle_scsi_fibre_channel(struct udev_device *parent, const char *port; char *lun = NULL; + assert(parent); + assert(path); + targetdev = udev_device_get_parent_with_subsystem_devtype(parent, "scsi", "scsi_target"); if (targetdev == NULL) return NULL; @@ -126,6 +132,9 @@ static struct udev_device *handle_scsi_sas_wide_port(struct udev_device *parent, const char *sas_address; char *lun = NULL; + assert(parent); + assert(path); + targetdev = udev_device_get_parent_with_subsystem_devtype(parent, "scsi", "scsi_target"); if (targetdev == NULL) return NULL; @@ -169,6 +178,9 @@ static struct udev_device *handle_scsi_sas(struct udev_device *parent, char **pa const char *phy_count; char *lun = NULL; + assert(parent); + assert(path); + targetdev = udev_device_get_parent_with_subsystem_devtype(parent, "scsi", "scsi_target"); if (targetdev == NULL) return NULL; @@ -259,6 +271,9 @@ static struct udev_device *handle_scsi_iscsi(struct udev_device *parent, char ** const char *port; char *lun = NULL; + assert(parent); + assert(path); + /* find iscsi session */ transportdev = parent; for (;;) { @@ -316,6 +331,9 @@ static struct udev_device *handle_scsi_default(struct udev_device *parent, char struct dirent *dent; int basenum; + assert(parent); + assert(path); + hostdev = udev_device_get_parent_with_subsystem_devtype(parent, "scsi", "scsi_host"); if (hostdev == NULL) return NULL; @@ -398,6 +416,9 @@ static struct udev_device *handle_scsi_hyperv(struct udev_device *parent, char * char guid[38]; size_t i, k; + assert(parent); + assert(path); + hostdev = udev_device_get_parent_with_subsystem_devtype(parent, "scsi", "scsi_host"); if (!hostdev) return NULL; @@ -555,6 +576,10 @@ static struct udev_device *handle_bcma(struct udev_device *parent, char **path) static struct udev_device *handle_ccw(struct udev_device *parent, struct udev_device *dev, char **path) { struct udev_device *scsi_dev; + assert(parent); + assert(dev); + assert(path); + scsi_dev = udev_device_get_parent_with_subsystem_devtype(dev, "scsi", "scsi_device"); if (scsi_dev != NULL) { const char *wwpn; @@ -582,6 +607,8 @@ static int builtin_path_id(struct udev_device *dev, int argc, char *argv[], bool bool supported_transport = false; bool supported_parent = false; + assert(dev); + /* S390 ccw bus */ parent = udev_device_get_parent_with_subsystem_devtype(dev, "ccw", NULL); if (parent != NULL) { @@ -638,7 +665,8 @@ static int builtin_path_id(struct udev_device *dev, int argc, char *argv[], bool supported_parent = true; } - parent = udev_device_get_parent(parent); + if (parent) + parent = udev_device_get_parent(parent); } /* diff --git a/src/udev/udev-builtin-usb_id.c b/src/udev/udev-builtin-usb_id.c index 462efc5c86..d309dc31cb 100644 --- a/src/udev/udev-builtin-usb_id.c +++ b/src/udev/udev-builtin-usb_id.c @@ -252,6 +252,8 @@ static int builtin_usb_id(struct udev_device *dev, int argc, char *argv[], bool size_t l; char *s; + assert(dev); + /* shortcut, if we are called directly for a "usb_device" type */ if (udev_device_get_devtype(dev) != NULL && streq(udev_device_get_devtype(dev), "usb_device")) { dev_if_packed_info(dev, packed_if_str, sizeof(packed_if_str)); diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c index 2fa26a40be..4dcf8f2e1c 100644 --- a/src/udev/udev-event.c +++ b/src/udev/udev-event.c @@ -30,9 +30,19 @@ #include <sys/wait.h> #include <sys/signalfd.h> -#include "udev.h" #include "rtnl-util.h" +#include "event-util.h" #include "formats-util.h" +#include "process-util.h" +#include "signal-util.h" +#include "udev.h" + +typedef struct Spawn { + const char *cmd; + pid_t pid; + usec_t timeout_warn; + usec_t timeout; +} Spawn; struct udev_event *udev_event_new(struct udev_device *dev) { struct udev *udev = udev_device_get_udev(dev); @@ -45,8 +55,7 @@ struct udev_event *udev_event_new(struct udev_device *dev) { event->udev = udev; udev_list_init(udev, &event->run_list, false); udev_list_init(udev, &event->seclabel_list, false); - event->fd_signal = -1; - event->birth_usec = now(CLOCK_MONOTONIC); + event->birth_usec = clock_boottime_or_monotonic(); return event; } @@ -110,6 +119,8 @@ size_t udev_event_apply_format(struct udev_event *event, const char *src, char * char *s; size_t l; + assert(dev); + from = src; s = dest; l = size; @@ -374,7 +385,7 @@ out: } static int spawn_exec(struct udev_event *event, - const char *cmd, char *const argv[], char **envp, const sigset_t *sigmask, + const char *cmd, char *const argv[], char **envp, int fd_stdout, int fd_stderr) { _cleanup_close_ int fd = -1; @@ -402,9 +413,8 @@ static int spawn_exec(struct udev_event *event, /* terminate child in case parent goes away */ prctl(PR_SET_PDEATHSIG, SIGTERM); - /* restore original udev sigmask before exec */ - if (sigmask) - sigprocmask(SIG_SETMASK, sigmask, NULL); + /* restore sigmask before exec */ + (void) reset_signal_mask(); execve(argv[0], argv, envp); @@ -467,7 +477,7 @@ static void spawn_read(struct udev_event *event, if (timeout_usec > 0) { usec_t age_usec; - age_usec = now(CLOCK_MONOTONIC) - event->birth_usec; + age_usec = clock_boottime_or_monotonic() - event->birth_usec; if (age_usec >= timeout_usec) { log_error("timeout '%s'", cmd); return; @@ -540,102 +550,116 @@ static void spawn_read(struct udev_event *event, result[respos] = '\0'; } +static int on_spawn_timeout(sd_event_source *s, uint64_t usec, void *userdata) { + Spawn *spawn = userdata; + char timeout[FORMAT_TIMESTAMP_RELATIVE_MAX]; + + assert(spawn); + + kill_and_sigcont(spawn->pid, SIGKILL); + + log_error("spawned process '%s' ["PID_FMT"] timed out after %s, killing", spawn->cmd, spawn->pid, + format_timestamp_relative(timeout, sizeof(timeout), spawn->timeout)); + + return 1; +} + +static int on_spawn_timeout_warning(sd_event_source *s, uint64_t usec, void *userdata) { + Spawn *spawn = userdata; + char timeout[FORMAT_TIMESTAMP_RELATIVE_MAX]; + + assert(spawn); + + log_warning("spawned process '%s' ["PID_FMT"] is taking longer than %s to complete", spawn->cmd, spawn->pid, + format_timestamp_relative(timeout, sizeof(timeout), spawn->timeout)); + + return 1; +} + +static int on_spawn_sigchld(sd_event_source *s, const siginfo_t *si, void *userdata) { + Spawn *spawn = userdata; + + assert(spawn); + + switch (si->si_code) { + case CLD_EXITED: + if (si->si_status != 0) + log_warning("process '%s' failed with exit code %i.", spawn->cmd, si->si_status); + else { + log_debug("process '%s' succeeded.", spawn->cmd); + sd_event_exit(sd_event_source_get_event(s), 0); + + return 1; + } + + break; + case CLD_KILLED: + case CLD_DUMPED: + log_warning("process '%s' terminated by signal %s.", spawn->cmd, signal_to_string(si->si_status)); + + break; + default: + log_error("process '%s' failed due to unknown reason.", spawn->cmd); + } + + sd_event_exit(sd_event_source_get_event(s), -EIO); + + return 1; +} + static int spawn_wait(struct udev_event *event, usec_t timeout_usec, usec_t timeout_warn_usec, const char *cmd, pid_t pid) { - struct pollfd pfd[1]; - int err = 0; + Spawn spawn = { + .cmd = cmd, + .pid = pid, + }; + _cleanup_event_unref_ sd_event *e = NULL; + int r, ret; - pfd[0].events = POLLIN; - pfd[0].fd = event->fd_signal; + r = sd_event_new(&e); + if (r < 0) + return r; - while (pid > 0) { - int timeout; - int timeout_warn = 0; - int fdcount; + if (timeout_usec > 0) { + usec_t usec, age_usec; - if (timeout_usec > 0) { - usec_t age_usec; + usec = now(clock_boottime_or_monotonic()); + age_usec = usec - event->birth_usec; + if (age_usec < timeout_usec) { + if (timeout_warn_usec > 0 && timeout_warn_usec < timeout_usec && age_usec < timeout_warn_usec) { + spawn.timeout_warn = timeout_warn_usec - age_usec; - age_usec = now(CLOCK_MONOTONIC) - event->birth_usec; - if (age_usec >= timeout_usec) - timeout = 1000; - else { - if (timeout_warn_usec > 0) - timeout_warn = ((timeout_warn_usec - age_usec) / USEC_PER_MSEC) + MSEC_PER_SEC; - - timeout = ((timeout_usec - timeout_warn_usec - age_usec) / USEC_PER_MSEC) + MSEC_PER_SEC; + r = sd_event_add_time(e, NULL, clock_boottime_or_monotonic(), + usec + spawn.timeout_warn, USEC_PER_SEC, + on_spawn_timeout_warning, &spawn); + if (r < 0) + return r; } - } else { - timeout = -1; - } - fdcount = poll(pfd, 1, timeout_warn); - if (fdcount < 0) { - if (errno == EINTR) - continue; - err = -errno; - log_error_errno(errno, "failed to poll: %m"); - goto out; - } - if (fdcount == 0) { - log_warning("slow: '%s' ["PID_FMT"]", cmd, pid); + spawn.timeout = timeout_usec - age_usec; - fdcount = poll(pfd, 1, timeout); - if (fdcount < 0) { - if (errno == EINTR) - continue; - err = -errno; - log_error_errno(errno, "failed to poll: %m"); - goto out; - } - if (fdcount == 0) { - log_error("timeout: killing '%s' ["PID_FMT"]", cmd, pid); - kill(pid, SIGKILL); - } + r = sd_event_add_time(e, NULL, clock_boottime_or_monotonic(), + usec + spawn.timeout, USEC_PER_SEC, on_spawn_timeout, &spawn); + if (r < 0) + return r; } + } - if (pfd[0].revents & POLLIN) { - struct signalfd_siginfo fdsi; - int status; - ssize_t size; + r = sd_event_add_child(e, NULL, pid, WEXITED, on_spawn_sigchld, &spawn); + if (r < 0) + return r; - size = read(event->fd_signal, &fdsi, sizeof(struct signalfd_siginfo)); - if (size != sizeof(struct signalfd_siginfo)) - continue; + r = sd_event_loop(e); + if (r < 0) + return r; - switch (fdsi.ssi_signo) { - case SIGTERM: - event->sigterm = true; - break; - case SIGCHLD: - if (waitpid(pid, &status, WNOHANG) < 0) - break; - if (WIFEXITED(status)) { - log_debug("'%s' ["PID_FMT"] exit with return code %i", cmd, pid, WEXITSTATUS(status)); - if (WEXITSTATUS(status) != 0) - err = -1; - } else if (WIFSIGNALED(status)) { - log_error("'%s' ["PID_FMT"] terminated by signal %i (%s)", cmd, pid, WTERMSIG(status), strsignal(WTERMSIG(status))); - err = -1; - } else if (WIFSTOPPED(status)) { - log_error("'%s' ["PID_FMT"] stopped", cmd, pid); - err = -1; - } else if (WIFCONTINUED(status)) { - log_error("'%s' ["PID_FMT"] continued", cmd, pid); - err = -1; - } else { - log_error("'%s' ["PID_FMT"] exit with status 0x%04x", cmd, pid, status); - err = -1; - } - pid = 0; - break; - } - } - } -out: - return err; + r = sd_event_get_exit_code(e, &ret); + if (r < 0) + return r; + + return ret; } int udev_build_argv(struct udev *udev, char *cmd, int *argc, char *argv[]) { @@ -674,7 +698,7 @@ out: int udev_event_spawn(struct udev_event *event, usec_t timeout_usec, usec_t timeout_warn_usec, - const char *cmd, char **envp, const sigset_t *sigmask, + const char *cmd, char **envp, char *result, size_t ressize) { int outpipe[2] = {-1, -1}; int errpipe[2] = {-1, -1}; @@ -724,7 +748,7 @@ int udev_event_spawn(struct udev_event *event, log_debug("starting '%s'", cmd); - spawn_exec(event, cmd, argv, envp, sigmask, + spawn_exec(event, cmd, argv, envp, outpipe[WRITE_END], errpipe[WRITE_END]); _exit(2 ); @@ -786,8 +810,7 @@ static int rename_netif(struct udev_event *event) { void udev_event_execute_rules(struct udev_event *event, usec_t timeout_usec, usec_t timeout_warn_usec, struct udev_list *properties_list, - struct udev_rules *rules, - const sigset_t *sigmask) { + struct udev_rules *rules) { struct udev_device *dev = event->dev; if (udev_device_get_subsystem(dev) == NULL) @@ -803,8 +826,7 @@ void udev_event_execute_rules(struct udev_event *event, udev_rules_apply_to_event(rules, event, timeout_usec, timeout_warn_usec, - properties_list, - sigmask); + properties_list); if (major(udev_device_get_devnum(dev)) != 0) udev_node_remove(dev); @@ -822,8 +844,7 @@ void udev_event_execute_rules(struct udev_event *event, udev_rules_apply_to_event(rules, event, timeout_usec, timeout_warn_usec, - properties_list, - sigmask); + properties_list); /* rename a new network interface, if needed */ if (udev_device_get_ifindex(dev) > 0 && streq(udev_device_get_action(dev), "add") && @@ -886,7 +907,7 @@ void udev_event_execute_rules(struct udev_event *event, } } -void udev_event_execute_run(struct udev_event *event, usec_t timeout_usec, usec_t timeout_warn_usec, const sigset_t *sigmask) { +void udev_event_execute_run(struct udev_event *event, usec_t timeout_usec, usec_t timeout_warn_usec) { struct udev_list_entry *list_entry; udev_list_entry_foreach(list_entry, udev_list_get_entry(&event->run_list)) { @@ -909,7 +930,7 @@ void udev_event_execute_run(struct udev_event *event, usec_t timeout_usec, usec_ udev_event_apply_format(event, cmd, program, sizeof(program)); envp = udev_device_get_properties_envp(event->dev); - udev_event_spawn(event, timeout_usec, timeout_warn_usec, program, envp, sigmask, NULL, 0); + udev_event_spawn(event, timeout_usec, timeout_warn_usec, program, envp, NULL, 0); } } } diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c index 4262119886..915371525f 100644 --- a/src/udev/udev-rules.c +++ b/src/udev/udev-rules.c @@ -633,7 +633,7 @@ static int import_file_into_properties(struct udev_device *dev, const char *file static int import_program_into_properties(struct udev_event *event, usec_t timeout_usec, usec_t timeout_warn_usec, - const char *program, const sigset_t *sigmask) { + const char *program) { struct udev_device *dev = event->dev; char **envp; char result[UTIL_LINE_SIZE]; @@ -641,7 +641,7 @@ static int import_program_into_properties(struct udev_event *event, int err; envp = udev_device_get_properties_envp(dev); - err = udev_event_spawn(event, timeout_usec, timeout_warn_usec, program, envp, sigmask, result, sizeof(result)); + err = udev_event_spawn(event, timeout_usec, timeout_warn_usec, program, envp, result, sizeof(result)); if (err < 0) return err; @@ -664,6 +664,9 @@ static int import_parent_into_properties(struct udev_device *dev, const char *fi struct udev_device *dev_parent; struct udev_list_entry *list_entry; + assert(dev); + assert(filter); + dev_parent = udev_device_get_parent(dev); if (dev_parent == NULL) return -1; @@ -1892,8 +1895,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event, usec_t timeout_usec, usec_t timeout_warn_usec, - struct udev_list *properties_list, - const sigset_t *sigmask) { + struct udev_list *properties_list) { struct token *cur; struct token *rule; enum escape_type esc = ESCAPE_UNSET; @@ -2129,7 +2131,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules, rules_str(rules, rule->rule.filename_off), rule->rule.filename_line); - if (udev_event_spawn(event, timeout_usec, timeout_warn_usec, program, envp, sigmask, result, sizeof(result)) < 0) { + if (udev_event_spawn(event, timeout_usec, timeout_warn_usec, program, envp, result, sizeof(result)) < 0) { if (cur->key.op != OP_NOMATCH) goto nomatch; } else { @@ -2165,7 +2167,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules, rules_str(rules, rule->rule.filename_off), rule->rule.filename_line); - if (import_program_into_properties(event, timeout_usec, timeout_warn_usec, import, sigmask) != 0) + if (import_program_into_properties(event, timeout_usec, timeout_warn_usec, import) != 0) if (cur->key.op != OP_NOMATCH) goto nomatch; break; diff --git a/src/udev/udev.h b/src/udev/udev.h index dece6eccab..fd8504c424 100644 --- a/src/udev/udev.h +++ b/src/udev/udev.h @@ -20,7 +20,6 @@ #include <sys/types.h> #include <sys/param.h> -#include <signal.h> #include "macro.h" #include "sd-rtnl.h" @@ -44,11 +43,9 @@ struct udev_event { struct udev_list run_list; int exec_delay; usec_t birth_usec; - int fd_signal; sd_rtnl *rtnl; unsigned int builtin_run; unsigned int builtin_ret; - bool sigterm; bool inotify_watch; bool inotify_watch_final; bool group_set; @@ -75,8 +72,7 @@ struct udev_rules *udev_rules_unref(struct udev_rules *rules); bool udev_rules_check_timestamp(struct udev_rules *rules); int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event, usec_t timeout_usec, usec_t timeout_warn_usec, - struct udev_list *properties_list, - const sigset_t *sigmask); + struct udev_list *properties_list); int udev_rules_apply_static_dev_perms(struct udev_rules *rules); /* udev-event.c */ @@ -88,14 +84,13 @@ int udev_event_apply_subsys_kernel(struct udev_event *event, const char *string, int udev_event_spawn(struct udev_event *event, usec_t timeout_usec, usec_t timeout_warn_usec, - const char *cmd, char **envp, const sigset_t *sigmask, + const char *cmd, char **envp, char *result, size_t ressize); void udev_event_execute_rules(struct udev_event *event, usec_t timeout_usec, usec_t timeout_warn_usec, struct udev_list *properties_list, - struct udev_rules *rules, - const sigset_t *sigset); -void udev_event_execute_run(struct udev_event *event, usec_t timeout_usec, usec_t timeout_warn_usec, const sigset_t *sigset); + struct udev_rules *rules); +void udev_event_execute_run(struct udev_event *event, usec_t timeout_usec, usec_t timeout_warn_usec); int udev_build_argv(struct udev *udev, char *cmd, int *argc, char *argv[]); /* udev-watch.c */ diff --git a/src/udev/udevadm-test.c b/src/udev/udevadm-test.c index fe092cfbd9..d04e618d0d 100644 --- a/src/udev/udevadm-test.c +++ b/src/udev/udevadm-test.c @@ -131,18 +131,11 @@ static int adm_test(struct udev *udev, int argc, char *argv[]) { sigfillset(&mask); sigprocmask(SIG_SETMASK, &mask, &sigmask_orig); - event->fd_signal = signalfd(-1, &mask, SFD_NONBLOCK|SFD_CLOEXEC); - if (event->fd_signal < 0) { - fprintf(stderr, "error creating signalfd\n"); - rc = 5; - goto out; - } udev_event_execute_rules(event, 60 * USEC_PER_SEC, 20 * USEC_PER_SEC, NULL, - rules, - &sigmask_orig); + rules); udev_list_entry_foreach(entry, udev_device_get_properties_list_entry(dev)) printf("%s=%s\n", udev_list_entry_get_name(entry), udev_list_entry_get_value(entry)); @@ -154,8 +147,6 @@ static int adm_test(struct udev *udev, int argc, char *argv[]) { printf("run: '%s'\n", program); } out: - if (event != NULL && event->fd_signal >= 0) - close(event->fd_signal); udev_builtin_exit(udev); return rc; } diff --git a/src/udev/udevd.c b/src/udev/udevd.c index 299fda8a3a..eb43091190 100644 --- a/src/udev/udevd.c +++ b/src/udev/udevd.c @@ -41,6 +41,10 @@ #include <sys/inotify.h> #include "sd-daemon.h" +#include "sd-event.h" + +#include "signal-util.h" +#include "event-util.h" #include "rtnl-util.h" #include "cgroup-util.h" #include "process-util.h" @@ -62,11 +66,11 @@ static usec_t arg_event_timeout_warn_usec = 180 * USEC_PER_SEC / 3; typedef struct Manager { struct udev *udev; + sd_event *event; Hashmap *workers; struct udev_list_node events; - char *cgroup; + const char *cgroup; pid_t pid; /* the process that originally allocated the manager object */ - sigset_t sigmask_orig; struct udev_rules *rules; struct udev_list properties; @@ -74,17 +78,16 @@ typedef struct Manager { struct udev_monitor *monitor; struct udev_ctrl *ctrl; struct udev_ctrl_connection *ctrl_conn_blocking; - - int fd_ep; - int fd_ctrl; - int fd_uevent; - int fd_signal; int fd_inotify; - int fd_worker; int worker_watch[2]; + sd_event_source *ctrl_event; + sd_event_source *uevent_event; + sd_event_source *inotify_event; + + usec_t last_usec; + bool stop_exec_queue:1; - bool reload:1; bool exit:1; } Manager; @@ -110,8 +113,8 @@ struct event { dev_t devnum; int ifindex; bool is_block; - usec_t start_usec; - bool warned; + sd_event_source *timeout_warning; + sd_event_source *timeout; }; static inline struct event *node_to_event(struct udev_list_node *node) { @@ -151,6 +154,9 @@ static void event_free(struct event *event) { udev_device_unref(event->dev); udev_device_unref(event->dev_kernel); + sd_event_source_unref(event->timeout_warning); + sd_event_source_unref(event->timeout); + if (event->worker) event->worker->event = NULL; @@ -252,7 +258,12 @@ static int on_event_timeout_warning(sd_event_source *s, uint64_t usec, void *use } static void worker_attach_event(struct worker *worker, struct event *event) { + sd_event *e; + uint64_t usec; + int r; + assert(worker); + assert(worker->manager); assert(event); assert(!event->worker); assert(!worker->event); @@ -260,9 +271,19 @@ static void worker_attach_event(struct worker *worker, struct event *event) { worker->state = WORKER_RUNNING; worker->event = event; event->state = EVENT_RUNNING; - event->start_usec = now(CLOCK_MONOTONIC); - event->warned = false; event->worker = worker; + + e = worker->manager->event; + + r = sd_event_now(e, clock_boottime_or_monotonic(), &usec); + if (r < 0) + return; + + (void) sd_event_add_time(e, &event->timeout_warning, clock_boottime_or_monotonic(), + usec + arg_event_timeout_warn_usec, USEC_PER_SEC, on_event_timeout_warning, event); + + (void) sd_event_add_time(e, &event->timeout, clock_boottime_or_monotonic(), + usec + arg_event_timeout_usec, USEC_PER_SEC, on_event_timeout, event); } static void manager_free(Manager *manager) { @@ -271,7 +292,12 @@ static void manager_free(Manager *manager) { udev_builtin_exit(manager->udev); + sd_event_source_unref(manager->ctrl_event); + sd_event_source_unref(manager->uevent_event); + sd_event_source_unref(manager->inotify_event); + udev_unref(manager->udev); + sd_event_unref(manager->event); manager_workers_free(manager); event_queue_cleanup(manager, EVENT_UNDEF); @@ -281,10 +307,7 @@ static void manager_free(Manager *manager) { udev_list_cleanup(&manager->properties); udev_rules_unref(manager->rules); - free(manager->cgroup); - safe_close(manager->fd_ep); - safe_close(manager->fd_signal); safe_close(manager->fd_inotify); safe_close_pair(manager->worker_watch); @@ -328,17 +351,23 @@ static void worker_spawn(Manager *manager, struct event *event) { dev = event->dev; event->dev = NULL; + unsetenv("NOTIFY_SOCKET"); + manager_workers_free(manager); event_queue_cleanup(manager, EVENT_UNDEF); manager->monitor = udev_monitor_unref(manager->monitor); manager->ctrl_conn_blocking = udev_ctrl_connection_unref(manager->ctrl_conn_blocking); manager->ctrl = udev_ctrl_unref(manager->ctrl); - - manager->fd_ep = safe_close(manager->fd_ep); - manager->fd_signal = safe_close(manager->fd_signal); + manager->ctrl_conn_blocking = udev_ctrl_connection_unref(manager->ctrl_conn_blocking); manager->worker_watch[READ_END] = safe_close(manager->worker_watch[READ_END]); + manager->ctrl_event = sd_event_source_unref(manager->ctrl_event); + manager->uevent_event = sd_event_source_unref(manager->uevent_event); + manager->inotify_event = sd_event_source_unref(manager->inotify_event); + + manager->event = sd_event_unref(manager->event); + sigfillset(&mask); fd_signal = signalfd(-1, &mask, SFD_NONBLOCK|SFD_CLOEXEC); if (fd_signal < 0) { @@ -372,6 +401,8 @@ static void worker_spawn(Manager *manager, struct event *event) { struct udev_event *udev_event; int fd_lock = -1; + assert(dev); + log_debug("seq %llu running", udev_device_get_seqnum(dev)); udev_event = udev_event_new(dev); if (udev_event == NULL) { @@ -379,9 +410,6 @@ static void worker_spawn(Manager *manager, struct event *event) { goto out; } - /* needed for SIGCHLD/SIGTERM in spawn() */ - udev_event->fd_signal = fd_signal; - if (arg_exec_delay > 0) udev_event->exec_delay = arg_exec_delay; @@ -420,12 +448,10 @@ static void worker_spawn(Manager *manager, struct event *event) { udev_event_execute_rules(udev_event, arg_event_timeout_usec, arg_event_timeout_warn_usec, &manager->properties, - manager->rules, - &manager->sigmask_orig); + manager->rules); udev_event_execute_run(udev_event, - arg_event_timeout_usec, arg_event_timeout_warn_usec, - &manager->sigmask_orig); + arg_event_timeout_usec, arg_event_timeout_warn_usec); if (udev_event->rtnl) /* in case rtnl was initialized */ @@ -454,11 +480,6 @@ skip: udev_device_unref(dev); dev = NULL; - if (udev_event->sigterm) { - udev_event_unref(udev_event); - goto out; - } - udev_event_unref(udev_event); /* wait for more device messages from main udevd, or term signal */ @@ -689,11 +710,104 @@ static bool is_devpath_busy(Manager *manager, struct event *event) { return false; } +static int on_exit_timeout(sd_event_source *s, uint64_t usec, void *userdata) { + Manager *manager = userdata; + + assert(manager); + + log_error_errno(ETIMEDOUT, "giving up waiting for workers to finish"); + + sd_event_exit(manager->event, -ETIMEDOUT); + + return 1; +} + +static void manager_exit(Manager *manager) { + uint64_t usec; + int r; + + assert(manager); + + manager->exit = true; + + sd_notify(false, + "STOPPING=1\n" + "STATUS=Starting shutdown..."); + + /* close sources of new events and discard buffered events */ + manager->ctrl = udev_ctrl_unref(manager->ctrl); + manager->ctrl_event = sd_event_source_unref(manager->ctrl_event); + + manager->fd_inotify = safe_close(manager->fd_inotify); + manager->inotify_event = sd_event_source_unref(manager->inotify_event); + + manager->monitor = udev_monitor_unref(manager->monitor); + manager->uevent_event = sd_event_source_unref(manager->uevent_event); + + /* discard queued events and kill workers */ + event_queue_cleanup(manager, EVENT_QUEUED); + manager_kill_workers(manager); + + r = sd_event_now(manager->event, clock_boottime_or_monotonic(), &usec); + if (r < 0) + return; + + r = sd_event_add_time(manager->event, NULL, clock_boottime_or_monotonic(), + usec + 30 * USEC_PER_SEC, USEC_PER_SEC, on_exit_timeout, manager); + if (r < 0) + return; +} + +/* reload requested, HUP signal received, rules changed, builtin changed */ +static void manager_reload(Manager *manager) { + + assert(manager); + + sd_notify(false, + "RELOADING=1\n" + "STATUS=Flushing configuration..."); + + manager_kill_workers(manager); + manager->rules = udev_rules_unref(manager->rules); + udev_builtin_exit(manager->udev); + + sd_notify(false, + "READY=1\n" + "STATUS=Processing..."); +} + static void event_queue_start(Manager *manager) { struct udev_list_node *loop; + usec_t usec; + int r; assert(manager); + if (udev_list_node_is_empty(&manager->events) || + manager->exit || manager->stop_exec_queue) + return; + + r = sd_event_now(manager->event, clock_boottime_or_monotonic(), &usec); + if (r >= 0) { + /* check for changed config, every 3 seconds at most */ + if (manager->last_usec == 0 || + (usec - manager->last_usec) > 3 * USEC_PER_SEC) { + if (udev_rules_check_timestamp(manager->rules) || + udev_builtin_validate(manager->udev)) + manager_reload(manager); + + manager->last_usec = usec; + } + } + + udev_builtin_init(manager->udev); + + if (!manager->rules) { + manager->rules = udev_rules_new(manager->udev, arg_resolve_names); + if (!manager->rules) + return; + } + udev_list_node_foreach(loop, &manager->events) { struct event *event = node_to_event(loop); @@ -787,6 +901,9 @@ static int on_worker(sd_event_source *s, int fd, uint32_t revents, void *userdat event_free(worker->event); } + /* we have free workers, try to schedule events */ + event_queue_start(manager); + return 1; } @@ -803,6 +920,9 @@ static int on_uevent(sd_event_source *s, int fd, uint32_t revents, void *userdat r = event_queue_insert(manager, dev); if (r < 0) udev_device_unref(dev); + else + /* we have fresh events, try to schedule them */ + event_queue_start(manager); } return 1; @@ -841,11 +961,12 @@ static int on_ctrl_msg(sd_event_source *s, int fd, uint32_t revents, void *userd if (udev_ctrl_get_start_exec_queue(ctrl_msg) > 0) { log_debug("udevd message (START_EXEC_QUEUE) received"); manager->stop_exec_queue = false; + event_queue_start(manager); } if (udev_ctrl_get_reload(ctrl_msg) > 0) { log_debug("udevd message (RELOAD) received"); - manager->reload = true; + manager_reload(manager); } str = udev_ctrl_get_set_env(ctrl_msg); @@ -884,7 +1005,7 @@ static int on_ctrl_msg(sd_event_source *s, int fd, uint32_t revents, void *userd if (udev_ctrl_get_exit(ctrl_msg) > 0) { log_debug("udevd message (EXIT) received"); - manager->exit = true; + manager_exit(manager); /* keep reference to block the client until we exit TODO: deal with several blocking exit requests */ manager->ctrl_conn_blocking = udev_ctrl_connection_ref(ctrl_conn); @@ -1042,7 +1163,7 @@ static int on_sigterm(sd_event_source *s, const struct signalfd_siginfo *si, voi assert(manager); - manager->exit = true; + manager_exit(manager); return 1; } @@ -1052,7 +1173,7 @@ static int on_sighup(sd_event_source *s, const struct signalfd_siginfo *si, void assert(manager); - manager->reload = true; + manager_reload(manager); return 1; } @@ -1107,41 +1228,124 @@ static int on_sigchld(sd_event_source *s, const struct signalfd_siginfo *si, voi worker_free(worker); } + /* we can start new workers, try to schedule events */ + event_queue_start(manager); + + return 1; +} + +static int on_post(sd_event_source *s, void *userdata) { + Manager *manager = userdata; + int r; + + assert(manager); + + if (udev_list_node_is_empty(&manager->events)) { + /* no pending events */ + if (!hashmap_isempty(manager->workers)) { + /* there are idle workers */ + log_debug("cleanup idle workers"); + manager_kill_workers(manager); + } else { + /* we are idle */ + if (manager->exit) { + r = sd_event_exit(manager->event, 0); + if (r < 0) + return r; + } else if (manager->cgroup) + /* cleanup possible left-over processes in our cgroup */ + cg_kill(SYSTEMD_CGROUP_CONTROLLER, manager->cgroup, SIGKILL, false, true, NULL); + } + } + return 1; } -static int systemd_fds(int *rctrl, int *rnetlink) { - int ctrl = -1, netlink = -1; - int fd, n; +static int listen_fds(int *rctrl, int *rnetlink) { + _cleanup_udev_unref_ struct udev *udev = NULL; + int ctrl_fd = -1, netlink_fd = -1; + int fd, n, r; + + assert(rctrl); + assert(rnetlink); n = sd_listen_fds(true); - if (n <= 0) - return -1; + if (n < 0) + return n; for (fd = SD_LISTEN_FDS_START; fd < n + SD_LISTEN_FDS_START; fd++) { if (sd_is_socket(fd, AF_LOCAL, SOCK_SEQPACKET, -1)) { - if (ctrl >= 0) - return -1; - ctrl = fd; + if (ctrl_fd >= 0) + return -EINVAL; + ctrl_fd = fd; continue; } if (sd_is_socket(fd, AF_NETLINK, SOCK_RAW, -1)) { - if (netlink >= 0) - return -1; - netlink = fd; + if (netlink_fd >= 0) + return -EINVAL; + netlink_fd = fd; continue; } - return -1; + return -EINVAL; + } + + if (ctrl_fd < 0) { + _cleanup_udev_ctrl_unref_ struct udev_ctrl *ctrl = NULL; + + udev = udev_new(); + if (!udev) + return -ENOMEM; + + ctrl = udev_ctrl_new(udev); + if (!ctrl) + return log_error_errno(EINVAL, "error initializing udev control socket"); + + r = udev_ctrl_enable_receiving(ctrl); + if (r < 0) + return log_error_errno(EINVAL, "error binding udev control socket"); + + fd = udev_ctrl_get_fd(ctrl); + if (fd < 0) + return log_error_errno(EIO, "could not get ctrl fd"); + + ctrl_fd = fcntl(fd, F_DUPFD_CLOEXEC, 3); + if (ctrl_fd < 0) + return log_error_errno(errno, "could not dup ctrl fd: %m"); } - if (ctrl < 0 || netlink < 0) - return -1; + if (netlink_fd < 0) { + _cleanup_udev_monitor_unref_ struct udev_monitor *monitor = NULL; + + if (!udev) { + udev = udev_new(); + if (!udev) + return -ENOMEM; + } + + monitor = udev_monitor_new_from_netlink(udev, "kernel"); + if (!monitor) + return log_error_errno(EINVAL, "error initializing netlink socket"); + + (void) udev_monitor_set_receive_buffer_size(monitor, 128 * 1024 * 1024); + + r = udev_monitor_enable_receiving(monitor); + if (r < 0) + return log_error_errno(EINVAL, "error binding netlink socket"); + + fd = udev_monitor_get_fd(monitor); + if (fd < 0) + return log_error_errno(netlink_fd, "could not get uevent fd: %m"); + + netlink_fd = fcntl(fd, F_DUPFD_CLOEXEC, 3); + if (ctrl_fd < 0) + return log_error_errno(errno, "could not dup netlink fd: %m"); + } + + *rctrl = ctrl_fd; + *rnetlink = netlink_fd; - log_debug("ctrl=%i netlink=%i", ctrl, netlink); - *rctrl = ctrl; - *rnetlink = netlink; return 0; } @@ -1286,19 +1490,18 @@ static int parse_argv(int argc, char *argv[]) { return 1; } -static int manager_new(Manager **ret) { +static int manager_new(Manager **ret, int fd_ctrl, int fd_uevent, const char *cgroup) { _cleanup_(manager_freep) Manager *manager = NULL; + int r, fd_worker, one = 1; assert(ret); + assert(fd_ctrl >= 0); + assert(fd_uevent >= 0); manager = new0(Manager, 1); if (!manager) return log_oom(); - manager->fd_ep = -1; - manager->fd_ctrl = -1; - manager->fd_uevent = -1; - manager->fd_signal = -1; manager->fd_inotify = -1; manager->worker_watch[WRITE_END] = -1; manager->worker_watch[READ_END] = -1; @@ -1316,110 +1519,98 @@ static int manager_new(Manager **ret) { udev_list_node_init(&manager->events); udev_list_init(manager->udev, &manager->properties, true); - *ret = manager; - manager = NULL; + manager->cgroup = cgroup; - return 0; -} + manager->ctrl = udev_ctrl_new_from_fd(manager->udev, fd_ctrl); + if (!manager->ctrl) + return log_error_errno(EINVAL, "error taking over udev control socket"); -static int manager_listen(Manager *manager) { - struct epoll_event ep_ctrl = { .events = EPOLLIN }; - struct epoll_event ep_inotify = { .events = EPOLLIN }; - struct epoll_event ep_signal = { .events = EPOLLIN }; - struct epoll_event ep_netlink = { .events = EPOLLIN }; - struct epoll_event ep_worker = { .events = EPOLLIN }; - sigset_t mask; - int r, one = 1; + manager->monitor = udev_monitor_new_from_netlink_fd(manager->udev, "kernel", fd_uevent); + if (!manager->monitor) + return log_error_errno(EINVAL, "error taking over netlink socket"); - assert(manager); + /* unnamed socket from workers to the main daemon */ + r = socketpair(AF_LOCAL, SOCK_DGRAM|SOCK_CLOEXEC, 0, manager->worker_watch); + if (r < 0) + return log_error_errno(errno, "error creating socketpair: %m"); - r = systemd_fds(&manager->fd_ctrl, &manager->fd_uevent); - if (r >= 0) { - /* get control and netlink socket from systemd */ - manager->ctrl = udev_ctrl_new_from_fd(manager->udev, manager->fd_ctrl); - if (!manager->ctrl) - return log_error_errno(EINVAL, "error taking over udev control socket"); + fd_worker = manager->worker_watch[READ_END]; - manager->monitor = udev_monitor_new_from_netlink_fd(manager->udev, "kernel", manager->fd_uevent); - if (!manager->monitor) - return log_error_errno(EINVAL, "error taking over netlink socket"); + r = setsockopt(fd_worker, SOL_SOCKET, SO_PASSCRED, &one, sizeof(one)); + if (r < 0) + return log_error_errno(errno, "could not enable SO_PASSCRED: %m"); - /* get our own cgroup, we regularly kill everything udev has left behind */ - r = cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, 0, &manager->cgroup); - if (r < 0) - log_warning_errno(r, "failed to get cgroup: %m"); - } else { - /* open control and netlink socket */ - manager->ctrl = udev_ctrl_new(manager->udev); - if (!manager->ctrl) - return log_error_errno(EINVAL, "error initializing udev control socket"); + manager->fd_inotify = udev_watch_init(manager->udev); + if (manager->fd_inotify < 0) + return log_error_errno(ENOMEM, "error initializing inotify"); - manager->fd_ctrl = udev_ctrl_get_fd(manager->ctrl); + udev_watch_restore(manager->udev); - manager->monitor = udev_monitor_new_from_netlink(manager->udev, "kernel"); - if (!manager->monitor) - return log_error_errno(EINVAL, "error initializing netlink socket"); + /* block and listen to all signals on signalfd */ + assert_se(sigprocmask_many(SIG_BLOCK, SIGTERM, SIGINT, SIGHUP, SIGCHLD, -1) == 0); - manager->fd_uevent = udev_monitor_get_fd(manager->monitor); + r = sd_event_default(&manager->event); + if (r < 0) + return log_error_errno(errno, "could not allocate event loop: %m"); - (void) udev_monitor_set_receive_buffer_size(manager->monitor, 128 * 1024 * 1024); - } + r = sd_event_add_signal(manager->event, NULL, SIGINT, on_sigterm, manager); + if (r < 0) + return log_error_errno(r, "error creating sigint event source: %m"); - r = udev_monitor_enable_receiving(manager->monitor); + r = sd_event_add_signal(manager->event, NULL, SIGTERM, on_sigterm, manager); if (r < 0) - return log_error_errno(EINVAL, "error binding netlink socket"); + return log_error_errno(r, "error creating sigterm event source: %m"); - r = udev_ctrl_enable_receiving(manager->ctrl); + r = sd_event_add_signal(manager->event, NULL, SIGHUP, on_sighup, manager); if (r < 0) - return log_error_errno(EINVAL, "error binding udev control socket"); + return log_error_errno(r, "error creating sighup event source: %m"); - /* unnamed socket from workers to the main daemon */ - r = socketpair(AF_LOCAL, SOCK_DGRAM|SOCK_CLOEXEC, 0, manager->worker_watch); + r = sd_event_add_signal(manager->event, NULL, SIGCHLD, on_sigchld, manager); if (r < 0) - return log_error_errno(errno, "error creating socketpair: %m"); + return log_error_errno(r, "error creating sigchld event source: %m"); - manager->fd_worker = manager->worker_watch[READ_END]; + r = sd_event_set_watchdog(manager->event, true); + if (r < 0) + return log_error_errno(r, "error creating watchdog event source: %m"); - r = setsockopt(manager->fd_worker, SOL_SOCKET, SO_PASSCRED, &one, sizeof(one)); + r = sd_event_add_io(manager->event, &manager->ctrl_event, fd_ctrl, EPOLLIN, on_ctrl_msg, manager); if (r < 0) - return log_error_errno(errno, "could not enable SO_PASSCRED: %m"); + return log_error_errno(r, "error creating ctrl event source: %m"); - manager->fd_inotify = udev_watch_init(manager->udev); - if (manager->fd_inotify < 0) - return log_error_errno(ENOMEM, "error initializing inotify"); + /* This needs to be after the inotify and uevent handling, to make sure + * that the ping is send back after fully processing the pending uevents + * (including the synthetic ones we may create due to inotify events). + */ + r = sd_event_source_set_priority(manager->ctrl_event, SD_EVENT_PRIORITY_IDLE); + if (r < 0) + return log_error_errno(r, "cold not set IDLE event priority for ctrl event source: %m"); - udev_watch_restore(manager->udev); + r = sd_event_add_io(manager->event, &manager->inotify_event, manager->fd_inotify, EPOLLIN, on_inotify, manager); + if (r < 0) + return log_error_errno(r, "error creating inotify event source: %m"); - /* block and listen to all signals on signalfd */ - sigfillset(&mask); - sigprocmask(SIG_SETMASK, &mask, &manager->sigmask_orig); - manager->fd_signal = signalfd(-1, &mask, SFD_NONBLOCK|SFD_CLOEXEC); - if (manager->fd_signal < 0) - return log_error_errno(errno, "error creating signalfd"); - - ep_ctrl.data.fd = manager->fd_ctrl; - ep_inotify.data.fd = manager->fd_inotify; - ep_signal.data.fd = manager->fd_signal; - ep_netlink.data.fd = manager->fd_uevent; - ep_worker.data.fd = manager->fd_worker; - - manager->fd_ep = epoll_create1(EPOLL_CLOEXEC); - if (manager->fd_ep < 0) - return log_error_errno(errno, "error creating epoll fd: %m"); - - if (epoll_ctl(manager->fd_ep, EPOLL_CTL_ADD, manager->fd_ctrl, &ep_ctrl) < 0 || - epoll_ctl(manager->fd_ep, EPOLL_CTL_ADD, manager->fd_inotify, &ep_inotify) < 0 || - epoll_ctl(manager->fd_ep, EPOLL_CTL_ADD, manager->fd_signal, &ep_signal) < 0 || - epoll_ctl(manager->fd_ep, EPOLL_CTL_ADD, manager->fd_uevent, &ep_netlink) < 0 || - epoll_ctl(manager->fd_ep, EPOLL_CTL_ADD, manager->fd_worker, &ep_worker) < 0) - return log_error_errno(errno, "fail to add fds to epoll: %m"); + r = sd_event_add_io(manager->event, &manager->uevent_event, fd_uevent, EPOLLIN, on_uevent, manager); + if (r < 0) + return log_error_errno(r, "error creating uevent event source: %m"); + + r = sd_event_add_io(manager->event, NULL, fd_worker, EPOLLIN, on_worker, manager); + if (r < 0) + return log_error_errno(r, "error creating worker event source: %m"); + + r = sd_event_add_post(manager->event, NULL, on_post, manager); + if (r < 0) + return log_error_errno(r, "error creating post event source: %m"); + + *ret = manager; + manager = NULL; return 0; } int main(int argc, char *argv[]) { _cleanup_(manager_freep) Manager *manager = NULL; - int r; + _cleanup_free_ char *cgroup = NULL; + int r, fd_ctrl, fd_uevent; log_set_target(LOG_TARGET_AUTO); log_parse_environment(); @@ -1453,23 +1644,6 @@ int main(int argc, char *argv[]) { log_debug("set children_max to %u", arg_children_max); } - /* before opening new files, make sure std{in,out,err} fds are in a sane state */ - if (arg_daemonize) { - int fd; - - fd = open("/dev/null", O_RDWR); - if (fd < 0) - log_error("cannot open /dev/null"); - else { - if (write(STDOUT_FILENO, 0, 0) < 0) - dup2(fd, STDOUT_FILENO); - if (write(STDERR_FILENO, 0, 0) < 0) - dup2(fd, STDERR_FILENO); - if (fd > STDERR_FILENO) - close(fd); - } - } - /* set umask before creating any file/directory */ r = chdir("/"); if (r < 0) { @@ -1493,19 +1667,26 @@ int main(int argc, char *argv[]) { dev_setup(NULL, UID_INVALID, GID_INVALID); - r = manager_new(&manager); - if (r < 0) - goto exit; - - log_info("starting version " VERSION); + if (getppid() == 1) { + /* get our own cgroup, we regularly kill everything udev has left behind + we only do this on systemd systems, and only if we are directly spawned + by PID1. otherwise we are not guaranteed to have a dedicated cgroup */ + r = cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, 0, &cgroup); + if (r < 0) + log_warning_errno(r, "failed to get cgroup: %m"); + } - r = udev_rules_apply_static_dev_perms(manager->rules); - if (r < 0) - log_error_errno(r, "failed to apply permissions on static device nodes: %m"); + r = listen_fds(&fd_ctrl, &fd_uevent); + if (r < 0) { + r = log_error_errno(r, "could not listen on fds: %m"); + goto exit; + } if (arg_daemonize) { pid_t pid; + log_info("starting version " VERSION); + pid = fork(); switch (pid) { case 0: @@ -1522,192 +1703,35 @@ int main(int argc, char *argv[]) { setsid(); write_string_file("/proc/self/oom_score_adj", "-1000"); - } else - sd_notify(1, "READY=1"); - - r = manager_listen(manager); - if (r < 0) - return log_error_errno(r, "failed to set up fds and listen for events: %m"); - - for (;;) { - static usec_t last_usec; - struct epoll_event ev[8]; - int fdcount; - int timeout; - bool is_worker, is_signal, is_inotify, is_uevent, is_ctrl; - int i; - - if (manager->exit) { - /* close sources of new events and discard buffered events */ - if (manager->fd_ctrl >= 0) { - epoll_ctl(manager->fd_ep, EPOLL_CTL_DEL, manager->fd_ctrl, NULL); - manager->fd_ctrl = safe_close(manager->fd_ctrl); - } - - if (manager->monitor) { - epoll_ctl(manager->fd_ep, EPOLL_CTL_DEL, manager->fd_uevent, NULL); - manager->monitor = udev_monitor_unref(manager->monitor); - } - - if (manager->fd_inotify >= 0) { - epoll_ctl(manager->fd_ep, EPOLL_CTL_DEL, manager->fd_inotify, NULL); - manager->fd_inotify = safe_close(manager->fd_inotify); - } - - /* discard queued events and kill workers */ - event_queue_cleanup(manager, EVENT_QUEUED); - manager_kill_workers(manager); - - /* exit after all has cleaned up */ - if (udev_list_node_is_empty(&manager->events) && hashmap_isempty(manager->workers)) - break; - - /* timeout at exit for workers to finish */ - timeout = 30 * MSEC_PER_SEC; - } else if (udev_list_node_is_empty(&manager->events) && hashmap_isempty(manager->workers)) { - /* we are idle */ - timeout = -1; - - /* cleanup possible left-over processes in our cgroup */ - if (manager->cgroup) - cg_kill(SYSTEMD_CGROUP_CONTROLLER, manager->cgroup, SIGKILL, false, true, NULL); - } else { - /* kill idle or hanging workers */ - timeout = 3 * MSEC_PER_SEC; - } - - fdcount = epoll_wait(manager->fd_ep, ev, ELEMENTSOF(ev), timeout); - if (fdcount < 0) - continue; - - if (fdcount == 0) { - struct worker *worker; - Iterator j; - - /* timeout */ - if (manager->exit) { - log_error("timeout, giving up waiting for workers to finish"); - break; - } - - /* kill idle workers */ - if (udev_list_node_is_empty(&manager->events)) { - log_debug("cleanup idle workers"); - manager_kill_workers(manager); - } - - /* check for hanging events */ - HASHMAP_FOREACH(worker, manager->workers, j) { - struct event *event = worker->event; - usec_t ts; - - if (worker->state != WORKER_RUNNING) - continue; - - assert(event); - - ts = now(CLOCK_MONOTONIC); - - if ((ts - event->start_usec) > arg_event_timeout_warn_usec) { - if ((ts - event->start_usec) > arg_event_timeout_usec) - on_event_timeout(NULL, 0, event); - else if (!event->warned) { - on_event_timeout_warning(NULL, 0, event); - event->warned = true; - } - } - } - - } - - is_worker = is_signal = is_inotify = is_uevent = is_ctrl = false; - for (i = 0; i < fdcount; i++) { - if (ev[i].data.fd == manager->fd_worker && ev[i].events & EPOLLIN) - is_worker = true; - else if (ev[i].data.fd == manager->fd_uevent && ev[i].events & EPOLLIN) - is_uevent = true; - else if (ev[i].data.fd == manager->fd_signal && ev[i].events & EPOLLIN) - is_signal = true; - else if (ev[i].data.fd == manager->fd_inotify && ev[i].events & EPOLLIN) - is_inotify = true; - else if (ev[i].data.fd == manager->fd_ctrl && ev[i].events & EPOLLIN) - is_ctrl = true; - } - - /* check for changed config, every 3 seconds at most */ - if ((now(CLOCK_MONOTONIC) - last_usec) > 3 * USEC_PER_SEC) { - if (udev_rules_check_timestamp(manager->rules)) - manager->reload = true; - if (udev_builtin_validate(manager->udev)) - manager->reload = true; - - last_usec = now(CLOCK_MONOTONIC); - } - - /* reload requested, HUP signal received, rules changed, builtin changed */ - if (manager->reload) { - manager_kill_workers(manager); - manager->rules = udev_rules_unref(manager->rules); - udev_builtin_exit(manager->udev); - manager->reload = false; - } - - /* event has finished */ - if (is_worker) - on_worker(NULL, manager->fd_worker, 0, manager); - - /* uevent from kernel */ - if (is_uevent) - on_uevent(NULL, manager->fd_uevent, 0, manager); - - /* start new events */ - if (!udev_list_node_is_empty(&manager->events) && !manager->exit && !manager->stop_exec_queue) { - udev_builtin_init(manager->udev); - if (!manager->rules) - manager->rules = udev_rules_new(manager->udev, arg_resolve_names); - if (manager->rules) - event_queue_start(manager); - } + } - if (is_signal) { - struct signalfd_siginfo fdsi; - ssize_t size; - - size = read(manager->fd_signal, &fdsi, sizeof(struct signalfd_siginfo)); - if (size == sizeof(struct signalfd_siginfo)) { - switch (fdsi.ssi_signo) { - case SIGINT: - case SIGTERM: - on_sigterm(NULL, &fdsi, manager); - break; - case SIGHUP: - on_sighup(NULL, &fdsi, manager); - break; - case SIGCHLD: - on_sigchld(NULL, &fdsi, manager); - break; - } - } - } + r = manager_new(&manager, fd_ctrl, fd_uevent, cgroup); + if (r < 0) { + r = log_error_errno(r, "failed to allocate manager object: %m"); + goto exit; + } - /* we are shutting down, the events below are not handled anymore */ - if (manager->exit) - continue; + r = udev_rules_apply_static_dev_perms(manager->rules); + if (r < 0) + log_error_errno(r, "failed to apply permissions on static device nodes: %m"); - /* device node watch */ - if (is_inotify) - on_inotify(NULL, manager->fd_inotify, 0, manager); + (void) sd_notify(false, + "READY=1\n" + "STATUS=Processing..."); - /* - * This needs to be after the inotify handling, to make sure, - * that the ping is send back after the possibly generated - * "change" events by the inotify device node watch. - */ - if (is_ctrl) - on_ctrl_msg(NULL, manager->fd_ctrl, 0, manager); + r = sd_event_loop(manager->event); + if (r < 0) { + log_error_errno(r, "event loop failed: %m"); + goto exit; } + sd_event_get_exit_code(manager->event, &r); + exit: + sd_notify(false, + "STOPPING=1\n" + "STATUS=Shutting down..."); + if (manager) udev_ctrl_cleanup(manager->ctrl); mac_selinux_finish(); diff --git a/test/README.testsuite b/test/README.testsuite index 2ae85a2ce1..5c7aca43a8 100644 --- a/test/README.testsuite +++ b/test/README.testsuite @@ -10,8 +10,6 @@ $ sudo make clean check make[1]: Entering directory `/mnt/data/harald/git/systemd/test/TEST-01-BASIC' Making all in . Making all in po -Making all in docs/libudev -Making all in docs/gudev TEST: Basic systemd setup [OK] make[1]: Leaving directory `/mnt/data/harald/git/systemd/test/TEST-01-BASIC' ... diff --git a/test/test-functions b/test/test-functions index 901ff48605..8272e52e17 100644 --- a/test/test-functions +++ b/test/test-functions @@ -125,7 +125,7 @@ install_systemd() { # install compiled files (cd $TEST_BASE_DIR/..; set -x; make DESTDIR=$initdir install) # remove unneeded documentation - rm -fr $initdir/usr/share/{man,doc,gtk-doc} + rm -fr $initdir/usr/share/{man,doc} # we strip binaries since debug symbols increase binaries size a lot # and it could fill the available space strip_binaries diff --git a/tmpfiles.d/legacy.conf b/tmpfiles.d/legacy.conf index 32196723f9..3cb0c63815 100644 --- a/tmpfiles.d/legacy.conf +++ b/tmpfiles.d/legacy.conf @@ -26,7 +26,7 @@ d /run/lock/subsys 0755 root root - d /run/lock/lockdev 0775 root lock - -# /forcefsck, /fastboot and /forcequotecheck are deprecated in favor of the +# /forcefsck, /fastboot and /forcequotacheck are deprecated in favor of the # kernel command line options 'fsck.mode=force', 'fsck.mode=skip' and # 'quotacheck.mode=force' diff --git a/units/systemd-udevd.service.in b/units/systemd-udevd.service.in index 32f04d901a..e7216d61f2 100644 --- a/units/systemd-udevd.service.in +++ b/units/systemd-udevd.service.in @@ -23,3 +23,4 @@ RestartSec=0 ExecStart=@rootlibexecdir@/systemd-udevd MountFlags=slave KillMode=mixed +WatchdogSec=1min |