mirror of
https://github.com/rsyslog/rsyslog.git
synced 2025-12-15 10:30:40 +01:00
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:
parent
d8ba1a0d9f
commit
23dac82b68
@ -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
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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 \
|
||||
|
||||
@ -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.
|
||||
|
||||
3
tests/testsuites/invalid.conf
Normal file
3
tests/testsuites/invalid.conf
Normal file
@ -0,0 +1,3 @@
|
||||
# This is an invalid config file that shall trigger an exit code
|
||||
# with the config verification run
|
||||
$invalid
|
||||
3
tests/testsuites/valid.conf
Normal file
3
tests/testsuites/valid.conf
Normal 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
38
tests/validation-run.sh
Executable 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
|
||||
@ -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) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user