summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog15
-rw-r--r--configure.ac2
-rw-r--r--plugins/imudp/imudp.c2
-rw-r--r--runtime/conf.c6
-rw-r--r--tests/Makefile.am8
-rw-r--r--tests/testsuites/invalid.conf3
-rw-r--r--tests/testsuites/valid.conf3
-rwxr-xr-xtests/validation-run.sh38
-rw-r--r--tools/syslogd.c12
9 files changed, 84 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index d8fae145..dea7fee4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -199,9 +199,24 @@ version before switching to this one.
- bugfix: memory leak in ompgsql
Thanks to Ken for providing the patch
---------------------------------------------------------------------------
+Version 3.22.x [v3-stable] (rgerhards), 2009-04-??
+- bugfix: internal messages were emitted to whatever file had fd2 when
+ rsyslogd ran in forked mode (as usual!)
+ Thanks to varmojfekoj for the patch
+- small enhancement: config validation run now exits with code 1 if an
+ error is detected. This change is considered important but small enough
+ to apply it directly to the stable version. [But it is a border case,
+ the change requires more code than I had hoped. Thus I have NOT tried
+ to actually catch all cases, this is left for the current devel
+ releases, if necessary]
+---------------------------------------------------------------------------
Version 3.22.1 [v3-stable] (rgerhards), 2009-04-??
- bugfix: light and full delay watermarks had invalid values, badly
affecting performance for delayable inputs
+- bugfix: potential segfault issue when multiple $UDPServerRun directives
+ are specified. Thanks to Michael Biebl for helping to debug this one.
+- relaxed GnuTLS version requirement to 1.4.0 after confirmation from the
+ field that this version is sufficient
---------------------------------------------------------------------------
Version 3.22.0 [v3-stable] (rgerhards), 2009-04-21
This is the first stable release that includes the full functionality
diff --git a/configure.ac b/configure.ac
index 66f1cab1..7150d211 100644
--- a/configure.ac
+++ b/configure.ac
@@ -573,7 +573,7 @@ AC_ARG_ENABLE(gnutls,
[enable_gnutls=no]
)
if test "x$enable_gnutls" = "xyes"; then
- PKG_CHECK_MODULES(GNUTLS, gnutls >= 2.0.0)
+ PKG_CHECK_MODULES(GNUTLS, gnutls >= 1.4.0)
fi
AM_CONDITIONAL(ENABLE_GNUTLS, test x$enable_gnutls = xyes)
AC_SUBST(GNUTLS_CFLAGS)
diff --git a/plugins/imudp/imudp.c b/plugins/imudp/imudp.c
index f3448095..a486b818 100644
--- a/plugins/imudp/imudp.c
+++ b/plugins/imudp/imudp.c
@@ -108,7 +108,7 @@ static rsRetVal addListner(void __attribute__((unused)) *pVal, uchar *pNewVal)
udpLstnSocks = newSocks;
} else {
/* we need to add them */
- if((tmpSocks = malloc(sizeof(int) * 1 + newSocks[0] + udpLstnSocks[0])) == NULL) {
+ if((tmpSocks = malloc(sizeof(int) * (1 + newSocks[0] + udpLstnSocks[0]))) == NULL) {
dbgprintf("out of memory trying to allocate udp listen socket array\n");
/* in this case, we discard the new sockets but continue with what we
* already have
diff --git a/runtime/conf.c b/runtime/conf.c
index 27ab8bb4..602a5eb1 100644
--- a/runtime/conf.c
+++ b/runtime/conf.c
@@ -400,6 +400,7 @@ processConfFile(uchar *pConfFile)
uchar cbuf[CFGLNSIZ];
uchar *cline;
int i;
+ int bHadAnError = 0;
ASSERT(pConfFile != NULL);
if((cf = fopen((char*)pConfFile, "r")) == NULL) {
@@ -461,6 +462,7 @@ processConfFile(uchar *pConfFile)
snprintf((char*)szErrLoc, sizeof(szErrLoc) / sizeof(uchar),
"%s, line %d", pConfFile, iLnNbr);
errmsg.LogError(0, NO_ERRCODE, "the last error occured in %s", (char*)szErrLoc);
+ bHadAnError = 1;
}
}
@@ -480,6 +482,10 @@ finalize_it:
dbgprintf("error %d processing config file '%s'; os error (if any): %s\n",
iRet, pConfFile, errStr);
}
+
+ if(bHadAnError && (iRet == RS_RET_OK)) { /* a bit dirty, enhance in future releases */
+ iRet = RS_RET_ERR;
+ }
RETiRet;
}
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 7a7b8147..e93aba10 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,9 +1,11 @@
TESTRUNS = rt_init rscript
check_PROGRAMS = $(TESTRUNS) ourtail nettester tcpflood chkseq
-TESTS = $(TESTRUNS) cfg.sh manytcp.sh diskqueue.sh imtcp-multiport.sh queue-persist.sh
+TESTS = $(TESTRUNS) cfg.sh manytcp.sh diskqueue.sh imtcp-multiport.sh queue-persist.sh \
+ validation-run.sh
if ENABLE_OMSTDOUT
TESTS += omod-if-array.sh parsertest.sh inputname.sh fieldtest.sh
endif
+
TESTS_ENVIRONMENT = RSYSLOG_MODDIR='$(abs_top_builddir)'/runtime/.libs/
DISTCLEANFILES=rsyslog.pid '$(abs_top_builddir)'/DiagTalker.class
test_files = testbench.h runtime-dummy.c
@@ -11,6 +13,10 @@ test_files = testbench.h runtime-dummy.c
check_JAVA = DiagTalker.java
EXTRA_DIST= 1.rstest 2.rstest 3.rstest err1.rstest \
+ validation-run.sh \
+ testsuites/invalid.conf \
+ testsuites/valid.conf \
+ cfg.sh \
cfg1.cfgtest \
cfg1.testin \
cfg2.cfgtest \
diff --git a/tests/testsuites/invalid.conf b/tests/testsuites/invalid.conf
new file mode 100644
index 00000000..8a865ba5
--- /dev/null
+++ b/tests/testsuites/invalid.conf
@@ -0,0 +1,3 @@
+# This is an invalid config file that shall trigger an exit code
+# with the config verification run
+$invalid
diff --git a/tests/testsuites/valid.conf b/tests/testsuites/valid.conf
new file mode 100644
index 00000000..250f0546
--- /dev/null
+++ b/tests/testsuites/valid.conf
@@ -0,0 +1,3 @@
+# This is an invalid config file that shall trigger an exit code
+# with the config verification run
+*.* /tmp/data.log
diff --git a/tests/validation-run.sh b/tests/validation-run.sh
new file mode 100755
index 00000000..10981290
--- /dev/null
+++ b/tests/validation-run.sh
@@ -0,0 +1,38 @@
+# check if the configuration test run detects invalid config files.
+#
+# Part of the testbench for rsyslog.
+#
+# Copyright 2009 Rainer Gerhards and Adiscon GmbH.
+#
+# This file is part of rsyslog.
+#
+# Rsyslog is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Rsyslog is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Rsyslog. If not, see <http://www.gnu.org/licenses/>.
+#
+# A copy of the GPL can be found in the file "COPYING" in this distribution.
+#set -x
+echo "testing a failed configuration verification run"
+../tools/rsyslogd -u2 -c3 -N1 -f$srcdir/testsuites/invalid.conf
+if [ $? -ne 1 ]; then
+ exit 1
+fi
+echo testing a valid config verification run
+../tools/rsyslogd -u2 -c3 -N1 -f$srcdir/testsuites/valid.conf
+if [ $? -ne 0 ]; then
+ exit 1
+fi
+echo testing empty config file
+../tools/rsyslogd -u2 -c3 -N1 -f/dev/null
+if [ $? -ne 1 ]; then
+ exit 1
+fi
diff --git a/tools/syslogd.c b/tools/syslogd.c
index 0b860448..69c24ae6 100644
--- a/tools/syslogd.c
+++ b/tools/syslogd.c
@@ -976,7 +976,7 @@ logmsgInternal(int iErr, int pri, uchar *msg, int flags)
* permits us to process unmodified config files which otherwise contain a
* supressor statement.
*/
- if(bErrMsgToStderr || iConfigVerify) {
+ if(((Debug || NoFork) && bErrMsgToStderr) || iConfigVerify) {
fprintf(stderr, "rsyslogd: %s\n", msg);
}
@@ -2550,6 +2550,7 @@ init(void)
DEFiRet;
rsRetVal localRet;
int iNbrActions;
+ int bHadConfigErr = 0;
char cbuf[BUFSIZ];
char bufStartUpMsg[512];
struct sigaction sigAct;
@@ -2600,9 +2601,11 @@ init(void)
if(localRet != RS_RET_OK) {
errmsg.LogError(0, localRet, "CONFIG ERROR: could not interpret master config file '%s'.", ConfFile);
+ bHadConfigErr = 1;
} else if(iNbrActions == 0) {
errmsg.LogError(0, RS_RET_NO_ACTIONS, "CONFIG ERROR: there are no active actions configured. Inputs will "
"run, but no output whatsoever is created.");
+ bHadConfigErr = 1;
}
if(localRet != RS_RET_OK || iNbrActions == 0) {
@@ -2672,8 +2675,13 @@ init(void)
/* we are done checking the config - now validate if we should actually run or not.
* If not, terminate. -- rgerhards, 2008-07-25
*/
- if(iConfigVerify)
+ if(iConfigVerify) {
+ if(bHadConfigErr) {
+ /* a bit dirty, but useful... */
+ exit(1);
+ }
ABORT_FINALIZE(RS_RET_VALIDATION_RUN);
+ }
/* switch the message object to threaded operation, if necessary */
if(MainMsgQueType == QUEUETYPE_DIRECT || iMainMsgQueueNumWorkers > 1) {