summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--ChangeLog2
-rw-r--r--Makefile.am25
-rw-r--r--configure.ac10
-rw-r--r--plugins/imuxsock/imuxsock.c21
-rw-r--r--rsyslog.service.in8
-rw-r--r--rsyslog.socket8
7 files changed, 62 insertions, 14 deletions
diff --git a/.gitignore b/.gitignore
index bc362e7f..55f069ee 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,9 +25,11 @@ install-sh
missing
compile
rsyslogd
+rsyslog.service
*.orig
rg.conf*
*.swp
+*.cache
# some common names I use during development
utils
tmp*
diff --git a/ChangeLog b/ChangeLog
index 8129f634..3bb3d882 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -21,6 +21,8 @@ Version 5.7.1 [V5-DEVEL] (rgerhards), 2010-09-??
- imuxsock now supports up to 50 different sockets for input
- some code cleanup in imuxsock (consider this a release a major
modification, especially if problems show up)
+- bugfix: /dev/log was unlinked even when passed in from systemd
+ in which case it should be preserved as systemd owns it
---------------------------------------------------------------------------
Version 5.7.0 [V5-DEVEL] (rgerhards), 2010-09-16
- added module impstat to emit periodic statistics on rsyslog counters
diff --git a/Makefile.am b/Makefile.am
index c7646e3d..54b68153 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -39,6 +39,25 @@ lmgssutil_la_LDFLAGS = -module -avoid-version
lmgssutil_la_LIBADD = $(GSS_LIBS)
endif
+#
+# systemd support
+#
+if HAVE_SYSTEMD
+
+dist_systemdsystemunit_DATA = \
+ rsyslog.socket
+
+nodist_systemdsystemunit_DATA = \
+ rsyslog.service
+
+CLEANFILES = \
+ rsyslog.service
+
+%.service: %.service.in
+ $(AM_V_GEN)sed -e 's,@sbindir\@,$(sbindir),g' $< > $@
+
+endif
+
EXTRA_DIST = \
freebsd/rsyslogd \
slackware/rc.rsyslogd \
@@ -47,7 +66,8 @@ EXTRA_DIST = \
COPYING.LESSER \
contrib/gnutls/ca.pem \
contrib/gnutls/cert.pem \
- contrib/gnutls/key.pem
+ contrib/gnutls/key.pem \
+ rsyslog.service.in
SUBDIRS = doc runtime . plugins/immark plugins/imuxsock plugins/imtcp plugins/imudp plugins/omtesting
@@ -200,5 +220,6 @@ DISTCHECK_CONFIGURE_FLAGS= --enable-gssapi_krb5 \
--enable-shave \
--enable-extended-tests \
--enable-impstats \
- --enable-memcheck
+ --enable-memcheck \
+ --with-systemdsystemunitdir=$$dc_install_base/$(systemdsystemunitdir)
ACLOCAL_AMFLAGS = -I m4
diff --git a/configure.ac b/configure.ac
index 069a8fd8..7254b99d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -360,6 +360,16 @@ if test "$enable_unlimited_select" = "yes"; then
fi
+# support for systemd unit files
+AC_ARG_WITH([systemdsystemunitdir],
+ AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
+ [], [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)])
+if test "x$with_systemdsystemunitdir" != xno; then
+ AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
+fi
+AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ])
+
+
# debug
AC_ARG_ENABLE(debug,
[AS_HELP_STRING([--enable-debug],[Enable debug mode @<:@default=no@:>@])],
diff --git a/plugins/imuxsock/imuxsock.c b/plugins/imuxsock/imuxsock.c
index ad2d61c8..41bff4f9 100644
--- a/plugins/imuxsock/imuxsock.c
+++ b/plugins/imuxsock/imuxsock.c
@@ -139,6 +139,7 @@ static int startIndexUxLocalSockets; /* process fd from that index on (used to
* read-only after startup
*/
static int nfd = 1; /* number of Unix sockets open / read-only after startup */
+static int bSysSockFromSystemd = 0; /* Did we receive the system socket from systemd? */
/* config settings */
static int bOmitLocalLogging = 0;
@@ -368,6 +369,7 @@ openLogSocket(lstn_t *pLstn)
return -1;
if (ustrcmp(pLstn->sockName, UCHAR_CONSTANT(_PATH_LOG)) == 0) {
+ bSysSockFromSystemd = 0; /* set default */
int r;
/* System log socket code. Check whether an FD was passed in from systemd. If
@@ -396,6 +398,7 @@ openLogSocket(lstn_t *pLstn)
errmsg.LogError(EINVAL, NO_ERRCODE, "Passed systemd socket of wrong type");
ABORT_FINALIZE(RS_RET_ERR_CRE_AFUX);
}
+ bSysSockFromSystemd = 1; /* indicate we got the socket from systemd */
} else {
CHKiRet(createLogSocket(pLstn));
}
@@ -415,15 +418,6 @@ openLogSocket(lstn_t *pLstn)
}
}
-#if 0
- // SO_TIMESTAMP currently does not work for an unknown reason. Any help is appreciated!
- one = 1;
- if(setsockopt(pLstn->fd, SOL_SOCKET, SO_TIMESTAMP, &one, sizeof(one)) != 0) {
- errmsg.LogError(errno, NO_ERRCODE, "set SO_TIMESTAMP '%s'", pLstn->sockName);
- ABORT_FINALIZE(RS_RET_ERR_CRE_AFUX);
- }
-#endif
-
finalize_it:
if(iRet != RS_RET_OK) {
close(pLstn->fd);
@@ -802,13 +796,16 @@ CODESTARTafterRun
/* Clean-up files. If systemd passed us a socket it is
* systemd's job to clean it up.*/
- if (sd_listen_fds(0) > 0)
+ if(bSysSockFromSystemd) {
+ DBGPRINTF("imuxsock: got system socket from systemd, not unlinking it\n");
i = 1;
- else
+ } else
i = startIndexUxLocalSockets;
for(; i < nfd; i++)
- if (listeners[i].sockName && listeners[i].fd != -1)
+ if (listeners[i].sockName && listeners[i].fd != -1) {
+ DBGPRINTF("imuxsock: unlinking unix socket file[%d] %s\n", i, listeners[i].sockName);
unlink((char*) listeners[i].sockName);
+ }
/* free no longer needed string */
free(pLogSockName);
free(pLogHostName);
diff --git a/rsyslog.service.in b/rsyslog.service.in
new file mode 100644
index 00000000..ea966cc3
--- /dev/null
+++ b/rsyslog.service.in
@@ -0,0 +1,8 @@
+[Unit]
+Description=System Logging Service
+
+[Service]
+ExecStart=@sbindir@/rsyslogd -n -c5
+
+[Install]
+WantedBy=multi-user.target
diff --git a/rsyslog.socket b/rsyslog.socket
new file mode 100644
index 00000000..0cd86054
--- /dev/null
+++ b/rsyslog.socket
@@ -0,0 +1,8 @@
+[Unit]
+Description=Syslog Socket
+
+[Socket]
+ListenDatagram=/dev/log
+
+[Install]
+WantedBy=sockets.target