summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog26
-rw-r--r--configure.ac2
-rw-r--r--doc/imfile.html2
-rw-r--r--plugins/imptcp/imptcp.c16
-rw-r--r--runtime/nsdpoll_ptcp.c1
-rw-r--r--runtime/nsdsel_gtls.c17
-rw-r--r--runtime/unlimited_select.h1
-rw-r--r--template.c12
-rw-r--r--tests/Makefile.am10
9 files changed, 78 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 0dea5306..b605aaaa 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,20 @@
---------------------------------------------------------------------------
+Version 5.6.1 [V5-STABLE] (rgerhards), 2010-11-24
+- bugfix(important): problem in TLS handling could cause rsyslog to loop
+ in a tight loop, effectively disabling functionality and bearing the
+ risk of unresponsiveness of the whole system.
+ Bug tracker: http://bugzilla.adiscon.com/show_bug.cgi?id=194
+- permitted imptcp to work on systems which support epoll(), but not
+ epoll_create().
+ Bug: http://bugzilla.adiscon.com/show_bug.cgi?id=204
+ Thanks to Nicholas Brink for reporting this problem.
+- bugfix: testbench failed if imptcp was not enabled
+- bugfix: segfault when an *empty* template was used
+ Bug: http://bugzilla.adiscon.com/show_bug.cgi?id=206
+ Thanks to David Hill for alerting us.
+- bugfix: compile failed with --enable-unlimited-select
+ thanks varmojfekoj for the patch
+---------------------------------------------------------------------------
Version 5.6.0 [V5-STABLE] (rgerhards), 2010-10-19
- private build
- added the $InputFilePersistStateInterval config directive to imfile
@@ -549,6 +565,10 @@ Version 4.7.0 [v4-devel] (rgerhards), 2010-04-14
- imported changes from 4.5.6 and below
---------------------------------------------------------------------------
Version 4.6.5 [v4-stable] (rgerhards), 2010-??-??
+- bugfix(important): problem in TLS handling could cause rsyslog to loop
+ in a tight loop, effectively disabling functionality and bearing the
+ risk of unresponsiveness of the whole system.
+ Bug tracker: http://bugzilla.adiscon.com/show_bug.cgi?id=194
- bugfix: a couple of problems that imfile had on some platforms, namely
Ubuntu (not their fault, but occured there)
- bugfix: imfile utilizes 32 bit to track offset. Most importantly,
@@ -1181,6 +1201,12 @@ version before switching to this one.
- bugfix: memory leak in ompgsql
Thanks to Ken for providing the patch
---------------------------------------------------------------------------
+Version 3.22.3 [v3-stable] (rgerhards), 2010-11-24
+- bugfix(important): problem in TLS handling could cause rsyslog to loop
+ in a tight loop, effectively disabling functionality and bearing the
+ risk of unresponsiveness of the whole system.
+ Bug tracker: http://bugzilla.adiscon.com/show_bug.cgi?id=194
+---------------------------------------------------------------------------
Version 3.22.2 [v3-stable] (rgerhards), 2010-08-05
- bugfix: comment char ('#') in literal terminated script parsing
and thus could not be used.
diff --git a/configure.ac b/configure.ac
index 410046f5..afc83fb0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.61)
-AC_INIT([rsyslog],[5.6.0a],[rsyslog@lists.adiscon.com])
+AC_INIT([rsyslog],[5.6.1],[rsyslog@lists.adiscon.com])
AM_INIT_AUTOMAKE
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/doc/imfile.html b/doc/imfile.html
index a7ac5a49..f6b140a7 100644
--- a/doc/imfile.html
+++ b/doc/imfile.html
@@ -87,7 +87,7 @@ be well enough. Please note that imfile keeps reading files as long as
there is any data in them. So a "polling sleep" will only happen when
nothing is left to be processed.</li>
<li><b>$InputFilePersistStateInterval</b> [lines]</b><br>
-Available in 4.7.3+<br>
+Available in 4.7.3+, 5.6.2+<br>
Specifies how often the state file shall be written when processing the input
file. The default value is 0, which means a new state file is only written when
the monitored files is being closed (end of rsyslogd execution). Any other
diff --git a/plugins/imptcp/imptcp.c b/plugins/imptcp/imptcp.c
index 9b24dbc2..51f33bab 100644
--- a/plugins/imptcp/imptcp.c
+++ b/plugins/imptcp/imptcp.c
@@ -30,6 +30,13 @@
* A copy of the GPL can be found in the file "COPYING" in this distribution.
*/
#include "config.h"
+#if !defined(HAVE_EPOLL_CREATE)
+# error imptcp requires OS support for epoll - can not build
+ /* imptcp gains speed by using modern Linux capabilities. As such,
+ * it can only be build on platforms supporting the epoll API.
+ */
+#endif
+
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
@@ -1039,7 +1046,14 @@ CODESTARTwillRun
ABORT_FINALIZE(RS_RET_NO_RUN);
}
- if((epollfd = epoll_create1(EPOLL_CLOEXEC)) < 0) {
+# if defined(EPOLL_CLOEXEC) && defined(HAVE_EPOLL_CREATE1)
+ DBGPRINTF("imptcp uses epoll_create1()\n");
+ epollfd = epoll_create1(EPOLL_CLOEXEC);
+# else
+ DBGPRINTF("imptcp uses epoll_create()\n");
+ epollfd = epoll_create(NUM_EPOLL_EVENTS);
+# endif
+ if(epollfd < 0) {
errmsg.LogError(0, RS_RET_EPOLL_CR_FAILED, "error: epoll_create() failed");
ABORT_FINALIZE(RS_RET_NO_RUN);
}
diff --git a/runtime/nsdpoll_ptcp.c b/runtime/nsdpoll_ptcp.c
index 51006707..bc374c60 100644
--- a/runtime/nsdpoll_ptcp.c
+++ b/runtime/nsdpoll_ptcp.c
@@ -42,7 +42,6 @@
#include "nspoll.h"
#include "nsd_ptcp.h"
#include "nsdpoll_ptcp.h"
-#include "unlimited_select.h"
/* static data */
DEFobjStaticHelpers
diff --git a/runtime/nsdsel_gtls.c b/runtime/nsdsel_gtls.c
index c3a93bee..1a389a00 100644
--- a/runtime/nsdsel_gtls.c
+++ b/runtime/nsdsel_gtls.c
@@ -76,6 +76,9 @@ Add(nsdsel_t *pNsdsel, nsd_t *pNsd, nsdsel_waitOp_t waitOp)
if(pNsdGTLS->iMode == 1) {
if(waitOp == NSDSEL_RD && gtlsHasRcvInBuffer(pNsdGTLS)) {
++pThis->iBufferRcvReady;
+ dbgprintf("nsdsel_gtls: data already present in buffer, initiating "
+ "dummy select %p->iBufferRcvReady=%d\n",
+ pThis, pThis->iBufferRcvReady);
FINALIZE;
}
if(pNsdGTLS->rtryCall != gtlsRtry_None) {
@@ -109,6 +112,7 @@ Select(nsdsel_t *pNsdsel, int *piNumReady)
if(pThis->iBufferRcvReady > 0) {
/* we still have data ready! */
*piNumReady = pThis->iBufferRcvReady;
+ dbgprintf("nsdsel_gtls: doing dummy select, data present\n");
} else {
iRet = nsdsel_ptcp.Select(pThis->pTcp, piNumReady);
}
@@ -190,6 +194,9 @@ IsReady(nsdsel_t *pNsdsel, nsd_t *pNsd, nsdsel_waitOp_t waitOp, int *pbIsReady)
if(pNsdGTLS->iMode == 1) {
if(waitOp == NSDSEL_RD && gtlsHasRcvInBuffer(pNsdGTLS)) {
*pbIsReady = 1;
+ --pThis->iBufferRcvReady; /* one "pseudo-read" less */
+ dbgprintf("nsdl_gtls: dummy read, decermenting %p->iBufRcvReady, now %d\n",
+ pThis, pThis->iBufferRcvReady);
FINALIZE;
}
if(pNsdGTLS->rtryCall != gtlsRtry_None) {
@@ -200,6 +207,16 @@ IsReady(nsdsel_t *pNsdsel, nsd_t *pNsd, nsdsel_waitOp_t waitOp, int *pbIsReady)
*pbIsReady = 0;
FINALIZE;
}
+ /* now we must ensure that we do not fall back to PTCP if we have
+ * done a "dummy" select. In that case, we know when the predicate
+ * is not matched here, we do not have data available for this
+ * socket. -- rgerhards, 2010-11-20
+ */
+ if(pThis->iBufferRcvReady) {
+ dbgprintf("nsd_gtls: dummy read, buffer not available for this FD\n");
+ *pbIsReady = 0;
+ FINALIZE;
+ }
}
CHKiRet(nsdsel_ptcp.IsReady(pThis->pTcp, pNsdGTLS->pTcp, waitOp, pbIsReady));
diff --git a/runtime/unlimited_select.h b/runtime/unlimited_select.h
index 32dadc03..3fa7eb06 100644
--- a/runtime/unlimited_select.h
+++ b/runtime/unlimited_select.h
@@ -23,6 +23,7 @@
*/
#ifndef UNLIMITED_SELECT_H_INCLUDED
+#define UNLIMITED_SELECT_H_INCLUDED
#include <string.h>
#include <stdlib.h>
diff --git a/template.c b/template.c
index c46d144e..06949e45 100644
--- a/template.c
+++ b/template.c
@@ -85,7 +85,7 @@ rsRetVal tplToString(struct template *pTpl, msg_t *pMsg, uchar **ppBuf, size_t *
{
DEFiRet;
struct templateEntry *pTpe;
- int iBuf;
+ size_t iBuf;
unsigned short bMustBeFreed;
uchar *pVal;
size_t iLenVal;
@@ -141,7 +141,15 @@ rsRetVal tplToString(struct template *pTpl, msg_t *pMsg, uchar **ppBuf, size_t *
pTpe = pTpe->pNext;
}
- (*ppBuf)[iBuf] = '\0'; /* space was reserved above (see copy) */
+ if(iBuf == *pLenBuf) {
+ /* in the weired case of an *empty* template, this can happen.
+ * it is debatable if we should really fix it here or simply
+ * forbid that case. However, performance toll is minimal, so
+ * I tend to permit it. -- 201011-05 rgerhards
+ */
+ CHKiRet(ExtendBuf(ppBuf, pLenBuf, iBuf + 1));
+ }
+ (*ppBuf)[iBuf] = '\0';
finalize_it:
RETiRet;
diff --git a/tests/Makefile.am b/tests/Makefile.am
index a0231503..3c00c24a 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -14,9 +14,6 @@ TESTS = $(TESTRUNS) cfg.sh \
manytcp.sh \
rsf_getenv.sh \
manyptcp.sh \
- imptcp_large.sh \
- imptcp_addtlframedelim.sh \
- imptcp_conndrop.sh \
imtcp_conndrop.sh \
imtcp_addtlframedelim.sh \
sndrcv.sh \
@@ -51,6 +48,13 @@ TESTS = $(TESTRUNS) cfg.sh \
dircreate_off.sh \
queue-persist.sh
+if ENABLE_IMPTCP
+TESTS += \
+ imptcp_large.sh \
+ imptcp_addtlframedelim.sh \
+ imptcp_conndrop.sh
+endif
+
if ENABLE_OMUDPSPOOF
TESTS += sndrcv_omudpspoof.sh \
sndrcv_omudpspoof_nonstdpt.sh