summaryrefslogtreecommitdiffstats
path: root/runtime/sd-daemon.c
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 /runtime/sd-daemon.c
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.
Diffstat (limited to 'runtime/sd-daemon.c')
-rw-r--r--runtime/sd-daemon.c31
1 files changed, 9 insertions, 22 deletions
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;