[systemd-commits] Makefile.am src/compat-libs src/libsystemd src/libsystemd-daemon src/systemd
Kay Sievers
kay at kemper.freedesktop.org
Wed Feb 19 01:09:23 CET 2014
Makefile.am | 171 ++-----
src/compat-libs/libsystemd-daemon.pc.in | 19
src/compat-libs/libsystemd-daemon.sym | 32 +
src/libsystemd-daemon/.gitignore | 1
src/libsystemd-daemon/Makefile | 1
src/libsystemd-daemon/libsystemd-daemon.pc.in | 19
src/libsystemd-daemon/libsystemd-daemon.sym | 32 -
src/libsystemd-daemon/sd-daemon.c | 587 --------------------------
src/libsystemd/libsystemd.sym | 15
src/libsystemd/sd-daemon/sd-daemon.c | 537 +++++++++++++++++++++++
src/systemd/sd-daemon.h | 42 -
src/systemd/sd-readahead.h | 2
12 files changed, 655 insertions(+), 803 deletions(-)
New commits:
commit 0ebee8818404adb95a0b8a01416aad3a16f64ae1
Author: Kay Sievers <kay at vrfy.org>
Date: Tue Feb 18 18:50:11 2014 +0100
build-sys: merge libsystemd-daemon into libsystemd
diff --git a/Makefile.am b/Makefile.am
index e9fca3f..9135326 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -48,7 +48,7 @@ LIBSYSTEMD_LOGIN_REVISION=2
LIBSYSTEMD_LOGIN_AGE=9
LIBSYSTEMD_DAEMON_CURRENT=0
-LIBSYSTEMD_DAEMON_REVISION=10
+LIBSYSTEMD_DAEMON_REVISION=11
LIBSYSTEMD_DAEMON_AGE=0
LIBSYSTEMD_ID128_CURRENT=0
@@ -1022,7 +1022,6 @@ libsystemd_core_la_LIBADD = \
libsystemd-capability.la \
libsystemd-units.la \
libsystemd-label.la \
- libsystemd-daemon-internal.la \
libudev-internal.la \
libsystemd-shared.la \
libsystemd-internal.la \
@@ -1342,7 +1341,7 @@ test_daemon_SOURCES = \
src/test/test-daemon.c
test_daemon_LDADD = \
- libsystemd-daemon-internal.la \
+ libsystemd-internal.la \
libsystemd-shared.la
test_cgroup_SOURCES = \
@@ -1368,7 +1367,7 @@ test_cgroup_util_SOURCES = \
test_cgroup_util_LDADD = \
libsystemd-label.la \
- libsystemd-daemon-internal.la \
+ libsystemd-internal.la \
libsystemd-shared.la
test_env_replace_SOURCES = \
@@ -1473,7 +1472,6 @@ systemd_analyze_SOURCES = \
systemd_analyze_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
# ------------------------------------------------------------------------------
@@ -1482,7 +1480,6 @@ systemd_initctl_SOURCES = \
systemd_initctl_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
# ------------------------------------------------------------------------------
@@ -1495,7 +1492,6 @@ systemd_update_utmp_CFLAGS = \
systemd_update_utmp_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la \
$(AUDIT_LIBS)
@@ -1505,7 +1501,7 @@ systemd_shutdownd_SOURCES = \
systemd_shutdownd_LDADD = \
libsystemd-label.la \
- libsystemd-daemon-internal.la \
+ libsystemd-internal.la \
libsystemd-shared.la
dist_doc_DATA += \
@@ -1646,7 +1642,6 @@ systemd_fsck_SOURCES = \
systemd_fsck_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libudev-internal.la \
libsystemd-shared.la
@@ -1725,8 +1720,7 @@ bootctl_SOURCES = \
bootctl_LDADD = \
libsystemd-shared.la \
- libsystemd-internal.la \
- libsystemd-daemon-internal.la
+ libsystemd-internal.la
bin_PROGRAMS += \
bootctl
@@ -1804,7 +1798,6 @@ systemd_cgroups_agent_SOURCES = \
systemd_cgroups_agent_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
# ------------------------------------------------------------------------------
@@ -1817,7 +1810,6 @@ systemctl_LDADD = \
libsystemd-internal.la \
libsystemd-logs.la \
libsystemd-journal-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
# ------------------------------------------------------------------------------
@@ -1826,7 +1818,7 @@ systemd_notify_SOURCES = \
src/readahead/sd-readahead.c
systemd_notify_LDADD = \
- libsystemd-daemon-internal.la \
+ libsystemd-internal.la \
libsystemd-shared.la
# ------------------------------------------------------------------------------
@@ -1874,7 +1866,6 @@ systemd_nspawn_LDADD = \
libsystemd-label.la \
libsystemd-capability.la \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libudev-internal.la \
libsystemd-shared.la \
libsystemd-seccomp.la \
@@ -1888,7 +1879,6 @@ systemd_run_LDADD = \
libsystemd-label.la \
libsystemd-capability.la \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
# ------------------------------------------------------------------------------
@@ -1897,7 +1887,6 @@ systemd_bus_proxyd_SOURCES = \
systemd_bus_proxyd_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
bus-proxyd-install-hook:
@@ -1934,56 +1923,6 @@ systemd_tty_ask_password_agent_LDADD = \
libsystemd-shared.la
# ------------------------------------------------------------------------------
-libsystemd_daemon_la_SOURCES = \
- src/libsystemd-daemon/libsystemd-daemon.sym \
- src/libsystemd-daemon/sd-daemon.c
-
-libsystemd_daemon_internal_la_SOURCES = \
- $(libsystemd_daemon_la_SOURCES)
-
-libsystemd_daemon_internal_la_CPPFLAGS = \
- $(AM_CPPFLAGS) \
- -DSD_DAEMON_DISABLE_MQ
-
-libsystemd_daemon_la_CFLAGS = \
- $(AM_CFLAGS) \
- -fvisibility=hidden \
- -DSD_EXPORT_SYMBOLS
-
-libsystemd_daemon_la_LDFLAGS = \
- $(AM_LDFLAGS) \
- -version-info $(LIBSYSTEMD_DAEMON_CURRENT):$(LIBSYSTEMD_DAEMON_REVISION):$(LIBSYSTEMD_DAEMON_AGE) \
- -Wl,--version-script=$(top_srcdir)/src/libsystemd-daemon/libsystemd-daemon.sym
-
-libsystemd_daemon_la_LIBADD = \
- $(RT_LIBS)
-
-pkginclude_HEADERS += \
- src/systemd/sd-daemon.h
-
-# move lib from $(libdir) to $(rootlibdir) and update devel link, if needed
-libsystemd-daemon-install-hook:
- libname=libsystemd-daemon.so && $(move-to-rootlibdir)
-
-libsystemd-daemon-uninstall-hook:
- rm -f $(DESTDIR)$(rootlibdir)/libsystemd-daemon.so*
-
-INSTALL_EXEC_HOOKS += libsystemd-daemon-install-hook
-UNINSTALL_EXEC_HOOKS += libsystemd-daemon-uninstall-hook
-
-lib_LTLIBRARIES += \
- libsystemd-daemon.la
-
-noinst_LTLIBRARIES += \
- libsystemd-daemon-internal.la
-
-pkgconfiglib_DATA += \
- src/libsystemd-daemon/libsystemd-daemon.pc
-
-EXTRA_DIST += \
- src/libsystemd-daemon/libsystemd-daemon.pc.in
-
-# ------------------------------------------------------------------------------
libsystemd_la_SOURCES = \
src/libsystemd/libsystemd.sym \
src/systemd/sd-bus.h \
@@ -1996,6 +1935,7 @@ libsystemd_la_SOURCES = \
src/systemd/sd-resolve.h \
src/systemd/sd-login.h \
src/systemd/sd-id128.h \
+ src/systemd/sd-daemon.h \
src/libsystemd/sd-bus/sd-bus.c \
src/libsystemd/sd-bus/bus-control.c \
src/libsystemd/sd-bus/bus-control.h \
@@ -2044,6 +1984,7 @@ libsystemd_la_SOURCES = \
src/libsystemd/sd-resolve/sd-resolve.c \
src/libsystemd/sd-resolve/resolve-util.h \
src/libsystemd/sd-id128/sd-id128.c \
+ src/libsystemd/sd-daemon/sd-daemon.c \
src/login/sd-login.c \
src/login/login-shared.c \
src/login/login-shared.h
@@ -2052,8 +1993,8 @@ nodist_libsystemd_la_SOURCES = \
src/libsystemd/sd-bus/bus-error-mapping.c
libsystemd_la_LIBADD = \
- libsystemd-daemon-internal.la \
libsystemd-shared.la \
+ $(RT_LIBS)
-lresolv
libsystemd_la_CFLAGS = \
@@ -2136,7 +2077,6 @@ test_bus_marshal_SOURCES = \
test_bus_marshal_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la \
libsystemd-dump.la \
libsystemd-capability.la \
@@ -2166,7 +2106,6 @@ test_bus_chat_CFLAGS = \
test_bus_chat_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
test_bus_cleanup_SOURCES = \
@@ -2174,7 +2113,6 @@ test_bus_cleanup_SOURCES = \
test_bus_cleanup_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
test_bus_server_SOURCES = \
@@ -2186,7 +2124,6 @@ test_bus_server_CFLAGS = \
test_bus_server_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
test_bus_objects_SOURCES = \
@@ -2199,7 +2136,6 @@ test_bus_objects_CFLAGS = \
test_bus_objects_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la \
libsystemd-dump.la \
libsystemd-capability.la \
@@ -2210,7 +2146,6 @@ test_bus_error_SOURCES = \
test_bus_error_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
test_bus_gvariant_SOURCES = \
@@ -2218,7 +2153,6 @@ test_bus_gvariant_SOURCES = \
test_bus_gvariant_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la \
libsystemd-dump.la \
libsystemd-capability.la \
@@ -2235,7 +2169,6 @@ test_bus_creds_SOURCES = \
test_bus_creds_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la \
libsystemd-dump.la \
libsystemd-capability.la
@@ -2245,7 +2178,6 @@ test_bus_match_SOURCES = \
test_bus_match_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
test_bus_kernel_SOURCES = \
@@ -2253,7 +2185,6 @@ test_bus_kernel_SOURCES = \
test_bus_kernel_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la \
libsystemd-dump.la \
libsystemd-capability.la \
@@ -2268,7 +2199,6 @@ test_bus_kernel_bloom_SOURCES = \
test_bus_kernel_bloom_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
test_bus_kernel_benchmark_SOURCES = \
@@ -2276,7 +2206,6 @@ test_bus_kernel_benchmark_SOURCES = \
test_bus_kernel_benchmark_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
test_bus_memfd_SOURCES = \
@@ -2291,7 +2220,6 @@ test_bus_zero_copy_SOURCES = \
test_bus_zero_copy_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la \
libsystemd-dump.la \
libsystemd-capability.la \
@@ -2313,7 +2241,6 @@ test_event_SOURCES = \
test_event_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
test_rtnl_SOURCES = \
@@ -2321,7 +2248,6 @@ test_rtnl_SOURCES = \
test_rtnl_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
test_resolve_SOURCES = \
@@ -2342,7 +2268,6 @@ busctl_SOURCES = \
busctl_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la \
libsystemd-dump.la \
libsystemd-capability.la \
@@ -2390,7 +2315,6 @@ test_dhcp_client_SOURCES = \
test_dhcp_client_LDADD = \
libsystemd-dhcp.la \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
tests += \
@@ -2436,7 +2360,7 @@ libudev_la_LDFLAGS = \
-Wl,--version-script=$(top_srcdir)/src/libudev/libudev.sym
libudev_la_LIBADD = \
- libsystemd-daemon-internal.la \
+ libsystemd-internal.la \
libsystemd-shared.la
pkgconfiglib_DATA += \
@@ -2619,7 +2543,6 @@ libudev_core_la_CFLAGS = \
libudev_core_la_LIBADD = \
libudev-internal.la \
libsystemd-label.la \
- libsystemd-daemon-internal.la \
libsystemd-internal.la \
libsystemd-shared.la \
$(BLKID_LIBS) \
@@ -2997,7 +2920,6 @@ test_id128_SOURCES = \
test_id128_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
tests += \
@@ -3013,7 +2935,7 @@ systemd_activate_SOURCES = \
systemd_activate_LDADD = \
libsystemd-label.la \
- libsystemd-daemon-internal.la \
+ libsystemd-internal.la \
libsystemd-shared.la
# ------------------------------------------------------------------------------
@@ -3170,7 +3092,6 @@ libsystemd_journal_la_LDFLAGS = \
libsystemd_journal_la_LIBADD = \
libsystemd-label.la \
- libsystemd-daemon-internal.la \
libsystemd-internal.la \
libsystemd-shared.la
@@ -3225,7 +3146,6 @@ libsystemd_journal_core_la_LIBADD = \
libudev-internal.la \
libsystemd-capability.la \
libsystemd-label.la \
- libsystemd-daemon-internal.la \
libsystemd-internal.la \
libsystemd-shared.la
@@ -3377,7 +3297,6 @@ systemd_journal_gatewayd_SOURCES = \
systemd_journal_gatewayd_LDADD = \
libsystemd-logs.la \
libsystemd-journal-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-internal.la \
libsystemd-shared.la \
$(MICROHTTPD_LIBS)
@@ -3413,7 +3332,6 @@ systemd_socket_proxyd_LDADD = \
libsystemd-logs.la \
libsystemd-internal.la \
libsystemd-journal-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
# ------------------------------------------------------------------------------
@@ -3520,7 +3438,7 @@ systemd_readahead_SOURCES = \
src/readahead/readahead-common.h
systemd_readahead_LDADD = \
- libsystemd-daemon-internal.la \
+ libsystemd-internal.la \
libudev-internal.la \
libsystemd-shared.la
@@ -3696,7 +3614,6 @@ systemd_hostnamed_SOURCES = \
systemd_hostnamed_LDADD = \
libsystemd-label.la \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
rootlibexec_PROGRAMS += \
@@ -3728,7 +3645,6 @@ hostnamectl_SOURCES = \
hostnamectl_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
bin_PROGRAMS += \
@@ -3755,7 +3671,6 @@ systemd_bus_driverd_SOURCES = \
systemd_bus_driverd_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
rootlibexec_PROGRAMS += \
@@ -3792,7 +3707,6 @@ systemd_localed_SOURCES = \
systemd_localed_LDADD = \
libsystemd-label.la \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
nodist_systemunit_DATA += \
@@ -3833,7 +3747,6 @@ localectl_SOURCES = \
localectl_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
bin_PROGRAMS += \
@@ -3863,7 +3776,6 @@ systemd_timedated_SOURCES = \
systemd_timedated_LDADD = \
libsystemd-label.la \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
rootlibexec_PROGRAMS += \
@@ -3899,7 +3811,6 @@ timedatectl_SOURCES = \
timedatectl_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
bin_PROGRAMS += \
@@ -3957,7 +3868,6 @@ libsystemd_machine_core_la_SOURCES = \
libsystemd_machine_core_la_LIBADD = \
libsystemd-label.la \
- libsystemd-daemon-internal.la \
libsystemd-internal.la \
libudev-internal.la \
libsystemd-shared.la
@@ -3970,7 +3880,6 @@ machinectl_SOURCES = \
machinectl_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
rootbin_PROGRAMS += \
@@ -4035,7 +3944,6 @@ nodist_systemd_networkd_SOURCES = \
systemd_networkd_LDADD = \
libudev-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-internal.la \
libsystemd-dhcp.la \
libsystemd-label.la \
@@ -4062,7 +3970,6 @@ test_network_LDADD = \
libudev-internal.la \
libsystemd-internal.la \
libsystemd-dhcp.la \
- libsystemd-daemon-internal.la \
libsystemd-label.la \
libsystemd-shared.la
@@ -4118,7 +4025,6 @@ libsystemd_logind_core_la_SOURCES = \
libsystemd_logind_core_la_LIBADD = \
libsystemd-label.la \
libsystemd-capability.la \
- libsystemd-daemon-internal.la \
libsystemd-internal.la \
libudev-internal.la \
libsystemd-shared.la
@@ -4151,8 +4057,7 @@ loginctl_SOURCES = \
loginctl_LDADD = \
libsystemd-internal.la \
libudev-internal.la \
- libsystemd-shared.la \
- libsystemd-daemon-internal.la
+ libsystemd-shared.la
rootbin_PROGRAMS += \
loginctl
@@ -4169,7 +4074,6 @@ systemd_inhibit_SOURCES = \
systemd_inhibit_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
rootbin_PROGRAMS += \
@@ -4194,7 +4098,6 @@ test_inhibit_SOURCES = \
test_inhibit_LDADD = \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
test_login_tables_SOURCES = \
@@ -4231,7 +4134,6 @@ pam_systemd_la_LDFLAGS = \
pam_systemd_la_LIBADD = \
libsystemd-capability.la \
libsystemd-internal.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la \
$(PAM_LIBS)
@@ -4381,7 +4283,7 @@ _daemon_la_LDFLAGS = \
_daemon_la_LIBADD = \
$(PYTHON_DEVEL_LIBS) \
- libsystemd-daemon.la
+ libsystemd.la
_reader_la_SOURCES = \
src/python-systemd/_reader.c \
@@ -4401,9 +4303,8 @@ _reader_la_LDFLAGS = \
_reader_la_LIBADD = \
$(PYTHON_DEVEL_LIBS) \
- libsystemd-journal.la \
libsystemd.la \
- libsystemd-daemon-internal.la \
+ libsystemd-journal.la \
libsystemd-shared.la
login_la_SOURCES = \
@@ -4424,9 +4325,7 @@ login_la_LDFLAGS = \
login_la_LIBADD = \
$(PYTHON_DEVEL_LIBS) \
- libsystemd-journal.la \
libsystemd.la \
- libsystemd-daemon-internal.la \
libsystemd-shared.la
dist_pkgpyexec_PYTHON = \
@@ -4512,29 +4411,49 @@ libsystemd_id128_la_LDFLAGS = \
libsystemd_id128_la_LIBADD = \
libsystemd.la
+libsystemd_daemon_la_SOURCES = \
+ libsystemd-daemon.c \
+ src/compat-libs/libsystemd-daemon.sym
+
+libsystemd_daemon_la_CFLAGS = \
+ $(libsystemd_login_la_CFLAGS)
+
+libsystemd_daemon_la_LDFLAGS = \
+ $(AM_LDFLAGS) \
+ -version-info $(LIBSYSTEMD_DAEMON_CURRENT):$(LIBSYSTEMD_DAEMON_REVISION):$(LIBSYSTEMD_DAEMON_AGE) \
+ -Wl,--version-script=$(top_srcdir)/src/compat-libs/libsystemd-daemon.sym
+
+libsystemd_daemon_la_LIBADD = \
+ libsystemd.la
+
BUILT_SOURCES += \
libsystemd-login.c \
- libsystemd-id128.c
+ libsystemd-id128.c \
+ libsystemd-daemon.c
libsystemd-%.c: src/compat-libs/libsystemd-%.sym
$(generate-fake-lib)
lib_LTLIBRARIES += \
libsystemd-login.la \
- libsystemd-id128.la
+ libsystemd-id128.la \
+ libsystemd-daemon.la
pkgconfiglib_DATA += \
src/compat-libs/libsystemd-login.pc \
- src/compat-libs/libsystemd-id128.pc
+ src/compat-libs/libsystemd-id128.pc \
+ src/compat-libs/libsystemd-daemon.pc
# move lib from $(libdir) to $(rootlibdir) and update devel link, if needed
compat-lib-install-hook:
libname=libsystemd-login.so && $(move-to-rootlibdir)
libname=libsystemd-id128.so && $(move-to-rootlibdir)
+ libname=libsystemd-daemon.so && $(move-to-rootlibdir)
compat-lib-uninstall-hook:
rm -f $(DESTDIR)$(rootlibdir)/libsystemd-login.so*
rm -f $(DESTDIR)$(rootlibdir)/libsystemd-id128.so*
+ rm -f $(DESTDIR)$(rootlibdir)/libsystemd-daemon.so*
INSTALL_EXEC_HOOKS += compat-lib-install-hook
UNINSTALL_EXEC_HOOKS += compat-lib-uninstall-hook
@@ -4543,7 +4462,8 @@ endif
EXTRA_DIST += \
src/compat-libs/libsystemd-login.pc.in \
- src/compat-libs/libsystemd-id128.pc.in
+ src/compat-libs/libsystemd-id128.pc.in \
+ src/compat-libs/libsystemd-daemon.pc.in
# ------------------------------------------------------------------------------
substitutions = \
@@ -4980,11 +4900,12 @@ test-libsystemd-sym.c: \
src/libsystemd/libsystemd.sym \
src/systemd/sd-bus.h \
src/systemd/sd-utf8.h \
+ src/systemd/sd-daemon.h \
src/systemd/sd-login.h
$(generate-sym-test)
test-libsystemd-daemon-sym.c: \
- src/libsystemd-daemon/libsystemd-daemon.sym \
+ src/compat-libs/libsystemd-daemon.sym \
src/systemd/sd-daemon.h
$(generate-sym-test)
@@ -5040,24 +4961,24 @@ test_libudev_sym_LDADD = \
BUILT_SOURCES += \
$(test_libsystemd_sym_SOURCES) \
- $(test_libsystemd_daemon_sym_SOURCES) \
$(test_libsystemd_journal_sym_SOURCES) \
$(test_libudev_sym_SOURCES)
tests += \
test-libsystemd-sym \
- test-libsystemd-daemon-sym \
test-libsystemd-journal-sym \
test-libudev-sym
if ENABLE_COMPAT_LIBS
BUILT_SOURCES += \
$(test_libsystemd_login_sym_SOURCES) \
- $(test_libsystemd_id128_sym_SOURCES)
+ $(test_libsystemd_id128_sym_SOURCES) \
+ $(test_libsystemd_daemon_sym_SOURCES)
tests += \
test-libsystemd-login-sym \
- test-libsystemd-id128-sym
+ test-libsystemd-id128-sym \
+ test-libsystemd-daemon-sym
endif
.PHONY: cppcheck
diff --git a/src/compat-libs/libsystemd-daemon.pc.in b/src/compat-libs/libsystemd-daemon.pc.in
new file mode 100644
index 0000000..8bb3a74
--- /dev/null
+++ b/src/compat-libs/libsystemd-daemon.pc.in
@@ -0,0 +1,19 @@
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation files
+# (the "Software"), to deal in the Software without restriction,
+# including without limitation the rights to use, copy, modify, merge,
+# publish, distribute, sublicense, and/or sell copies of the Software,
+# and to permit persons to whom the Software is furnished to do so,
+# subject to the following conditions:
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: systemd
+Description: systemd Daemon Utility Library
+URL: @PACKAGE_URL@
+Version: @PACKAGE_VERSION@
+Libs: -L${libdir} -lsystemd-daemon
+Cflags: -I${includedir}
diff --git a/src/compat-libs/libsystemd-daemon.sym b/src/compat-libs/libsystemd-daemon.sym
new file mode 100644
index 0000000..aa9be51
--- /dev/null
+++ b/src/compat-libs/libsystemd-daemon.sym
@@ -0,0 +1,32 @@
+/***
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge,
+ publish, distribute, sublicense, and/or sell copies of the Software,
+ and to permit persons to whom the Software is furnished to do so,
+ subject to the following conditions:
+***/
+
+/* Original symbols from systemd v31 */
+
+LIBSYSTEMD_DAEMON_31 {
+global:
+ sd_booted;
+ sd_is_fifo;
+ sd_is_mq;
+ sd_is_socket;
+ sd_is_socket_inet;
+ sd_is_socket_unix;
+ sd_is_special;
+ sd_listen_fds;
+ sd_notify;
+ sd_notifyf;
+local:
+ *;
+};
+
+LIBSYSTEMD_DAEMON_209 {
+global:
+ sd_watchdog_enabled;
+} LIBSYSTEMD_DAEMON_31;
diff --git a/src/libsystemd-daemon/.gitignore b/src/libsystemd-daemon/.gitignore
deleted file mode 100644
index 5184131..0000000
--- a/src/libsystemd-daemon/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/libsystemd-daemon.pc
diff --git a/src/libsystemd-daemon/Makefile b/src/libsystemd-daemon/Makefile
deleted file mode 120000
index d0b0e8e..0000000
--- a/src/libsystemd-daemon/Makefile
+++ /dev/null
@@ -1 +0,0 @@
-../Makefile
\ No newline at end of file
diff --git a/src/libsystemd-daemon/libsystemd-daemon.pc.in b/src/libsystemd-daemon/libsystemd-daemon.pc.in
deleted file mode 100644
index 8bb3a74..0000000
--- a/src/libsystemd-daemon/libsystemd-daemon.pc.in
+++ /dev/null
@@ -1,19 +0,0 @@
-# Permission is hereby granted, free of charge, to any person
-# obtaining a copy of this software and associated documentation files
-# (the "Software"), to deal in the Software without restriction,
-# including without limitation the rights to use, copy, modify, merge,
-# publish, distribute, sublicense, and/or sell copies of the Software,
-# and to permit persons to whom the Software is furnished to do so,
-# subject to the following conditions:
-
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: systemd
-Description: systemd Daemon Utility Library
-URL: @PACKAGE_URL@
-Version: @PACKAGE_VERSION@
-Libs: -L${libdir} -lsystemd-daemon
-Cflags: -I${includedir}
diff --git a/src/libsystemd-daemon/libsystemd-daemon.sym b/src/libsystemd-daemon/libsystemd-daemon.sym
deleted file mode 100644
index aa9be51..0000000
--- a/src/libsystemd-daemon/libsystemd-daemon.sym
+++ /dev/null
@@ -1,32 +0,0 @@
-/***
- Permission is hereby granted, free of charge, to any person
- obtaining a copy of this software and associated documentation files
- (the "Software"), to deal in the Software without restriction,
- including without limitation the rights to use, copy, modify, merge,
- publish, distribute, sublicense, and/or sell copies of the Software,
- and to permit persons to whom the Software is furnished to do so,
- subject to the following conditions:
-***/
-
-/* Original symbols from systemd v31 */
-
-LIBSYSTEMD_DAEMON_31 {
-global:
- sd_booted;
- sd_is_fifo;
- sd_is_mq;
- sd_is_socket;
- sd_is_socket_inet;
- sd_is_socket_unix;
- sd_is_special;
- sd_listen_fds;
- sd_notify;
- sd_notifyf;
-local:
- *;
-};
-
-LIBSYSTEMD_DAEMON_209 {
-global:
- sd_watchdog_enabled;
-} LIBSYSTEMD_DAEMON_31;
diff --git a/src/libsystemd-daemon/sd-daemon.c b/src/libsystemd-daemon/sd-daemon.c
deleted file mode 100644
index 1a713ef..0000000
--- a/src/libsystemd-daemon/sd-daemon.c
+++ /dev/null
@@ -1,587 +0,0 @@
-/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-
-/***
- Copyright 2010 Lennart Poettering
-
- Permission is hereby granted, free of charge, to any person
- obtaining a copy of this software and associated documentation files
- (the "Software"), to deal in the Software without restriction,
- including without limitation the rights to use, copy, modify, merge,
- publish, distribute, sublicense, and/or sell copies of the Software,
- and to permit persons to whom the Software is furnished to do so,
- subject to the following conditions:
-
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-***/
-
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <fcntl.h>
-#include <netinet/in.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stddef.h>
-#include <limits.h>
-
-#if defined(__linux__) && !defined(SD_DAEMON_DISABLE_MQ)
-# include <mqueue.h>
-#endif
-
-#include "util.h"
-#include "sd-daemon.h"
-
-#if (__GNUC__ >= 4)
-# ifdef SD_EXPORT_SYMBOLS
-/* Export symbols */
-# define _sd_export_ __attribute__ ((visibility("default")))
-# else
-/* Don't export the symbols */
-# define _sd_export_ __attribute__ ((visibility("hidden")))
-# endif
-#else
-# define _sd_export_
-#endif
-
-_sd_export_ int sd_listen_fds(int unset_environment) {
-
-#if defined(DISABLE_SYSTEMD) || !defined(__linux__)
- return 0;
-#else
- int r, fd;
- const char *e;
- char *p = NULL;
- unsigned long l;
-
- e = getenv("LISTEN_PID");
- if (!e) {
- r = 0;
- goto finish;
- }
-
- errno = 0;
- l = strtoul(e, &p, 10);
-
- if (errno > 0) {
- r = -errno;
- goto finish;
- }
-
- if (!p || p == e || *p || l <= 0) {
- r = -EINVAL;
- goto finish;
- }
-
- /* Is this for us? */
- if (getpid() != (pid_t) l) {
- r = 0;
- goto finish;
- }
-
- e = getenv("LISTEN_FDS");
- if (!e) {
- r = 0;
- goto finish;
- }
-
- errno = 0;
- l = strtoul(e, &p, 10);
-
- if (errno > 0) {
- r = -errno;
- goto finish;
- }
-
- if (!p || p == e || *p) {
- r = -EINVAL;
- goto finish;
- }
-
- for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + (int) l; fd ++) {
- int flags;
-
- flags = fcntl(fd, F_GETFD);
- if (flags < 0) {
- r = -errno;
- goto finish;
- }
-
- if (flags & FD_CLOEXEC)
- continue;
-
- if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) < 0) {
- r = -errno;
- goto finish;
- }
- }
-
- r = (int) l;
-
-finish:
- if (unset_environment) {
- unsetenv("LISTEN_PID");
- unsetenv("LISTEN_FDS");
- }
-
- return r;
-#endif
-}
-
-_sd_export_ int sd_is_fifo(int fd, const char *path) {
- struct stat st_fd;
-
- if (fd < 0)
- return -EINVAL;
-
- if (fstat(fd, &st_fd) < 0)
- return -errno;
-
- if (!S_ISFIFO(st_fd.st_mode))
- return 0;
-
- if (path) {
- struct stat st_path;
-
- if (stat(path, &st_path) < 0) {
-
- if (errno == ENOENT || errno == ENOTDIR)
- return 0;
-
- return -errno;
- }
-
- return
- st_path.st_dev == st_fd.st_dev &&
- st_path.st_ino == st_fd.st_ino;
- }
-
- return 1;
-}
-
-_sd_export_ int sd_is_special(int fd, const char *path) {
- struct stat st_fd;
-
- if (fd < 0)
- return -EINVAL;
-
- if (fstat(fd, &st_fd) < 0)
- return -errno;
-
- if (!S_ISREG(st_fd.st_mode) && !S_ISCHR(st_fd.st_mode))
- return 0;
-
- if (path) {
- struct stat st_path;
-
- if (stat(path, &st_path) < 0) {
-
- if (errno == ENOENT || errno == ENOTDIR)
- return 0;
-
- return -errno;
- }
-
- if (S_ISREG(st_fd.st_mode) && S_ISREG(st_path.st_mode))
- return
- st_path.st_dev == st_fd.st_dev &&
- st_path.st_ino == st_fd.st_ino;
- else if (S_ISCHR(st_fd.st_mode) && S_ISCHR(st_path.st_mode))
- return st_path.st_rdev == st_fd.st_rdev;
- else
- return 0;
- }
-
- return 1;
-}
-
-static int sd_is_socket_internal(int fd, int type, int listening) {
- struct stat st_fd;
-
- if (fd < 0 || type < 0)
- return -EINVAL;
-
- if (fstat(fd, &st_fd) < 0)
- return -errno;
-
- if (!S_ISSOCK(st_fd.st_mode))
- return 0;
-
- if (type != 0) {
- int other_type = 0;
- socklen_t l = sizeof(other_type);
-
- if (getsockopt(fd, SOL_SOCKET, SO_TYPE, &other_type, &l) < 0)
- return -errno;
-
- if (l != sizeof(other_type))
- return -EINVAL;
-
- if (other_type != type)
- return 0;
- }
-
- if (listening >= 0) {
- int accepting = 0;
- socklen_t l = sizeof(accepting);
-
- if (getsockopt(fd, SOL_SOCKET, SO_ACCEPTCONN, &accepting, &l) < 0)
- return -errno;
-
- if (l != sizeof(accepting))
- return -EINVAL;
-
- if (!accepting != !listening)
- return 0;
- }
-
- return 1;
-}
-
-union sockaddr_union {
- struct sockaddr sa;
- struct sockaddr_in in4;
- struct sockaddr_in6 in6;
- struct sockaddr_un un;
- struct sockaddr_storage storage;
-};
-
-_sd_export_ int sd_is_socket(int fd, int family, int type, int listening) {
- int r;
-
- if (family < 0)
- return -EINVAL;
-
- r = sd_is_socket_internal(fd, type, listening);
- if (r <= 0)
- return r;
-
- if (family > 0) {
- union sockaddr_union sockaddr = {};
- socklen_t l = sizeof(sockaddr);
-
- if (getsockname(fd, &sockaddr.sa, &l) < 0)
- return -errno;
-
- if (l < sizeof(sa_family_t))
- return -EINVAL;
-
- return sockaddr.sa.sa_family == family;
- }
-
- return 1;
-}
-
-_sd_export_ int sd_is_socket_inet(int fd, int family, int type, int listening, uint16_t port) {
- union sockaddr_union sockaddr = {};
- socklen_t l = sizeof(sockaddr);
- int r;
-
- if (family != 0 && family != AF_INET && family != AF_INET6)
- return -EINVAL;
-
- r = sd_is_socket_internal(fd, type, listening);
- if (r <= 0)
- return r;
-
- if (getsockname(fd, &sockaddr.sa, &l) < 0)
- return -errno;
-
- if (l < sizeof(sa_family_t))
- return -EINVAL;
-
- if (sockaddr.sa.sa_family != AF_INET &&
- sockaddr.sa.sa_family != AF_INET6)
- return 0;
-
- if (family > 0)
- if (sockaddr.sa.sa_family != family)
- return 0;
-
- if (port > 0) {
- if (sockaddr.sa.sa_family == AF_INET) {
- if (l < sizeof(struct sockaddr_in))
- return -EINVAL;
-
- return htons(port) == sockaddr.in4.sin_port;
- } else {
- if (l < sizeof(struct sockaddr_in6))
- return -EINVAL;
-
- return htons(port) == sockaddr.in6.sin6_port;
- }
- }
-
- return 1;
-}
-
-_sd_export_ int sd_is_socket_unix(int fd, int type, int listening, const char *path, size_t length) {
- union sockaddr_union sockaddr = {};
- socklen_t l = sizeof(sockaddr);
- int r;
-
- r = sd_is_socket_internal(fd, type, listening);
- if (r <= 0)
- return r;
-
- if (getsockname(fd, &sockaddr.sa, &l) < 0)
- return -errno;
-
- if (l < sizeof(sa_family_t))
- return -EINVAL;
-
- if (sockaddr.sa.sa_family != AF_UNIX)
- return 0;
-
- if (path) {
- if (length == 0)
- length = strlen(path);
-
- if (length == 0)
- /* Unnamed socket */
- return l == offsetof(struct sockaddr_un, sun_path);
-
- if (path[0])
- /* Normal path socket */
- return
- (l >= offsetof(struct sockaddr_un, sun_path) + length + 1) &&
- memcmp(path, sockaddr.un.sun_path, length+1) == 0;
- else
- /* Abstract namespace socket */
- return
- (l == offsetof(struct sockaddr_un, sun_path) + length) &&
- memcmp(path, sockaddr.un.sun_path, length) == 0;
- }
-
- return 1;
-}
-
-_sd_export_ int sd_is_mq(int fd, const char *path) {
-#if !defined(__linux__) || defined(SD_DAEMON_DISABLE_MQ)
- return 0;
-#else
- struct mq_attr attr;
-
- if (fd < 0)
- return -EINVAL;
-
- if (mq_getattr(fd, &attr) < 0)
- return -errno;
-
- if (path) {
- char fpath[PATH_MAX];
- struct stat a, b;
-
- if (path[0] != '/')
- return -EINVAL;
-
- if (fstat(fd, &a) < 0)
- return -errno;
-
- strncpy(stpcpy(fpath, "/dev/mqueue"), path, sizeof(fpath) - 12);
- fpath[sizeof(fpath)-1] = 0;
-
- if (stat(fpath, &b) < 0)
- return -errno;
-
- if (a.st_dev != b.st_dev ||
- a.st_ino != b.st_ino)
- return 0;
- }
-
- return 1;
-#endif
-}
-
-_sd_export_ int sd_notify(int unset_environment, const char *state) {
-#if defined(DISABLE_SYSTEMD) || !defined(__linux__) || !defined(SOCK_CLOEXEC)
- return 0;
-#else
- int fd = -1, r;
- struct msghdr msghdr;
- struct iovec iovec;
- union sockaddr_union sockaddr;
- const char *e;
-
- if (!state) {
- r = -EINVAL;
- goto finish;
- }
-
- e = getenv("NOTIFY_SOCKET");
- if (!e)
- return 0;
-
- /* Must be an abstract socket, or an absolute path */
- if ((e[0] != '@' && e[0] != '/') || e[1] == 0) {
- r = -EINVAL;
- goto finish;
- }
-
- fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0);
- if (fd < 0) {
- r = -errno;
- goto finish;
- }
-
- memzero(&sockaddr, sizeof(sockaddr));
- sockaddr.sa.sa_family = AF_UNIX;
- strncpy(sockaddr.un.sun_path, e, sizeof(sockaddr.un.sun_path));
-
- if (sockaddr.un.sun_path[0] == '@')
- sockaddr.un.sun_path[0] = 0;
-
- memzero(&iovec, sizeof(iovec));
- iovec.iov_base = (char*) state;
- iovec.iov_len = strlen(state);
-
- memzero(&msghdr, sizeof(msghdr));
- msghdr.msg_name = &sockaddr;
- msghdr.msg_namelen = offsetof(struct sockaddr_un, sun_path) + strlen(e);
-
- if (msghdr.msg_namelen > sizeof(struct sockaddr_un))
- msghdr.msg_namelen = sizeof(struct sockaddr_un);
-
- msghdr.msg_iov = &iovec;
- msghdr.msg_iovlen = 1;
-
- if (sendmsg(fd, &msghdr, MSG_NOSIGNAL) < 0) {
- r = -errno;
- goto finish;
- }
-
- r = 1;
-
-finish:
- if (unset_environment)
- unsetenv("NOTIFY_SOCKET");
-
- if (fd >= 0)
- close(fd);
-
- return r;
-#endif
-}
-
-_sd_export_ int sd_notifyf(int unset_environment, const char *format, ...) {
-#if defined(DISABLE_SYSTEMD) || !defined(__linux__)
- return 0;
-#else
- va_list ap;
- char *p = NULL;
- int r;
-
- va_start(ap, format);
- r = vasprintf(&p, format, ap);
- va_end(ap);
-
- if (r < 0 || !p)
- return -ENOMEM;
-
- r = sd_notify(unset_environment, p);
- free(p);
-
- return r;
-#endif
-}
-
-_sd_export_ int sd_booted(void) {
-#if defined(DISABLE_SYSTEMD) || !defined(__linux__)
- return 0;
-#else
- struct stat st;
-
- /* We test whether the runtime unit file directory has been
- * created. This takes place in mount-setup.c, so is
- * guaranteed to happen very early during boot. */
-
- if (lstat("/run/systemd/system/", &st) < 0)
- return 0;
-
- return !!S_ISDIR(st.st_mode);
-#endif
-}
-
-_sd_export_ int sd_watchdog_enabled(int unset_environment, uint64_t *usec) {
-
-#if defined(DISABLE_SYSTEMD) || !defined(__linux__)
- return 0;
-#else
- unsigned long long ll;
- unsigned long l;
- const char *e;
- char *p = NULL;
- int r;
-
- e = getenv("WATCHDOG_PID");
- if (!e) {
- r = 0;
- goto finish;
- }
-
- errno = 0;
- l = strtoul(e, &p, 10);
- if (errno > 0) {
- r = -errno;
- goto finish;
- }
- if (!p || p == e || *p || l <= 0) {
- r = -EINVAL;
- goto finish;
- }
-
- /* Is this for us? */
- if (getpid() != (pid_t) l) {
- r = 0;
- goto finish;
- }
-
- e = getenv("WATCHDOG_USEC");
- if (!e) {
- r = -EINVAL;
- goto finish;
- }
-
- errno = 0;
- ll = strtoull(e, &p, 10);
- if (errno > 0) {
- r = -errno;
- goto finish;
- }
- if (!p || p == e || *p || l <= 0) {
- r = -EINVAL;
- goto finish;
- }
-
- if (usec)
- *usec = ll;
-
- r = 1;
-
-finish:
- if (unset_environment) {
- unsetenv("WATCHDOG_PID");
- unsetenv("WATCHDOG_USEC");
- }
-
- return r;
-#endif
-}
diff --git a/src/libsystemd/libsystemd.sym b/src/libsystemd/libsystemd.sym
index b4e4af1..258c932 100644
--- a/src/libsystemd/libsystemd.sym
+++ b/src/libsystemd/libsystemd.sym
@@ -10,6 +10,21 @@
LIBSYSTEMD_209 {
global:
+ /* originally LIBSYSTEMD_DAEMON_31 */
+ sd_booted;
+ sd_is_fifo;
+ sd_is_mq;
+ sd_is_socket;
+ sd_is_socket_inet;
+ sd_is_socket_unix;
+ sd_is_special;
+ sd_listen_fds;
+ sd_notify;
+ sd_notifyf;
+
+ /* LIBSYSTEMD_DAEMON_209 */
+ sd_watchdog_enabled;
+
/* originally LIBSYSTEMD_ID128_38 */
sd_id128_to_string;
sd_id128_from_string;
diff --git a/src/libsystemd/sd-daemon/sd-daemon.c b/src/libsystemd/sd-daemon/sd-daemon.c
new file mode 100644
index 0000000..21fb346
--- /dev/null
+++ b/src/libsystemd/sd-daemon/sd-daemon.c
@@ -0,0 +1,537 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2010 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 <sys/types.h>
+#include <sys/stat.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <fcntl.h>
+#include <netinet/in.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stddef.h>
+#include <limits.h>
+#include <mqueue.h>
+
+#include "util.h"
+#include "sd-daemon.h"
+
+_public_ int sd_listen_fds(int unset_environment) {
+ int r, fd;
+ const char *e;
+ char *p = NULL;
+ unsigned long l;
+
+ e = getenv("LISTEN_PID");
+ if (!e) {
+ r = 0;
+ goto finish;
+ }
+
+ errno = 0;
+ l = strtoul(e, &p, 10);
+
+ if (errno > 0) {
+ r = -errno;
+ goto finish;
+ }
+
+ if (!p || p == e || *p || l <= 0) {
+ r = -EINVAL;
+ goto finish;
+ }
+
+ /* Is this for us? */
+ if (getpid() != (pid_t) l) {
+ r = 0;
+ goto finish;
+ }
+
+ e = getenv("LISTEN_FDS");
+ if (!e) {
+ r = 0;
+ goto finish;
+ }
+
+ errno = 0;
+ l = strtoul(e, &p, 10);
+
+ if (errno > 0) {
+ r = -errno;
+ goto finish;
+ }
+
+ if (!p || p == e || *p) {
+ r = -EINVAL;
+ goto finish;
+ }
+
+ for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + (int) l; fd ++) {
+ int flags;
+
+ flags = fcntl(fd, F_GETFD);
+ if (flags < 0) {
+ r = -errno;
+ goto finish;
+ }
+
+ if (flags & FD_CLOEXEC)
+ continue;
+
+ if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) < 0) {
+ r = -errno;
+ goto finish;
+ }
+ }
+
+ r = (int) l;
+
+finish:
+ if (unset_environment) {
+ unsetenv("LISTEN_PID");
+ unsetenv("LISTEN_FDS");
+ }
+
+ return r;
+}
+
+_public_ int sd_is_fifo(int fd, const char *path) {
+ struct stat st_fd;
+
+ if (fd < 0)
+ return -EINVAL;
+
+ if (fstat(fd, &st_fd) < 0)
+ return -errno;
+
+ if (!S_ISFIFO(st_fd.st_mode))
+ return 0;
+
+ if (path) {
+ struct stat st_path;
+
+ if (stat(path, &st_path) < 0) {
+
+ if (errno == ENOENT || errno == ENOTDIR)
+ return 0;
+
+ return -errno;
+ }
+
+ return
+ st_path.st_dev == st_fd.st_dev &&
+ st_path.st_ino == st_fd.st_ino;
+ }
+
+ return 1;
+}
+
+_public_ int sd_is_special(int fd, const char *path) {
+ struct stat st_fd;
+
+ if (fd < 0)
+ return -EINVAL;
+
+ if (fstat(fd, &st_fd) < 0)
+ return -errno;
+
+ if (!S_ISREG(st_fd.st_mode) && !S_ISCHR(st_fd.st_mode))
+ return 0;
+
+ if (path) {
+ struct stat st_path;
+
+ if (stat(path, &st_path) < 0) {
+
+ if (errno == ENOENT || errno == ENOTDIR)
+ return 0;
+
+ return -errno;
+ }
+
+ if (S_ISREG(st_fd.st_mode) && S_ISREG(st_path.st_mode))
+ return
+ st_path.st_dev == st_fd.st_dev &&
+ st_path.st_ino == st_fd.st_ino;
+ else if (S_ISCHR(st_fd.st_mode) && S_ISCHR(st_path.st_mode))
+ return st_path.st_rdev == st_fd.st_rdev;
+ else
+ return 0;
+ }
+
+ return 1;
+}
+
+static int sd_is_socket_internal(int fd, int type, int listening) {
+ struct stat st_fd;
+
+ if (fd < 0 || type < 0)
+ return -EINVAL;
+
+ if (fstat(fd, &st_fd) < 0)
+ return -errno;
+
+ if (!S_ISSOCK(st_fd.st_mode))
+ return 0;
+
+ if (type != 0) {
+ int other_type = 0;
+ socklen_t l = sizeof(other_type);
+
+ if (getsockopt(fd, SOL_SOCKET, SO_TYPE, &other_type, &l) < 0)
+ return -errno;
+
+ if (l != sizeof(other_type))
+ return -EINVAL;
+
+ if (other_type != type)
+ return 0;
+ }
+
+ if (listening >= 0) {
+ int accepting = 0;
+ socklen_t l = sizeof(accepting);
+
+ if (getsockopt(fd, SOL_SOCKET, SO_ACCEPTCONN, &accepting, &l) < 0)
+ return -errno;
+
+ if (l != sizeof(accepting))
+ return -EINVAL;
+
+ if (!accepting != !listening)
+ return 0;
+ }
+
+ return 1;
+}
+
+union sockaddr_union {
+ struct sockaddr sa;
+ struct sockaddr_in in4;
+ struct sockaddr_in6 in6;
+ struct sockaddr_un un;
+ struct sockaddr_storage storage;
+};
+
+_public_ int sd_is_socket(int fd, int family, int type, int listening) {
+ int r;
+
+ if (family < 0)
+ return -EINVAL;
+
+ r = sd_is_socket_internal(fd, type, listening);
+ if (r <= 0)
+ return r;
+
+ if (family > 0) {
+ union sockaddr_union sockaddr = {};
+ socklen_t l = sizeof(sockaddr);
+
+ if (getsockname(fd, &sockaddr.sa, &l) < 0)
+ return -errno;
+
+ if (l < sizeof(sa_family_t))
+ return -EINVAL;
+
+ return sockaddr.sa.sa_family == family;
+ }
+
+ return 1;
+}
+
+_public_ int sd_is_socket_inet(int fd, int family, int type, int listening, uint16_t port) {
+ union sockaddr_union sockaddr = {};
+ socklen_t l = sizeof(sockaddr);
+ int r;
+
+ if (family != 0 && family != AF_INET && family != AF_INET6)
+ return -EINVAL;
+
+ r = sd_is_socket_internal(fd, type, listening);
+ if (r <= 0)
+ return r;
+
+ if (getsockname(fd, &sockaddr.sa, &l) < 0)
+ return -errno;
+
+ if (l < sizeof(sa_family_t))
+ return -EINVAL;
+
+ if (sockaddr.sa.sa_family != AF_INET &&
+ sockaddr.sa.sa_family != AF_INET6)
+ return 0;
+
+ if (family > 0)
+ if (sockaddr.sa.sa_family != family)
+ return 0;
+
+ if (port > 0) {
+ if (sockaddr.sa.sa_family == AF_INET) {
+ if (l < sizeof(struct sockaddr_in))
+ return -EINVAL;
+
+ return htons(port) == sockaddr.in4.sin_port;
+ } else {
+ if (l < sizeof(struct sockaddr_in6))
+ return -EINVAL;
+
+ return htons(port) == sockaddr.in6.sin6_port;
+ }
+ }
+
+ return 1;
+}
+
+_public_ int sd_is_socket_unix(int fd, int type, int listening, const char *path, size_t length) {
+ union sockaddr_union sockaddr = {};
+ socklen_t l = sizeof(sockaddr);
+ int r;
+
+ r = sd_is_socket_internal(fd, type, listening);
+ if (r <= 0)
+ return r;
+
+ if (getsockname(fd, &sockaddr.sa, &l) < 0)
+ return -errno;
+
+ if (l < sizeof(sa_family_t))
+ return -EINVAL;
+
+ if (sockaddr.sa.sa_family != AF_UNIX)
+ return 0;
+
+ if (path) {
+ if (length == 0)
+ length = strlen(path);
+
+ if (length == 0)
+ /* Unnamed socket */
+ return l == offsetof(struct sockaddr_un, sun_path);
+
+ if (path[0])
+ /* Normal path socket */
+ return
+ (l >= offsetof(struct sockaddr_un, sun_path) + length + 1) &&
+ memcmp(path, sockaddr.un.sun_path, length+1) == 0;
+ else
+ /* Abstract namespace socket */
+ return
+ (l == offsetof(struct sockaddr_un, sun_path) + length) &&
+ memcmp(path, sockaddr.un.sun_path, length) == 0;
+ }
+
+ return 1;
+}
+
+_public_ int sd_is_mq(int fd, const char *path) {
+ struct mq_attr attr;
+
+ if (fd < 0)
+ return -EINVAL;
+
+ if (mq_getattr(fd, &attr) < 0)
+ return -errno;
+
+ if (path) {
+ char fpath[PATH_MAX];
+ struct stat a, b;
+
+ if (path[0] != '/')
+ return -EINVAL;
+
+ if (fstat(fd, &a) < 0)
+ return -errno;
+
+ strncpy(stpcpy(fpath, "/dev/mqueue"), path, sizeof(fpath) - 12);
+ fpath[sizeof(fpath)-1] = 0;
+
+ if (stat(fpath, &b) < 0)
+ return -errno;
+
+ if (a.st_dev != b.st_dev ||
+ a.st_ino != b.st_ino)
+ return 0;
+ }
+
+ return 1;
+}
+
+_public_ int sd_notify(int unset_environment, const char *state) {
+ int fd = -1, r;
+ struct msghdr msghdr;
+ struct iovec iovec;
+ union sockaddr_union sockaddr;
+ const char *e;
+
+ if (!state) {
+ r = -EINVAL;
+ goto finish;
+ }
+
+ e = getenv("NOTIFY_SOCKET");
+ if (!e)
+ return 0;
+
+ /* Must be an abstract socket, or an absolute path */
+ if ((e[0] != '@' && e[0] != '/') || e[1] == 0) {
+ r = -EINVAL;
+ goto finish;
+ }
+
+ fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0);
+ if (fd < 0) {
+ r = -errno;
+ goto finish;
+ }
+
+ memzero(&sockaddr, sizeof(sockaddr));
+ sockaddr.sa.sa_family = AF_UNIX;
+ strncpy(sockaddr.un.sun_path, e, sizeof(sockaddr.un.sun_path));
+
+ if (sockaddr.un.sun_path[0] == '@')
+ sockaddr.un.sun_path[0] = 0;
+
+ memzero(&iovec, sizeof(iovec));
+ iovec.iov_base = (char*) state;
+ iovec.iov_len = strlen(state);
+
+ memzero(&msghdr, sizeof(msghdr));
+ msghdr.msg_name = &sockaddr;
+ msghdr.msg_namelen = offsetof(struct sockaddr_un, sun_path) + strlen(e);
+
+ if (msghdr.msg_namelen > sizeof(struct sockaddr_un))
+ msghdr.msg_namelen = sizeof(struct sockaddr_un);
+
+ msghdr.msg_iov = &iovec;
+ msghdr.msg_iovlen = 1;
+
+ if (sendmsg(fd, &msghdr, MSG_NOSIGNAL) < 0) {
+ r = -errno;
+ goto finish;
+ }
+
+ r = 1;
+
+finish:
+ if (unset_environment)
+ unsetenv("NOTIFY_SOCKET");
+
+ if (fd >= 0)
+ close(fd);
+
+ return r;
+}
+
+_public_ int sd_notifyf(int unset_environment, const char *format, ...) {
+ va_list ap;
+ char *p = NULL;
+ int r;
+
+ va_start(ap, format);
+ r = vasprintf(&p, format, ap);
+ va_end(ap);
+
+ if (r < 0 || !p)
+ return -ENOMEM;
+
+ r = sd_notify(unset_environment, p);
+ free(p);
+
+ return r;
+}
+
+_public_ int sd_booted(void) {
+ struct stat st;
+
+ /* We test whether the runtime unit file directory has been
+ * created. This takes place in mount-setup.c, so is
+ * guaranteed to happen very early during boot. */
+
+ if (lstat("/run/systemd/system/", &st) < 0)
+ return 0;
+
+ return !!S_ISDIR(st.st_mode);
+}
+
+_public_ int sd_watchdog_enabled(int unset_environment, uint64_t *usec) {
+ unsigned long long ll;
+ unsigned long l;
+ const char *e;
+ char *p = NULL;
+ int r;
+
+ e = getenv("WATCHDOG_PID");
+ if (!e) {
+ r = 0;
+ goto finish;
+ }
+
+ errno = 0;
+ l = strtoul(e, &p, 10);
+ if (errno > 0) {
+ r = -errno;
+ goto finish;
+ }
+ if (!p || p == e || *p || l <= 0) {
+ r = -EINVAL;
+ goto finish;
+ }
+
+ /* Is this for us? */
+ if (getpid() != (pid_t) l) {
+ r = 0;
+ goto finish;
+ }
+
+ e = getenv("WATCHDOG_USEC");
+ if (!e) {
+ r = -EINVAL;
+ goto finish;
+ }
+
+ errno = 0;
+ ll = strtoull(e, &p, 10);
+ if (errno > 0) {
+ r = -errno;
+ goto finish;
+ }
+ if (!p || p == e || *p || l <= 0) {
+ r = -EINVAL;
+ goto finish;
+ }
+
+ if (usec)
+ *usec = ll;
+
+ r = 1;
+
+finish:
+ if (unset_environment) {
+ unsetenv("WATCHDOG_PID");
+ unsetenv("WATCHDOG_USEC");
+ }
+
+ return r;
+}
diff --git a/src/systemd/sd-daemon.h b/src/systemd/sd-daemon.h
index 43deb8c..f95fb51 100644
--- a/src/systemd/sd-daemon.h
+++ b/src/systemd/sd-daemon.h
@@ -30,17 +30,11 @@
#include <sys/types.h>
#include <inttypes.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
+#include "_sd-common.h"
-/*
- Reference implementation of a few systemd related interfaces for
- writing daemons. These interfaces are trivial to implement. To
- simplify porting we provide this reference implementation.
- Applications are welcome to reimplement the algorithms described
- here if they do not want to include these two source files.
+_SD_BEGIN_DECLARATIONS;
+/*
The following functionality is provided:
- Support for logging with log levels on stderr
@@ -48,33 +42,9 @@ extern "C" {
- Daemon startup and status notification
- Detection of systemd boots
- You may compile this with -DDISABLE_SYSTEMD to disable systemd
- support. This makes all those calls NOPs that are directly related to
- systemd (i.e. only sd_is_xxx() will stay useful).
-
- Since this is drop-in code we don't want any of our symbols to be
- exported in any case. Hence we declare hidden visibility for all of
- them.
-
- You may find an up-to-date version of these source files online:
-
- http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-daemon.h
- http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c
-
- This should compile on non-Linux systems, too, but with the
- exception of the sd_is_xxx() calls all functions will become NOPs.
-
See sd-daemon(3) for more information.
*/
-#ifndef _sd_printf_attr_
-# if __GNUC__ >= 4
-# define _sd_printf_attr_(a,b) __attribute__ ((format (printf, a, b)))
-# else
-# define _sd_printf_attr_(a,b)
-# endif
-#endif
-
/*
Log levels for usage on stderr:
@@ -263,7 +233,7 @@ int sd_notify(int unset_environment, const char *state);
See sd_notifyf(3) for more information.
*/
-int sd_notifyf(int unset_environment, const char *format, ...) _sd_printf_attr_(2,3);
+int sd_notifyf(int unset_environment, const char *format, ...) _sd_printf_(2,3);
/*
Returns > 0 if the system was booted with systemd. Returns < 0 on
@@ -294,8 +264,6 @@ int sd_booted(void);
*/
int sd_watchdog_enabled(int unset_environment, uint64_t *usec);
-#ifdef __cplusplus
-}
-#endif
+_SD_END_DECLARATIONS;
#endif
diff --git a/src/systemd/sd-readahead.h b/src/systemd/sd-readahead.h
index 2dac104..ed8300c 100644
--- a/src/systemd/sd-readahead.h
+++ b/src/systemd/sd-readahead.h
@@ -34,7 +34,7 @@ extern "C" {
/*
Reference implementation of a few boot readahead related
interfaces. These interfaces are trivial to implement. To simplify
- porting we provide this reference implementation. Applications are
+ porting, we provide this reference implementation. Applications are
welcome to reimplement the algorithms described here if they do not
want to include these two source files.
More information about the systemd-commits
mailing list