From 72065184996d257ae24a40e9fc3c1591095bf6680a7b9aab9fcf0a33c1002bf9 Mon Sep 17 00:00:00 2001 From: OBS User buildservice-autocommit Date: Thu, 21 Apr 2011 11:43:34 +0000 Subject: [PATCH 1/6] Updating link to change in openSUSE:Factory/rsyslog revision 25.0 OBS-URL: https://build.opensuse.org/package/show/Base:System/rsyslog?expand=0&rev=41800352c0468b13006a8499604a3852 --- rsyslog.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rsyslog.spec b/rsyslog.spec index 285b412..f3d8c1b 100644 --- a/rsyslog.spec +++ b/rsyslog.spec @@ -21,7 +21,7 @@ Name: rsyslog Summary: The enhanced syslogd for Linux and Unix Version: 5.6.5 -Release: 1 +Release: 2 %define upstream_version 5.6.5 %define with_dbi 0%{?suse_version} >= 1140 || 0%{?build_with_relp:1} %define with_relp 0%{?suse_version} >= 1130 || 0%{?build_with_relp:1} From ed9f503103642bf22252b2c0e6828355308d741e51dea960d776088045f180c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cristian=20Rodr=C3=ADguez?= Date: Mon, 25 Apr 2011 23:46:25 +0000 Subject: [PATCH 2/6] Accepting request 68222 from home:darix:branches:Base:System OBS-URL: https://build.opensuse.org/request/show/68222 OBS-URL: https://build.opensuse.org/package/show/Base:System/rsyslog?expand=0&rev=46 --- rsyslog-5.6.5.tar.bz2 | 3 - rsyslog-5.8.0.tar.bz2 | 3 + rsyslog-deferred-dns-query-race.diff | 281 ------- rsyslog-systemd-integration.bnc656104.diff | 931 +-------------------- rsyslog.changes | 25 + rsyslog.spec | 24 +- 6 files changed, 50 insertions(+), 1217 deletions(-) delete mode 100644 rsyslog-5.6.5.tar.bz2 create mode 100644 rsyslog-5.8.0.tar.bz2 delete mode 100644 rsyslog-deferred-dns-query-race.diff diff --git a/rsyslog-5.6.5.tar.bz2 b/rsyslog-5.6.5.tar.bz2 deleted file mode 100644 index 262f355..0000000 --- a/rsyslog-5.6.5.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:38c5f3639d316d1fd78bb933a701063be0910977c71ba775fabac0eb3f94c013 -size 1848178 diff --git a/rsyslog-5.8.0.tar.bz2 b/rsyslog-5.8.0.tar.bz2 new file mode 100644 index 0000000..9a712f9 --- /dev/null +++ b/rsyslog-5.8.0.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ca538374f347eddff5f827f8f14792b0f3cda82dbbeecfe6509ea65e3a5f779 +size 1904404 diff --git a/rsyslog-deferred-dns-query-race.diff b/rsyslog-deferred-dns-query-race.diff deleted file mode 100644 index 8456680..0000000 --- a/rsyslog-deferred-dns-query-race.diff +++ /dev/null @@ -1,281 +0,0 @@ -From 21f69b2c3a95c990ea123d078b08c554cab1d121 Mon Sep 17 00:00:00 2001 -From: Rainer Gerhards -Date: Fri, 8 Apr 2011 11:04:38 +0200 -Subject: [PATCH] bugfix: race condition in deferred name resolution - -Note that this actually is a very small change, but I needed -to shuffle a lot of code around in order to make it compile -(due to required define order...). - -Signed-off-by: Marius Tomaschewski ---- - runtime/msg.c | 232 +++++++++++++++++++++++++++++---------------------------- - 1 files changed, 117 insertions(+), 115 deletions(-) - -diff --git a/runtime/msg.c b/runtime/msg.c -index 409515a..8a1e66a 100644 ---- a/runtime/msg.c -+++ b/runtime/msg.c -@@ -287,6 +287,121 @@ static pthread_mutex_t mutTrimCtr; /* mutex to handle malloc trim */ - static int getAPPNAMELen(msg_t *pM, sbool bLockMutex); - - -+/* The following functions will support advanced output module -+ * multithreading, once this is implemented. Currently, we -+ * include them as hooks only. The idea is that we need to guard -+ * some msg objects data fields against concurrent access if -+ * we run on multiple threads. Please note that in any case this -+ * is not necessary for calls from INPUT modules, because they -+ * construct the message object and do this serially. Only when -+ * the message is in the processing queue, multiple threads may -+ * access a single object. Consequently, there are no guard functions -+ * for "set" methods, as these are called during input. Only "get" -+ * functions that modify important structures have them. -+ * rgerhards, 2007-07-20 -+ * We now support locked and non-locked operations, depending on -+ * the configuration of rsyslog. To support this, we use function -+ * pointers. Initially, we start in non-locked mode. There, all -+ * locking operations call into dummy functions. When locking is -+ * enabled, the function pointers are changed to functions doing -+ * actual work. We also introduced another MsgPrepareEnqueue() function -+ * which initializes the locking structures, if needed. This is -+ * necessary because internal messages during config file startup -+ * processing are always created in non-locking mode. So we can -+ * not initialize locking structures during constructions. We now -+ * postpone this until when the message is fully constructed and -+ * enqueued. Then we know the status of locking. This has a nice -+ * side effect, and that is that during the initial creation of -+ * the Msg object no locking needs to be done, which results in better -+ * performance. -- rgerhards, 2008-01-05 -+ */ -+static void (*funcLock)(msg_t *pMsg); -+static void (*funcUnlock)(msg_t *pMsg); -+static void (*funcDeleteMutex)(msg_t *pMsg); -+void (*funcMsgPrepareEnqueue)(msg_t *pMsg); -+#if 1 /* This is a debug aid */ -+#define MsgLock(pMsg) funcLock(pMsg) -+#define MsgUnlock(pMsg) funcUnlock(pMsg) -+#else -+#define MsgLock(pMsg) {dbgprintf("MsgLock line %d\n - ", __LINE__); funcLock(pMsg);; } -+#define MsgUnlock(pMsg) {dbgprintf("MsgUnlock line %d - ", __LINE__); funcUnlock(pMsg); } -+#endif -+ -+/* the next function is a dummy to be used by the looking functions -+ * when the class is not yet running in an environment where locking -+ * is necessary. Please note that the need to lock can (and will) change -+ * during a single run. Typically, this is depending on the operation mode -+ * of the message queues (which is operator-configurable). -- rgerhards, 2008-01-05 -+ */ -+static void MsgLockingDummy(msg_t __attribute__((unused)) *pMsg) -+{ -+ /* empty be design */ -+} -+ -+ -+/* The following function prepares a message for enqueue into the queue. This is -+ * where a message may be accessed by multiple threads. This implementation here -+ * is the version for multiple concurrent acces. It initializes the locking -+ * structures. -+ * TODO: change to an iRet interface! -- rgerhards, 2008-07-14 -+ */ -+static void MsgPrepareEnqueueLockingCase(msg_t *pThis) -+{ -+ BEGINfunc -+ assert(pThis != NULL); -+ pthread_mutex_init(&pThis->mut, NULL); -+ pThis->bDoLock = 1; -+ ENDfunc -+} -+ -+ -+/* ... and now the locking and unlocking implementations: */ -+static void MsgLockLockingCase(msg_t *pThis) -+{ -+ /* DEV debug only! dbgprintf("MsgLock(0x%lx)\n", (unsigned long) pThis); */ -+ assert(pThis != NULL); -+ if(pThis->bDoLock == 1) /* TODO: this is a testing hack, we should find a way with better performance! -- rgerhards, 2009-01-27 */ -+ pthread_mutex_lock(&pThis->mut); -+} -+ -+static void MsgUnlockLockingCase(msg_t *pThis) -+{ -+ /* DEV debug only! dbgprintf("MsgUnlock(0x%lx)\n", (unsigned long) pThis); */ -+ assert(pThis != NULL); -+ if(pThis->bDoLock == 1) /* TODO: this is a testing hack, we should find a way with better performance! -- rgerhards, 2009-01-27 */ -+ pthread_mutex_unlock(&pThis->mut); -+} -+ -+/* delete the mutex object on message destruction (locking case) -+ */ -+static void MsgDeleteMutexLockingCase(msg_t *pThis) -+{ -+ assert(pThis != NULL); -+ pthread_mutex_destroy(&pThis->mut); -+} -+ -+/* enable multiple concurrent access on the message object -+ * This works on a class-wide basis and can bot be undone. -+ * That is, if it is once enabled, it can not be disabled during -+ * the same run. When this function is called, no other thread -+ * must manipulate message objects. Then we would have race conditions, -+ * but guarding against this is counter-productive because it -+ * would cost additional time. Plus, it would be a programming error. -+ * rgerhards, 2008-01-05 -+ */ -+rsRetVal MsgEnableThreadSafety(void) -+{ -+ DEFiRet; -+ funcLock = MsgLockLockingCase; -+ funcUnlock = MsgUnlockLockingCase; -+ funcMsgPrepareEnqueue = MsgPrepareEnqueueLockingCase; -+ funcDeleteMutex = MsgDeleteMutexLockingCase; -+ RETiRet; -+} -+ -+/* end locking functions */ -+ -+ - static inline int getProtocolVersion(msg_t *pM) - { - return(pM->iProtocolVersion); -@@ -306,6 +421,7 @@ resolveDNS(msg_t *pMsg) { - uchar fromHostFQDN[NI_MAXHOST]; - DEFiRet; - -+ MsgLock(pMsg); - CHKiRet(objUse(net, CORE_COMPONENT)); - if(pMsg->msgFlags & NEEDS_DNSRESOL) { - localRet = net.cvthname(pMsg->rcvFrom.pfrominet, fromHost, fromHostFQDN, fromHostIP); -@@ -315,6 +431,7 @@ resolveDNS(msg_t *pMsg) { - } - } - finalize_it: -+ MsgUnlock(pMsg); - if(iRet != RS_RET_OK) { - /* best we can do: remove property */ - MsgSetRcvFromStr(pMsg, UCHAR_CONSTANT(""), 0, &propFromHost); -@@ -531,121 +648,6 @@ uchar *propIDToName(propid_t propID) - } - - --/* The following functions will support advanced output module -- * multithreading, once this is implemented. Currently, we -- * include them as hooks only. The idea is that we need to guard -- * some msg objects data fields against concurrent access if -- * we run on multiple threads. Please note that in any case this -- * is not necessary for calls from INPUT modules, because they -- * construct the message object and do this serially. Only when -- * the message is in the processing queue, multiple threads may -- * access a single object. Consequently, there are no guard functions -- * for "set" methods, as these are called during input. Only "get" -- * functions that modify important structures have them. -- * rgerhards, 2007-07-20 -- * We now support locked and non-locked operations, depending on -- * the configuration of rsyslog. To support this, we use function -- * pointers. Initially, we start in non-locked mode. There, all -- * locking operations call into dummy functions. When locking is -- * enabled, the function pointers are changed to functions doing -- * actual work. We also introduced another MsgPrepareEnqueue() function -- * which initializes the locking structures, if needed. This is -- * necessary because internal messages during config file startup -- * processing are always created in non-locking mode. So we can -- * not initialize locking structures during constructions. We now -- * postpone this until when the message is fully constructed and -- * enqueued. Then we know the status of locking. This has a nice -- * side effect, and that is that during the initial creation of -- * the Msg object no locking needs to be done, which results in better -- * performance. -- rgerhards, 2008-01-05 -- */ --static void (*funcLock)(msg_t *pMsg); --static void (*funcUnlock)(msg_t *pMsg); --static void (*funcDeleteMutex)(msg_t *pMsg); --void (*funcMsgPrepareEnqueue)(msg_t *pMsg); --#if 1 /* This is a debug aid */ --#define MsgLock(pMsg) funcLock(pMsg) --#define MsgUnlock(pMsg) funcUnlock(pMsg) --#else --#define MsgLock(pMsg) {dbgprintf("MsgLock line %d\n - ", __LINE__); funcLock(pMsg);; } --#define MsgUnlock(pMsg) {dbgprintf("MsgUnlock line %d - ", __LINE__); funcUnlock(pMsg); } --#endif -- --/* the next function is a dummy to be used by the looking functions -- * when the class is not yet running in an environment where locking -- * is necessary. Please note that the need to lock can (and will) change -- * during a single run. Typically, this is depending on the operation mode -- * of the message queues (which is operator-configurable). -- rgerhards, 2008-01-05 -- */ --static void MsgLockingDummy(msg_t __attribute__((unused)) *pMsg) --{ -- /* empty be design */ --} -- -- --/* The following function prepares a message for enqueue into the queue. This is -- * where a message may be accessed by multiple threads. This implementation here -- * is the version for multiple concurrent acces. It initializes the locking -- * structures. -- * TODO: change to an iRet interface! -- rgerhards, 2008-07-14 -- */ --static void MsgPrepareEnqueueLockingCase(msg_t *pThis) --{ -- BEGINfunc -- assert(pThis != NULL); -- pthread_mutex_init(&pThis->mut, NULL); -- pThis->bDoLock = 1; -- ENDfunc --} -- -- --/* ... and now the locking and unlocking implementations: */ --static void MsgLockLockingCase(msg_t *pThis) --{ -- /* DEV debug only! dbgprintf("MsgLock(0x%lx)\n", (unsigned long) pThis); */ -- assert(pThis != NULL); -- if(pThis->bDoLock == 1) /* TODO: this is a testing hack, we should find a way with better performance! -- rgerhards, 2009-01-27 */ -- pthread_mutex_lock(&pThis->mut); --} -- --static void MsgUnlockLockingCase(msg_t *pThis) --{ -- /* DEV debug only! dbgprintf("MsgUnlock(0x%lx)\n", (unsigned long) pThis); */ -- assert(pThis != NULL); -- if(pThis->bDoLock == 1) /* TODO: this is a testing hack, we should find a way with better performance! -- rgerhards, 2009-01-27 */ -- pthread_mutex_unlock(&pThis->mut); --} -- --/* delete the mutex object on message destruction (locking case) -- */ --static void MsgDeleteMutexLockingCase(msg_t *pThis) --{ -- assert(pThis != NULL); -- pthread_mutex_destroy(&pThis->mut); --} -- --/* enable multiple concurrent access on the message object -- * This works on a class-wide basis and can bot be undone. -- * That is, if it is once enabled, it can not be disabled during -- * the same run. When this function is called, no other thread -- * must manipulate message objects. Then we would have race conditions, -- * but guarding against this is counter-productive because it -- * would cost additional time. Plus, it would be a programming error. -- * rgerhards, 2008-01-05 -- */ --rsRetVal MsgEnableThreadSafety(void) --{ -- DEFiRet; -- funcLock = MsgLockLockingCase; -- funcUnlock = MsgUnlockLockingCase; -- funcMsgPrepareEnqueue = MsgPrepareEnqueueLockingCase; -- funcDeleteMutex = MsgDeleteMutexLockingCase; -- RETiRet; --} -- --/* end locking functions */ -- -- - /* This is common code for all Constructors. It is defined in an - * inline'able function so that we can save a function call in the - * actual constructors (otherwise, the msgConstruct would need --- -1.7.3.4 - diff --git a/rsyslog-systemd-integration.bnc656104.diff b/rsyslog-systemd-integration.bnc656104.diff index fd96b49..a94f578 100644 --- a/rsyslog-systemd-integration.bnc656104.diff +++ b/rsyslog-systemd-integration.bnc656104.diff @@ -1,102 +1,10 @@ -commit 020e414396b9ed4d005b6b0f6fb6567fe954230c -Author: Marius Tomaschewski -Date: Thu Jan 20 15:08:08 2011 +0100 - - Improved systemd socket activation support - - Support for multiple unix sockets and activation in forking mode - -commit f9a409137bdcd04ebf4851a23f573c436a14e5b2 -Author: Rainer Gerhards -Date: Wed Sep 8 12:46:03 2010 +0200 - - 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. - -commit be3d81ee54088180a657ac37899d1def8ef4b36c -Author: Rainer Gerhards -Date: Tue Sep 7 14:19:05 2010 +0200 - - added forgotten files - -commit 8b7ca000dec71f6dcb73a8ab738093c17bd293c1 -Author: Lennart Poettering -Date: Tue Sep 7 13:06:04 2010 +0200 - - acquire /dev/log socket optionally from systemd - - [skipped whitespace-only changes -- mt@suse.de] -diff --git a/ChangeLog b/ChangeLog -index 89d5711..1e2aaa7 100644 ---- a/ChangeLog -+++ b/ChangeLog -@@ -1,3 +1,5 @@ -+- acquire /dev/log socket optionally from systemd -+ thanks to Lennart Poettering for this patch - --------------------------------------------------------------------------- - Version 5.6.5 [V5-STABLE] (rgerhards), 2011-03-22 - - bugfix: failover did not work correctly if repeated msg reduction was on -diff --git a/plugins/imuxsock/Makefile.am b/plugins/imuxsock/Makefile.am -index a2fe0ba..28f9f9e 100644 ---- a/plugins/imuxsock/Makefile.am -+++ b/plugins/imuxsock/Makefile.am -@@ -1,6 +1,6 @@ - pkglib_LTLIBRARIES = imuxsock.la - - imuxsock_la_SOURCES = imuxsock.c --imuxsock_la_CPPFLAGS = -I$(top_srcdir) $(PTHREADS_CFLAGS) $(RSRT_CFLAGS) -+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/plugins/imuxsock/imuxsock.c b/plugins/imuxsock/imuxsock.c -index 046f12f..fc6b1e7 100644 ---- a/plugins/imuxsock/imuxsock.c -+++ b/plugins/imuxsock/imuxsock.c -@@ -47,6 +47,7 @@ - #include "prop.h" - #include "debug.h" - #include "unlimited_select.h" -+#include "sd-daemon.h" - - MODULE_TYPE_INPUT - -@@ -86,6 +87,7 @@ static prop_t *funixHName[MAXFUNIX] = { NULL, }; /* host-name override - if set, - static int funixFlowCtl[MAXFUNIX] = { eFLOWCTL_NO_DELAY, }; /* flow control settings for this socket */ - static int funix[MAXFUNIX] = { -1, }; /* read-only after startup */ - static int nfunix = 1; /* number of Unix sockets open / read-only after startup */ -+static int sd_fds = 0; /* number of systemd activated sockers */ - - /* config settings */ - static int bOmitLocalLogging = 0; -@@ -190,6 +192,20 @@ static int create_unix_socket(const char *path, int bCreatePath) - if (path[0] == '\0') - return -1; - -+ if (sd_fds > 0) { -+ for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + sd_fds; fd++) { -+ if( sd_is_socket_unix(fd, SOCK_DGRAM, -1, path, 0) == 1) { -+ /* ok, it matches -- just use as is */ -+ return fd; -+ } -+ /* -+ * otherwise it either didn't matched *this* socket and -+ * we just continue to check the next one or there were -+ * an error and we will recreate it bellow. -+ */ -+ } -+ } -+ - unlink(path); - - memset(&sunx, 0, sizeof(sunx)); -@@ -371,6 +387,11 @@ CODESTARTwillRun - if(pLogSockName != NULL) - funixn[0] = pLogSockName; +Index: plugins/imuxsock/imuxsock.c +=================================================================== +--- plugins/imuxsock/imuxsock.c.orig ++++ plugins/imuxsock/imuxsock.c +@@ -782,6 +782,11 @@ CODESTARTwillRun + ABORT_FINALIZE(RS_RET_ERR_CRE_AFUX); + } + sd_fds = sd_listen_fds(0); + if (sd_fds < 0) { @@ -104,826 +12,5 @@ index 046f12f..fc6b1e7 100644 + } + /* initialize and return if will run or not */ - for (i = startIndexUxLocalSockets ; i < nfunix ; i++) { - if ((funix[i] = create_unix_socket((char*) funixn[i], funixCreateSockPath[i])) != -1) -@@ -395,10 +416,19 @@ CODESTARTafterRun - if (funix[i] != -1) - close(funix[i]); - -- /* Clean-up files. */ -- for(i = startIndexUxLocalSockets; i < nfunix; i++) -- if (funixn[i] && funix[i] != -1) -+ /* Clean-up files. If systemd passed us a socket it is -+ * systemd's job to clean it up.*/ -+ for(i = startIndexUxLocalSockets; i < nfunix; i++) { -+ if (funixn[i] && funix[i] != -1) { -+ if (sd_fds > 0 && -+ funix[i] >= SD_LISTEN_FDS_START && -+ funix[i] < SD_LISTEN_FDS_START + sd_fds) -+ continue; -+ - unlink((char*) funixn[i]); -+ } -+ } -+ - /* free no longer needed string */ - free(pLogSockName); - free(pLogHostName); -diff --git a/runtime/Makefile.am b/runtime/Makefile.am -index b700eae..27c56a2 100644 ---- a/runtime/Makefile.am -+++ b/runtime/Makefile.am -@@ -82,6 +82,8 @@ librsyslog_la_SOURCES = \ - prop.h \ - cfsysline.c \ - cfsysline.h \ -+ sd-daemon.c \ -+ sd-daemon.h \ - \ - \ - ../action.h \ -@@ -100,9 +102,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) -@@ -178,3 +180,6 @@ lmnsd_gtls_la_LDFLAGS = -module -avoid-version - lmnsd_gtls_la_LIBADD = $(GNUTLS_LIBS) - endif - -+update-systemd: -+ curl http://cgit.freedesktop.org/systemd/plain/src/sd-daemon.c > sd-daemon.c -+ curl http://cgit.freedesktop.org/systemd/plain/src/sd-daemon.h > sd-daemon.h -diff --git a/runtime/sd-daemon.c b/runtime/sd-daemon.c -new file mode 100644 -index 0000000..9c23b91 ---- /dev/null -+++ b/runtime/sd-daemon.c -@@ -0,0 +1,435 @@ -+/*-*- 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 -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "sd-daemon.h" -+ -+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; -+ -+ if (!(e = getenv("LISTEN_PID"))) { -+ r = 0; -+ goto finish; -+ } -+ -+ errno = 0; -+ l = strtoul(e, &p, 10); -+ -+ if (errno != 0) { -+ r = -errno; -+ goto finish; -+ } -+ -+ if (!p || *p || l <= 0) { -+ r = -EINVAL; -+ goto finish; -+ } -+ -+ /* Is this for us? */ -+ if (getpid() != (pid_t) l) { -+ r = 0; -+ goto finish; -+ } -+ -+ if (!(e = getenv("LISTEN_FDS"))) { -+ r = 0; -+ goto finish; -+ } -+ -+ errno = 0; -+ l = strtoul(e, &p, 10); -+ -+ if (errno != 0) { -+ r = -errno; -+ goto finish; -+ } -+ -+ if (!p || *p) { -+ r = -EINVAL; -+ goto finish; -+ } -+ -+ for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + (int) l; fd ++) { -+ int flags; -+ -+ if ((flags = fcntl(fd, F_GETFD)) < 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 -+} -+ -+int sd_is_fifo(int fd, const char *path) { -+ struct stat st_fd; -+ -+ if (fd < 0) -+ return -EINVAL; -+ -+ memset(&st_fd, 0, sizeof(st_fd)); -+ if (fstat(fd, &st_fd) < 0) -+ return -errno; -+ -+ if (!S_ISFIFO(st_fd.st_mode)) -+ return 0; -+ -+ if (path) { -+ struct stat st_path; -+ -+ memset(&st_path, 0, sizeof(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; -+} -+ -+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; -+}; -+ -+int sd_is_socket(int fd, int family, int type, int listening) { -+ int r; -+ -+ if (family < 0) -+ return -EINVAL; -+ -+ if ((r = sd_is_socket_internal(fd, type, listening)) <= 0) -+ return r; -+ -+ if (family > 0) { -+ union sockaddr_union sockaddr; -+ socklen_t l; -+ -+ memset(&sockaddr, 0, sizeof(sockaddr)); -+ 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; -+} -+ -+int sd_is_socket_inet(int fd, int family, int type, int listening, uint16_t port) { -+ union sockaddr_union sockaddr; -+ socklen_t l; -+ int r; -+ -+ if (family != 0 && family != AF_INET && family != AF_INET6) -+ return -EINVAL; -+ -+ if ((r = sd_is_socket_internal(fd, type, listening)) <= 0) -+ return r; -+ -+ memset(&sockaddr, 0, sizeof(sockaddr)); -+ l = sizeof(sockaddr); -+ -+ 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; -+} -+ -+int sd_is_socket_unix(int fd, int type, int listening, const char *path, size_t length) { -+ union sockaddr_union sockaddr; -+ socklen_t l; -+ int r; -+ -+ if ((r = sd_is_socket_internal(fd, type, listening)) <= 0) -+ return r; -+ -+ memset(&sockaddr, 0, sizeof(sockaddr)); -+ l = sizeof(sockaddr); -+ -+ 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 == sizeof(sa_family_t); -+ -+ if (path[0]) -+ /* Normal path socket */ -+ return -+ (l >= sizeof(sa_family_t) + length + 1) && -+ memcmp(path, sockaddr.un.sun_path, length+1) == 0; -+ else -+ /* Abstract namespace socket */ -+ return -+ (l == sizeof(sa_family_t) + length) && -+ memcmp(path, sockaddr.un.sun_path, length) == 0; -+ } -+ -+ return 1; -+} -+ -+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; -+ } -+ -+ if (!(e = getenv("NOTIFY_SOCKET"))) -+ return 0; -+ -+ /* Must be an abstract socket, or an absolute path */ -+ if ((e[0] != '@' && e[0] != '/') || e[1] == 0) { -+ r = -EINVAL; -+ goto finish; -+ } -+ -+ if ((fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0)) < 0) { -+ r = -errno; -+ goto finish; -+ } -+ -+ memset(&sockaddr, 0, 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; -+ -+ memset(&iovec, 0, sizeof(iovec)); -+ iovec.iov_base = (char*) state; -+ iovec.iov_len = strlen(state); -+ -+ memset(&msghdr, 0, sizeof(msghdr)); -+ msghdr.msg_name = &sockaddr; -+ 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; -+ -+ 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 -+} -+ -+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 -+} -+ -+int sd_booted(void) { -+#if defined(DISABLE_SYSTEMD) || !defined(__linux__) -+ return 0; -+#else -+ -+ struct stat a, b; -+ -+ /* We simply test whether the systemd cgroup hierarchy is -+ * mounted */ -+ -+ if (lstat("/sys/fs/cgroup", &a) < 0) -+ return 0; -+ -+ if (lstat("/sys/fs/cgroup/systemd", &b) < 0) -+ return 0; -+ -+ return a.st_dev != b.st_dev; -+#endif -+} -diff --git a/runtime/sd-daemon.h b/runtime/sd-daemon.h -new file mode 100644 -index 0000000..45aac8b ---- /dev/null -+++ b/runtime/sd-daemon.h -@@ -0,0 +1,261 @@ -+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ -+ -+#ifndef foosddaemonhfoo -+#define foosddaemonhfoo -+ -+/*** -+ 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. -+***/ -+ -+#include -+#include -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/* -+ 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. -+ -+ The following functionality is provided: -+ -+ - Support for logging with log levels on stderr -+ - File descriptor passing for socket-based activation -+ - 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/plain/src/sd-daemon.h -+ http://cgit.freedesktop.org/systemd/plain/src/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(7) for more information. -+*/ -+ -+#if (__GNUC__ >= 4) -+#define _sd_printf_attr_(a,b) __attribute__ ((format (printf, a, b))) -+# 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_ -+#endif -+ -+/* -+ Log levels for usage on stderr: -+ -+ fprintf(stderr, SD_NOTICE "Hello World!\n"); -+ -+ This is similar to printk() usage in the kernel. -+*/ -+#define SD_EMERG "<0>" /* system is unusable */ -+#define SD_ALERT "<1>" /* action must be taken immediately */ -+#define SD_CRIT "<2>" /* critical conditions */ -+#define SD_ERR "<3>" /* error conditions */ -+#define SD_WARNING "<4>" /* warning conditions */ -+#define SD_NOTICE "<5>" /* normal but significant condition */ -+#define SD_INFO "<6>" /* informational */ -+#define SD_DEBUG "<7>" /* debug-level messages */ -+ -+/* The first passed file descriptor is fd 3 */ -+#define SD_LISTEN_FDS_START 3 -+ -+/* -+ Returns how many file descriptors have been passed, or a negative -+ errno code on failure. Optionally, removes the $LISTEN_FDS and -+ $LISTEN_PID file descriptors from the environment (recommended, but -+ problematic in threaded environments). If r is the return value of -+ this function you'll find the file descriptors passed as fds -+ SD_LISTEN_FDS_START to SD_LISTEN_FDS_START+r-1. Returns a negative -+ errno style error code on failure. This function call ensures that -+ the FD_CLOEXEC flag is set for the passed file descriptors, to make -+ sure they are not passed on to child processes. If FD_CLOEXEC shall -+ not be set, the caller needs to unset it after this call for all file -+ descriptors that are used. -+ -+ See sd_listen_fds(3) for more information. -+*/ -+int sd_listen_fds(int unset_environment) _sd_hidden_; -+ -+/* -+ Helper call for identifying a passed file descriptor. Returns 1 if -+ the file descriptor is a FIFO in the file system stored under the -+ specified path, 0 otherwise. If path is NULL a path name check will -+ not be done and the call only verifies if the file descriptor -+ refers to a FIFO. Returns a negative errno style error code on -+ failure. -+ -+ See sd_is_fifo(3) for more information. -+*/ -+int sd_is_fifo(int fd, const char *path) _sd_hidden_; -+ -+/* -+ Helper call for identifying a passed file descriptor. Returns 1 if -+ the file descriptor is a socket of the specified family (AF_INET, -+ ...) and type (SOCK_DGRAM, SOCK_STREAM, ...), 0 otherwise. If -+ family is 0 a socket family check will not be done. If type is 0 a -+ socket type check will not be done and the call only verifies if -+ the file descriptor refers to a socket. If listening is > 0 it is -+ verified that the socket is in listening mode. (i.e. listen() has -+ been called) If listening is == 0 it is verified that the socket is -+ not in listening mode. If listening is < 0 no listening mode check -+ is done. Returns a negative errno style error code on failure. -+ -+ See sd_is_socket(3) for more information. -+*/ -+int sd_is_socket(int fd, int family, int type, int listening) _sd_hidden_; -+ -+/* -+ Helper call for identifying a passed file descriptor. Returns 1 if -+ the file descriptor is an Internet socket, of the specified family -+ (either AF_INET or AF_INET6) and the specified type (SOCK_DGRAM, -+ SOCK_STREAM, ...), 0 otherwise. If version is 0 a protocol version -+ check is not done. If type is 0 a socket type check will not be -+ done. If port is 0 a socket port check will not be done. The -+ listening flag is used the same way as in sd_is_socket(). Returns a -+ negative errno style error code on failure. -+ -+ See sd_is_socket_inet(3) for more information. -+*/ -+int sd_is_socket_inet(int fd, int family, int type, int listening, uint16_t port) _sd_hidden_; -+ -+/* -+ Helper call for identifying a passed file descriptor. Returns 1 if -+ the file descriptor is an AF_UNIX socket of the specified type -+ (SOCK_DGRAM, SOCK_STREAM, ...) and path, 0 otherwise. If type is 0 -+ a socket type check will not be done. If path is NULL a socket path -+ check will not be done. For normal AF_UNIX sockets set length to -+ 0. For abstract namespace sockets set length to the length of the -+ socket name (including the initial 0 byte), and pass the full -+ socket path in path (including the initial 0 byte). The listening -+ flag is used the same way as in sd_is_socket(). Returns a negative -+ errno style error code on failure. -+ -+ See sd_is_socket_unix(3) for more information. -+*/ -+int sd_is_socket_unix(int fd, int type, int listening, const char *path, size_t length) _sd_hidden_; -+ -+/* -+ Informs systemd about changed daemon state. This takes a number of -+ newline separated environment-style variable assignments in a -+ string. The following variables are known: -+ -+ READY=1 Tells systemd that daemon startup is finished (only -+ relevant for services of Type=notify). The passed -+ argument is a boolean "1" or "0". Since there is -+ little value in signalling non-readiness the only -+ value daemons should send is "READY=1". -+ -+ STATUS=... Passes a single-line status string back to systemd -+ that describes the daemon state. This is free-from -+ and can be used for various purposes: general state -+ feedback, fsck-like programs could pass completion -+ percentages and failing programs could pass a human -+ readable error message. Example: "STATUS=Completed -+ 66% of file system check..." -+ -+ ERRNO=... If a daemon fails, the errno-style error code, -+ formatted as string. Example: "ERRNO=2" for ENOENT. -+ -+ BUSERROR=... If a daemon fails, the D-Bus error-style error -+ code. Example: "BUSERROR=org.freedesktop.DBus.Error.TimedOut" -+ -+ MAINPID=... The main pid of a daemon, in case systemd did not -+ fork off the process itself. Example: "MAINPID=4711" -+ -+ Daemons can choose to send additional variables. However, it is -+ recommened to prefix variable names not listed above with X_. -+ -+ Returns a negative errno-style error code on failure. Returns > 0 -+ if systemd could be notified, 0 if it couldn't possibly because -+ systemd is not running. -+ -+ Example: When a daemon finished starting up, it could issue this -+ call to notify systemd about it: -+ -+ sd_notify(0, "READY=1"); -+ -+ See sd_notifyf() for more complete examples. -+ -+ See sd_notify(3) for more information. -+*/ -+int sd_notify(int unset_environment, const char *state) _sd_hidden_; -+ -+/* -+ Similar to sd_notify() but takes a format string. -+ -+ Example 1: A daemon could send the following after initialization: -+ -+ sd_notifyf(0, "READY=1\n" -+ "STATUS=Processing requests...\n" -+ "MAINPID=%lu", -+ (unsigned long) getpid()); -+ -+ Example 2: A daemon could send the following shortly before -+ exiting, on failure: -+ -+ sd_notifyf(0, "STATUS=Failed to start up: %s\n" -+ "ERRNO=%i", -+ strerror(errno), -+ errno); -+ -+ See sd_notifyf(3) for more information. -+*/ -+int sd_notifyf(int unset_environment, const char *format, ...) _sd_printf_attr_(2,3) _sd_hidden_; -+ -+/* -+ Returns > 0 if the system was booted with systemd. Returns < 0 on -+ error. Returns 0 if the system was not booted with systemd. Note -+ that all of the functions above handle non-systemd boots just -+ fine. You should NOT protect them with a call to this function. Also -+ note that this function checks whether the system, not the user -+ session is controlled by systemd. However the functions above work -+ for both session and system services. -+ -+ See sd_booted(3) for more information. -+*/ -+int sd_booted(void) _sd_hidden_; -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif -diff --git a/tools/syslogd.c b/tools/syslogd.c -index 1148108..e18101c 100644 ---- a/tools/syslogd.c -+++ b/tools/syslogd.c -@@ -135,6 +135,7 @@ - #include "net.h" - #include "vm.h" - #include "prop.h" -+#include "sd-daemon.h" - - /* definitions for objects we access */ - DEFobjCurrIf(obj) -@@ -2433,10 +2434,44 @@ doGlblProcessInit(void) - */ - exit(1); /* "good" exit - after forking, not diasabling anything */ - } -+ - num_fds = getdtablesize(); - close(0); - /* we keep stdout and stderr open in case we have to emit something */ -- for (i = 3; i < num_fds; i++) -+ i = 3; -+ -+ /* if (sd_booted()) */ { -+ const char *e; -+ char buf[24] = { '\0' }; -+ char *p = NULL; -+ unsigned long l; -+ int sd_fds; -+ -+ /* fork & systemd socket activation: -+ * fetch listen pid and update to ours, -+ * when it is set to pid of our parent. -+ */ -+ if ( (e = getenv("LISTEN_PID"))) { -+ errno = 0; -+ l = strtoul(e, &p, 10); -+ if (errno == 0 && l > 0 && (!p || !*p)) { -+ if (getppid() == (pid_t)l) { -+ snprintf(buf, sizeof(buf), "%d", -+ getpid()); -+ setenv("LISTEN_PID", buf, 1); -+ } -+ } -+ } -+ -+ /* -+ * close only all further fds, except -+ * of the fds provided by systemd. -+ */ -+ sd_fds = sd_listen_fds(0); -+ if (sd_fds > 0) -+ i = SD_LISTEN_FDS_START + sd_fds; -+ } -+ for ( ; i < num_fds; i++) - (void) close(i); - untty(); - } + actSocks = 0; + for (i = startIndexUxLocalSockets ; i < nfd ; i++) { diff --git a/rsyslog.changes b/rsyslog.changes index dd177c6..932a94c 100644 --- a/rsyslog.changes +++ b/rsyslog.changes @@ -1,3 +1,28 @@ +------------------------------------------------------------------- +Sun Apr 24 01:32:17 UTC 2011 - mrueckert@suse.de + +- update to 5.8.0 (v5-tsable) + This is the new v5-stable branch, importing all feature from the + 5.7.x versions. To see what has changed in regard to the previous + v5-stable, check the entries for 5.7.x in + /usr/share/doc/packages/rsyslog/ChangeLog. + + - bugfix: race condition in deferred name resolution + closes: http://bugzilla.adiscon.com/show_bug.cgi?id=238 + Special thanks to Marcin for his persistence in helping to solve this + bug. + - bugfix: DA queue was never shutdown once it was started + closes: http://bugzilla.adiscon.com/show_bug.cgi?id=241 +- dropped patch rsyslog-deferred-dns-query-race.diff + included in the release +- refreshed rsyslog-systemd-integration.bnc656104.diff: + most of the patch went upstream just a small chunk left +- fixed the with_dbi conditional, it was using the build_with_relp. +- added a new conditional with_systemd and moved all the systemd + specific things from suse_version >= 1140 to the with_systemd + conditional. the patch line in the preamble should be + unconditional. + ------------------------------------------------------------------- Fri Apr 8 13:24:34 UTC 2011 - mt@suse.de diff --git a/rsyslog.spec b/rsyslog.spec index f3d8c1b..37f25a6 100644 --- a/rsyslog.spec +++ b/rsyslog.spec @@ -20,10 +20,11 @@ Name: rsyslog Summary: The enhanced syslogd for Linux and Unix -Version: 5.6.5 +Version: 5.8.0 Release: 2 -%define upstream_version 5.6.5 -%define with_dbi 0%{?suse_version} >= 1140 || 0%{?build_with_relp:1} +%define upstream_version 5.8.0 +%define with_dbi 0%{?suse_version} >= 1140 || 0%{?build_with_dbi:1} +%define with_systemd 0%{?suse_version} >= 1140 || 0%{?build_with_systemd:1} %define with_relp 0%{?suse_version} >= 1130 || 0%{?build_with_relp:1} %define _sbindir /sbin %define rsyslogdocdir %{_docdir}/%{name} @@ -51,12 +52,14 @@ BuildRequires: librelp-devel # UDP spoof support %if 0%{?suse_version} >= 1140 BuildRequires: libnet-devel +%else +BuildRequires: libnet +%endif +%if 0%{?with_systemd} # The systemd package provides # /usr/share/doc/packages/systemd/sd-daemon.[ch] # files instead of a lib ... BuildRequires: systemd -%else -BuildRequires: libnet %endif BuildRoot: %{_tmppath}/%{name}-%{version}-build #Source0: http://download.rsyslog.com/rsyslog/rsyslog-.tar.gz @@ -65,10 +68,7 @@ Source1: rsyslog.sysconfig Source2: rsyslog.conf.in Source3: rsyslog.early.conf.in Source4: rsyslog.d.remote.conf.in -%if 0%{?suse_version} >= 1140 Patch1: rsyslog-systemd-integration.bnc656104.diff -%endif -Patch2: rsyslog-deferred-dns-query-race.diff %description Rsyslog is an enhanced multi-threaded syslogd supporting, among others, @@ -214,9 +214,8 @@ This module provides a UDP forwarder that allows changing the sender address. %prep %setup -q -n %{name}-%{upstream_version} -%if 0%{?suse_version} >= 1140 -%patch1 -p1 -%patch2 -p1 +%if 0%{?with_systemd} +%patch1 -p0 # install the files systemd provides rather than what we provide. cp -a /usr/share/doc/packages/systemd/sd-daemon.[ch] runtime/ %endif @@ -472,6 +471,9 @@ fi %doc %{rsyslogdocdir}/COPYING.LESSER %dir %{_localstatedir}/spool/rsyslog /var/adm/fillup-templates/sysconfig.syslog-rsyslog +%if 0%{?with_systemd} +/lib/systemd/system/rsyslog.service +%endif %files doc %defattr(-,root,root) From fa9db821613828476c26db3facaa26cb2b14ea80ca1c5a23db431ba9869ff194 Mon Sep 17 00:00:00 2001 From: Marius Tomaschewski Date: Tue, 26 Apr 2011 12:29:10 +0000 Subject: [PATCH 3/6] Accepting request 68368 from home:darix:branches:Base:System ok OBS-URL: https://build.opensuse.org/request/show/68368 OBS-URL: https://build.opensuse.org/package/show/Base:System/rsyslog?expand=0&rev=47 --- rsyslog.changes | 5 +++++ rsyslog.spec | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/rsyslog.changes b/rsyslog.changes index 932a94c..7278662 100644 --- a/rsyslog.changes +++ b/rsyslog.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Tue Apr 26 12:20:16 UTC 2011 - mrueckert@suse.de + +- dont ship the systemd service file for now. + ------------------------------------------------------------------- Sun Apr 24 01:32:17 UTC 2011 - mrueckert@suse.de diff --git a/rsyslog.spec b/rsyslog.spec index 37f25a6..fcb8346 100644 --- a/rsyslog.spec +++ b/rsyslog.spec @@ -327,6 +327,9 @@ install -m644 plugins/ommysql/createDB.sql \ install -m644 plugins/ompgsql/createDB.sql \ %{buildroot}%{rsyslogdocdir}/pgsql-createDB.sql # +%if 0%{?with_systemd} +rm -v %{buildroot}/lib/systemd/system/rsyslog.service +%endif %clean if [ -n "%{buildroot}" ] && [ "%{buildroot}" != "/" ] ; then @@ -471,9 +474,6 @@ fi %doc %{rsyslogdocdir}/COPYING.LESSER %dir %{_localstatedir}/spool/rsyslog /var/adm/fillup-templates/sysconfig.syslog-rsyslog -%if 0%{?with_systemd} -/lib/systemd/system/rsyslog.service -%endif %files doc %defattr(-,root,root) From 6067e5e03e1d4e752c43664b418d3a6cacc49253bd3b8ffc1cb62c8baf1c3243 Mon Sep 17 00:00:00 2001 From: Marius Tomaschewski Date: Tue, 26 Apr 2011 12:31:58 +0000 Subject: [PATCH 4/6] - Dropped obsolete rsyslog-systemd-integration.bnc656104.diff OBS-URL: https://build.opensuse.org/package/show/Base:System/rsyslog?expand=0&rev=48 --- rsyslog-systemd-integration.bnc656104.diff | 16 ---------------- rsyslog.changes | 5 +++++ rsyslog.spec | 2 -- 3 files changed, 5 insertions(+), 18 deletions(-) delete mode 100644 rsyslog-systemd-integration.bnc656104.diff diff --git a/rsyslog-systemd-integration.bnc656104.diff b/rsyslog-systemd-integration.bnc656104.diff deleted file mode 100644 index a94f578..0000000 --- a/rsyslog-systemd-integration.bnc656104.diff +++ /dev/null @@ -1,16 +0,0 @@ -Index: plugins/imuxsock/imuxsock.c -=================================================================== ---- plugins/imuxsock/imuxsock.c.orig -+++ plugins/imuxsock/imuxsock.c -@@ -782,6 +782,11 @@ CODESTARTwillRun - ABORT_FINALIZE(RS_RET_ERR_CRE_AFUX); - } - -+ sd_fds = sd_listen_fds(0); -+ if (sd_fds < 0) { -+ errmsg.LogError(-sd_fds, NO_ERRCODE, "Failed to acquire systemd sockets"); -+ } -+ - /* initialize and return if will run or not */ - actSocks = 0; - for (i = startIndexUxLocalSockets ; i < nfd ; i++) { diff --git a/rsyslog.changes b/rsyslog.changes index 7278662..8db9ba3 100644 --- a/rsyslog.changes +++ b/rsyslog.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Tue Apr 26 12:30:17 UTC 2011 - mt@suse.de + +- Dropped obsolete rsyslog-systemd-integration.bnc656104.diff + ------------------------------------------------------------------- Tue Apr 26 12:20:16 UTC 2011 - mrueckert@suse.de diff --git a/rsyslog.spec b/rsyslog.spec index fcb8346..51dc641 100644 --- a/rsyslog.spec +++ b/rsyslog.spec @@ -68,7 +68,6 @@ Source1: rsyslog.sysconfig Source2: rsyslog.conf.in Source3: rsyslog.early.conf.in Source4: rsyslog.d.remote.conf.in -Patch1: rsyslog-systemd-integration.bnc656104.diff %description Rsyslog is an enhanced multi-threaded syslogd supporting, among others, @@ -215,7 +214,6 @@ This module provides a UDP forwarder that allows changing the sender address. %prep %setup -q -n %{name}-%{upstream_version} %if 0%{?with_systemd} -%patch1 -p0 # install the files systemd provides rather than what we provide. cp -a /usr/share/doc/packages/systemd/sd-daemon.[ch] runtime/ %endif From a3cec4ffef1003fc458c9c78074a001d384c8373430b0a586b731192fcc36670 Mon Sep 17 00:00:00 2001 From: Marius Tomaschewski Date: Wed, 27 Apr 2011 09:31:00 +0000 Subject: [PATCH 5/6] - Fixed (reverted?) to use variables in rsyslog.conf.in - Added comments with bugzilla / fate references OBS-URL: https://build.opensuse.org/package/show/Base:System/rsyslog?expand=0&rev=49 --- rsyslog.conf.in | 4 ++-- rsyslog.spec | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/rsyslog.conf.in b/rsyslog.conf.in index b396af6..19b003a 100644 --- a/rsyslog.conf.in +++ b/rsyslog.conf.in @@ -43,12 +43,12 @@ $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # using the SYSLOGD_ADDITIONAL_SOCKET* variables in the # /etc/sysconfig/syslog file. # -$IncludeConfig /var/run/rsyslog/additional-log-sockets.conf +$IncludeConfig ADDITIONAL_SOCKETS # # Include config files, that the admin provided? : # -$IncludeConfig /etc/rsyslog.d/*.conf +$IncludeConfig ETC_RSYSLOG_D_GLOB ### diff --git a/rsyslog.spec b/rsyslog.spec index 51dc641..934139a 100644 --- a/rsyslog.spec +++ b/rsyslog.spec @@ -58,7 +58,7 @@ BuildRequires: libnet %if 0%{?with_systemd} # The systemd package provides # /usr/share/doc/packages/systemd/sd-daemon.[ch] -# files instead of a lib ... +# files instead of a lib ... See also bug 656259. BuildRequires: systemd %endif BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -214,6 +214,7 @@ This module provides a UDP forwarder that allows changing the sender address. %prep %setup -q -n %{name}-%{upstream_version} %if 0%{?with_systemd} +# Bug: https://bugzilla.novell.com/show_bug.cgi?id=656259 # install the files systemd provides rather than what we provide. cp -a /usr/share/doc/packages/systemd/sd-daemon.[ch] runtime/ %endif @@ -326,6 +327,7 @@ install -m644 plugins/ompgsql/createDB.sql \ %{buildroot}%{rsyslogdocdir}/pgsql-createDB.sql # %if 0%{?with_systemd} +# TODO: https://features.opensuse.org/311316 rm -v %{buildroot}/lib/systemd/system/rsyslog.service %endif From 15ed19ad3bda33ff8a0a39c09580988d121287b98ab5f2f4daa02ed7e9b6658d Mon Sep 17 00:00:00 2001 From: Marius Tomaschewski Date: Fri, 29 Apr 2011 12:05:20 +0000 Subject: [PATCH 6/6] Accepting request 68824 from home:darix:branches:Base:System - move most of the additional requirements and subpackages into conditionals so we can switch them on and off by more easily. OBS-URL: https://build.opensuse.org/request/show/68824 OBS-URL: https://build.opensuse.org/package/show/Base:System/rsyslog?expand=0&rev=50 --- rsyslog.changes | 6 +++ rsyslog.spec | 133 ++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 113 insertions(+), 26 deletions(-) diff --git a/rsyslog.changes b/rsyslog.changes index 8db9ba3..52a9665 100644 --- a/rsyslog.changes +++ b/rsyslog.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Wed Apr 27 16:19:31 UTC 2011 - mrueckert@suse.de + +- move most of the additional requirements and subpackages into + conditionals so we can switch them on and off by more easily. + ------------------------------------------------------------------- Tue Apr 26 12:30:17 UTC 2011 - mt@suse.de diff --git a/rsyslog.spec b/rsyslog.spec index 934139a..357816f 100644 --- a/rsyslog.spec +++ b/rsyslog.spec @@ -22,10 +22,29 @@ Name: rsyslog Summary: The enhanced syslogd for Linux and Unix Version: 5.8.0 Release: 2 +# for setting those bcond_with* configs see +# http://lizards.opensuse.org/2008/09/12/conditional-features-aka-use-flags/ +%if 0%{?suse_version} >= 1140 +%bcond_without dbi +%else +%bcond_with dbi +%endif +%if 0%{?suse_version} >= 1140 +%bcond_without systemd +%else +%bcond_with systemd +%endif +%if 0%{?suse_version} >= 1130 +%bcond_without relp +%else +%bcond_with relp +%endif +%bcond_without gssapi +%bcond_without gnutls +%bcond_without mysql +%bcond_without pgsql +%bcond_without snmp %define upstream_version 5.8.0 -%define with_dbi 0%{?suse_version} >= 1140 || 0%{?build_with_dbi:1} -%define with_systemd 0%{?suse_version} >= 1140 || 0%{?build_with_systemd:1} -%define with_relp 0%{?suse_version} >= 1130 || 0%{?build_with_relp:1} %define _sbindir /sbin %define rsyslogdocdir %{_docdir}/%{name} %define additional_sockets %{_localstatedir}/run/rsyslog/additional-log-sockets.conf @@ -39,13 +58,31 @@ AutoReqProv: on Provides: syslog PreReq: %insserv_prereq %fillup_prereq /sbin/klogd /etc/init.d/syslog /sbin/checkproc BuildRequires: klogd -BuildRequires: dos2unix openssl-devel pcre-devel pkgconfig zlib-devel -BuildRequires: krb5-devel mysql-devel net-snmp-devel postgresql-devel +BuildRequires: dos2unix +BuildRequires: openssl-devel +BuildRequires: pcre-devel +BuildRequires: pkgconfig +BuildRequires: zlib-devel +# +%if %{with gssapi} +BuildRequires: krb5-devel +%endif +%if %{with mysql} +BuildRequires: mysql-devel +%endif +%if %{with snmp} +BuildRequires: net-snmp-devel +%endif +%if %{with pgsql} +BuildRequires: postgresql-devel +%endif +%if %{with gnutls} BuildRequires: libgnutls-devel -%if 0%{?with_dbi} +%endif +%if %{with dbi} BuildRequires: libdbi-devel %endif -%if 0%{?with_relp} +%if %{with relp} # RELP support BuildRequires: librelp-devel %endif @@ -55,7 +92,7 @@ BuildRequires: libnet-devel %else BuildRequires: libnet %endif -%if 0%{?with_systemd} +%if %{with systemd} # The systemd package provides # /usr/share/doc/packages/systemd/sd-daemon.[ch] # files instead of a lib ... See also bug 656259. @@ -103,6 +140,7 @@ package. This package provides additional diagnostic tools (small helpers, usually not needed). +%if %{with gssapi} %package module-gssapi License: GPLv3+ Group: System/Daemons @@ -115,7 +153,9 @@ package. This module provides the support to receive syslog messages from the network protected via Kerberos 5 encryption and authentication. +%endif +%if %{with mysql} %package module-mysql License: GPLv3+ Group: System/Daemons @@ -128,7 +168,9 @@ package. This package provides a module with the support for logging into MySQL databases. +%endif +%if %{with pgsql} %package module-pgsql License: GPLv3+ Group: System/Daemons @@ -140,9 +182,9 @@ Rsyslog is an enhanced multi-threaded syslog daemon. See rsyslog package. This module provides the support for logging into PostgreSQL databases. +%endif -%if 0%{?with_dbi} - +%if %{with dbi} %package module-dbi License: GPLv3+ Group: System/Daemons @@ -157,6 +199,7 @@ This package provides a module with the support for logging into DBI supported databases. %endif +%if %{with snmp} %package module-snmp License: GPLv3+ Group: System/Daemons @@ -169,7 +212,9 @@ package. This module provides the ability to send syslog messages as an SNMPv1 & v2c traps. +%endif +%if %{with gnutls} %package module-gtls License: GPLv3+ Group: System/Daemons @@ -182,9 +227,9 @@ package. This module provides the ability for TLS encrypted TCP logging (based on current syslog-transport-tls internet drafts). +%endif -%if 0%{?with_relp} - +%if %{with relp} %package module-relp License: GPLv3+ Group: System/Daemons @@ -213,7 +258,7 @@ This module provides a UDP forwarder that allows changing the sender address. %prep %setup -q -n %{name}-%{upstream_version} -%if 0%{?with_systemd} +%if %{with systemd} # Bug: https://bugzilla.novell.com/show_bug.cgi?id=656259 # install the files systemd provides rather than what we provide. cp -a /usr/share/doc/packages/systemd/sd-daemon.[ch] runtime/ @@ -238,18 +283,28 @@ export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing -W -Wall" --enable-zlib \ --enable-klog \ --enable-inet \ +%if %{with gnutls} --enable-gnutls \ +%endif --enable-rsyslogd \ +%if %{with gssapi} --enable-gssapi-krb5 \ +%endif +%if %{with mysql} --enable-mysql \ +%endif +%if %{with pgsql} --enable-pgsql \ -%if 0%{?with_dbi} +%endif +%if %{with dbi} --enable-libdbi \ %endif -%if 0%{?with_relp} +%if %{with relp} --enable-relp \ %endif +%if %{with snmp} --enable-snmp \ +%endif --enable-mail \ --enable-imfile \ --enable-imptcp \ @@ -273,13 +328,27 @@ rm -f %{buildroot}%{rsyslog_module_dir_nodeps}/*.la # move all modules linking libraries in /usr to /usr/lib[64] # the user has to specify them with full path then... install -d -m0755 %{buildroot}%{rsyslog_module_dir_withdeps} -for mod in omgssapi.so imgssapi.so lmgssutil.so ommysql.so \ - ompgsql.so omsnmp.so lmnsd_gtls.so \ -%if 0%{?with_dbi} - omlibdbi.so \ +for mod in \ +%if %{with gssapi} + omgssapi.so imgssapi.so lmgssutil.so \ %endif -%if 0%{?with_relp} - imrelp.so omrelp.so \ +%if %{with mysql} + ommysql.so \ +%endif +%if %{with pgsql} + ompgsql.so \ +%endif +%if %{with snmp} + omsnmp.so \ +%endif +%if %{with dbi} + omlibdbi.so \ +%endif +%if %{with relp} + imrelp.so omrelp.so \ +%endif +%if %{with gnutls} + lmnsd_gtls.so \ %endif ; do mv -f %{buildroot}%{rsyslog_module_dir_nodeps}/$mod \ @@ -321,12 +390,16 @@ install -d -m0755 %{buildroot}%{rsyslogdocdir}/ find ChangeLog README AUTHORS COPYING COPYING.LESSER rsyslog.conf doc \ \( -type d -exec install -m755 -d %{buildroot}%{rsyslogdocdir}/\{\} \; \) \ -o \( -type f -exec install -m644 \{\} %{buildroot}%{rsyslogdocdir}/\{\} \; \) +%if %{with mysql} install -m644 plugins/ommysql/createDB.sql \ %{buildroot}%{rsyslogdocdir}/mysql-createDB.sql +%endif +%if %{with pgsql} install -m644 plugins/ompgsql/createDB.sql \ %{buildroot}%{rsyslogdocdir}/pgsql-createDB.sql +%endif # -%if 0%{?with_systemd} +%if %{with systemd} # TODO: https://features.opensuse.org/311316 rm -v %{buildroot}/lib/systemd/system/rsyslog.service %endif @@ -486,39 +559,47 @@ fi %{_sbindir}/rsyslog_diag_hostname %{_sbindir}/zpipe +%if %{with gssapi} %files module-gssapi %defattr(-,root,root) %{rsyslog_module_dir_withdeps}/omgssapi.so %{rsyslog_module_dir_withdeps}/imgssapi.so %{rsyslog_module_dir_withdeps}/lmgssutil.so +%endif +%if %{with mysql} %files module-mysql %defattr(-,root,root) %doc %{rsyslogdocdir}/mysql-createDB.sql %{rsyslog_module_dir_withdeps}/ommysql.so +%endif +%if %{with pgsql} %files module-pgsql %defattr(-,root,root) %doc %{rsyslogdocdir}/pgsql-createDB.sql %{rsyslog_module_dir_withdeps}/ompgsql.so +%endif -%if 0%{?with_dbi} - +%if %{with dbi} %files module-dbi %defattr(-,root,root) %{rsyslog_module_dir_withdeps}/omlibdbi.so %endif +%if %{with snmp} %files module-snmp %defattr(-,root,root) %{rsyslog_module_dir_withdeps}/omsnmp.so +%endif +%if %{with gnutls} %files module-gtls %defattr(-,root,root) %{rsyslog_module_dir_withdeps}/lmnsd_gtls.so +%endif -%if 0%{?with_relp} - +%if %{with relp} %files module-relp %defattr(-,root,root) %{rsyslog_module_dir_withdeps}/imrelp.so