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]
This commit is contained in:
Rainer Gerhards 2009-05-28 17:59:11 +02:00
parent d8ba1a0d9f
commit 23dac82b68
9 changed files with 70 additions and 4 deletions

View File

@ -1,6 +1,12 @@
- 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

View File

@ -395,6 +395,7 @@ processConfFile(uchar *pConfFile)
uchar cbuf[CFGLNSIZ];
uchar *cline;
int i;
int bHadAnError = 0;
ASSERT(pConfFile != NULL);
if((cf = fopen((char*)pConfFile, "r")) == NULL) {
@ -456,6 +457,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;
}
}
@ -475,6 +477,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;
}

View File

@ -1,3 +1,2 @@
rsyslogd: CONFIG ERROR: there are no active actions configured. Inputs will run, but no output whatsoever is created. [try http://www.rsyslog.com/e/2103 ]
rsyslogd: EMERGENCY CONFIGURATION ACTIVATED - fix rsyslog config file!
rsyslogd: End of config validation run. Bye.

View File

@ -1,10 +1,14 @@
check_PROGRAMS = rt_init rscript
TESTS = $(check_PROGRAMS) cfg.sh
TESTS = $(check_PROGRAMS) cfg.sh \
validation-run.sh
TESTS_ENVIRONMENT = RSYSLOG_MODDIR='$(abs_top_builddir)'/runtime/.libs/
#TESTS = $(check_PROGRAMS)
test_files = testbench.h runtime-dummy.c
EXTRA_DIST=1.rstest 2.rstest err1.rstest \
validation-run.sh \
testsuites/invalid.conf \
testsuites/valid.conf \
cfg.sh \
cfg1.cfgtest \
cfg1.testin \

View File

@ -1,3 +1,2 @@
rsyslogd: CONFIG ERROR: could not interpret master config file '/This/does/not/exist'. [try http://www.rsyslog.com/e/2013 ]
rsyslogd: EMERGENCY CONFIGURATION ACTIVATED - fix rsyslog config file!
rsyslogd: End of config validation run. Bye.

View File

@ -0,0 +1,3 @@
# This is an invalid config file that shall trigger an exit code
# with the config verification run
$invalid

View File

@ -0,0 +1,3 @@
# This is an invalid config file that shall trigger an exit code
# with the config verification run
*.* /tmp/data.log

38
tests/validation-run.sh Executable file
View File

@ -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

View File

@ -2237,6 +2237,7 @@ init(void)
DEFiRet;
rsRetVal localRet;
int iNbrActions;
int bHadConfigErr = 0;
char cbuf[BUFSIZ];
char bufStartUpMsg[512];
struct sigaction sigAct;
@ -2287,9 +2288,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) {
@ -2355,8 +2358,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) {