summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2010-09-08 12:46:03 +0200
committerRainer Gerhards <rgerhards@adiscon.com>2010-09-08 12:46:03 +0200
commit21a2672222a1b403ff0811154dec156676bed732 (patch)
tree982844283e04305132de3508e38d413c25a840cc
parent3e2d011e8c1c42801194d387b75ca4f4a175ae5d (diff)
downloadrsyslog-21a2672222a1b403ff0811154dec156676bed732.tar.gz
rsyslog-21a2672222a1b403ff0811154dec156676bed732.tar.xz
rsyslog-21a2672222a1b403ff0811154dec156676bed732.zip
moved systemd interface to rsyslog convenience lib
Mostly a refresh of sd-daemon.[ch] from its source plus some make file changes. We now have systemd interfaces inside rsyslog, so that all plugins interested can call the interfaces. Seems not to be totally necessary right now, but will help in the long term.
-rw-r--r--plugins/imuxsock/Makefile.am6
-rw-r--r--runtime/Makefile.am4
-rw-r--r--runtime/sd-daemon.c31
-rw-r--r--runtime/sd-daemon.h12
4 files changed, 22 insertions, 31 deletions
diff --git a/plugins/imuxsock/Makefile.am b/plugins/imuxsock/Makefile.am
index 8803937f..28f9f9e3 100644
--- a/plugins/imuxsock/Makefile.am
+++ b/plugins/imuxsock/Makefile.am
@@ -1,6 +1,6 @@
pkglib_LTLIBRARIES = imuxsock.la
-imuxsock_la_SOURCES = imuxsock.c ../../runtime/sd-daemon.c ../../runtime/sd-daemon.h
-imuxsock_la_CPPFLAGS = -I$(top_srcdir) $(PTHREADS_CFLAGS) $(RSRT_CFLAGS)
+imuxsock_la_SOURCES = imuxsock.c
+imuxsock_la_CPPFLAGS = -DSD_EXPORT_SYMBOLS -I$(top_srcdir) $(PTHREADS_CFLAGS) $(RSRT_CFLAGS)
imuxsock_la_LDFLAGS = -module -avoid-version
-imuxsock_la_LIBADD =
+imuxsock_la_LIBADD = $(RSRT_LIBS)
diff --git a/runtime/Makefile.am b/runtime/Makefile.am
index ef119492..5b2598b2 100644
--- a/runtime/Makefile.am
+++ b/runtime/Makefile.am
@@ -101,9 +101,9 @@ librsyslog_la_SOURCES = \
# runtime or will no longer be needed. -- rgerhards, 2008-06-13
if WITH_MODDIRS
-librsyslog_la_CPPFLAGS = -D_PATH_MODDIR=\"$(pkglibdir)/:$(moddirs)\" $(PTHREADS_CFLAGS)
+librsyslog_la_CPPFLAGS = -DSD_EXPORT_SYMBOLS -D_PATH_MODDIR=\"$(pkglibdir)/:$(moddirs)\" $(PTHREADS_CFLAGS)
else
-librsyslog_la_CPPFLAGS = -D_PATH_MODDIR=\"$(pkglibdir)/\" -I$(top_srcdir) $(PTHREADS_CFLAGS)
+librsyslog_la_CPPFLAGS = -DSD_EXPORT_SYMBOLS -D_PATH_MODDIR=\"$(pkglibdir)/\" -I$(top_srcdir) $(PTHREADS_CFLAGS)
endif
#librsyslog_la_LDFLAGS = -module -avoid-version
librsyslog_la_LIBADD = $(DL_LIBS) $(RT_LIBS)
diff --git a/runtime/sd-daemon.c b/runtime/sd-daemon.c
index 5df70e38..9c23b917 100644
--- a/runtime/sd-daemon.c
+++ b/runtime/sd-daemon.c
@@ -1,4 +1,4 @@
-/*-*- Mode: C; c-basic-offset: 8 -*-*/
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
/***
Copyright 2010 Lennart Poettering
@@ -325,18 +325,13 @@ int sd_is_socket_unix(int fd, int type, int listening, const char *path, size_t
}
int sd_notify(int unset_environment, const char *state) {
-#if defined(DISABLE_SYSTEMD) || !defined(__linux__)
+#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;
- struct ucred *ucred;
- union {
- struct cmsghdr cmsghdr;
- uint8_t buf[CMSG_SPACE(sizeof(struct ucred))];
- } control;
const char *e;
if (!state) {
@@ -369,23 +364,15 @@ int sd_notify(int unset_environment, const char *state) {
iovec.iov_base = (char*) state;
iovec.iov_len = strlen(state);
- memset(&control, 0, sizeof(control));
- control.cmsghdr.cmsg_level = SOL_SOCKET;
- control.cmsghdr.cmsg_type = SCM_CREDENTIALS;
- control.cmsghdr.cmsg_len = CMSG_LEN(sizeof(struct ucred));
-
- ucred = (struct ucred*) CMSG_DATA(&control.cmsghdr);
- ucred->pid = getpid();
- ucred->uid = getuid();
- ucred->gid = getgid();
-
memset(&msghdr, 0, sizeof(msghdr));
msghdr.msg_name = &sockaddr;
- msghdr.msg_namelen = sizeof(struct sockaddr_un);
+ msghdr.msg_namelen = sizeof(sa_family_t) + 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;
- msghdr.msg_control = &control;
- msghdr.msg_controllen = control.cmsghdr.cmsg_len;
if (sendmsg(fd, &msghdr, MSG_NOSIGNAL) < 0) {
r = -errno;
@@ -437,10 +424,10 @@ int sd_booted(void) {
/* We simply test whether the systemd cgroup hierarchy is
* mounted */
- if (lstat("/cgroup", &a) < 0)
+ if (lstat("/sys/fs/cgroup", &a) < 0)
return 0;
- if (lstat("/cgroup/systemd", &b) < 0)
+ if (lstat("/sys/fs/cgroup/systemd", &b) < 0)
return 0;
return a.st_dev != b.st_dev;
diff --git a/runtime/sd-daemon.h b/runtime/sd-daemon.h
index fd6221f2..45aac8bd 100644
--- a/runtime/sd-daemon.h
+++ b/runtime/sd-daemon.h
@@ -1,4 +1,4 @@
-/*-*- Mode: C; c-basic-offset: 8 -*-*/
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
#ifndef foosddaemonhfoo
#define foosddaemonhfoo
@@ -67,9 +67,13 @@ extern "C" {
See sd-daemon(7) for more information.
*/
-#if __GNUC__ >= 4
+#if (__GNUC__ >= 4)
#define _sd_printf_attr_(a,b) __attribute__ ((format (printf, a, b)))
-#define _sd_hidden_ __attribute__ ((visibility("hidden")))
+# if defined(SD_EXPORT_SYMBOLS)
+# define _sd_hidden_
+# else
+# define _sd_hidden_ __attribute__ ((visibility("hidden")))
+# endif
#else
#define _sd_printf_attr_(a,b)
#define _sd_hidden_
@@ -171,7 +175,7 @@ int sd_is_socket_unix(int fd, int type, int listening, const char *path, size_t
/*
Informs systemd about changed daemon state. This takes a number of
- newline seperated environment-style variable assignments in a
+ newline separated environment-style variable assignments in a
string. The following variables are known:
READY=1 Tells systemd that daemon startup is finished (only