summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2012-10-02 17:25:32 +0200
committerRainer Gerhards <rgerhards@adiscon.com>2012-10-02 17:25:32 +0200
commit72930188588e54474298d464b943868f60300d7c (patch)
treeff7de847cb9b0e067663da25ee25a345580b676e
parent7a5cfb14adc096ddaa030b9a082ac6d248ba427a (diff)
downloadrsyslog-72930188588e54474298d464b943868f60300d7c.tar.gz
rsyslog-72930188588e54474298d464b943868f60300d7c.tar.xz
rsyslog-72930188588e54474298d464b943868f60300d7c.zip
add "parser" parameter to ruleset(), so that parser chain can be configured
-rw-r--r--ChangeLog2
-rw-r--r--runtime/parser.c8
-rw-r--r--runtime/parser.h1
-rw-r--r--runtime/ruleset.c32
4 files changed, 35 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index a04e9ae3..5b5480b1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,8 @@
---------------------------------------------------------------------------
Version 7.1.8 [devel] 2012-10-??
- improved module doc
+- added "parser" parameter to ruleset(), so that parser chain can be
+ configured
- implemented "continue" RainerScript statement
- bugfix: ruleset(){} directive errornously changed default ruleset
much like the $ruleset legacy conf statement. This potentially lead
diff --git a/runtime/parser.c b/runtime/parser.c
index 645ea0f4..b40edf4c 100644
--- a/runtime/parser.c
+++ b/runtime/parser.c
@@ -143,6 +143,14 @@ finalize_it:
RETiRet;
}
+void
+printParserList(parserList_t *pList)
+{
+ while(pList != NULL) {
+ dbgprintf("parser: %s\n", pList->pParser->pName);
+ pList = pList->pNext;
+ }
+}
/* find a parser based on the provided name */
static rsRetVal
diff --git a/runtime/parser.h b/runtime/parser.h
index f214ba0c..87a6269e 100644
--- a/runtime/parser.h
+++ b/runtime/parser.h
@@ -62,6 +62,7 @@ BEGINinterface(parser) /* name must also be changed in ENDinterface macro! */
ENDinterface(parser)
#define parserCURR_IF_VERSION 1 /* increment whenever you change the interface above! */
+void printParserList(parserList_t *pList);
/* prototypes */
PROTOTYPEObj(parser);
diff --git a/runtime/ruleset.c b/runtime/ruleset.c
index 8a93b022..bdeb61b7 100644
--- a/runtime/ruleset.c
+++ b/runtime/ruleset.c
@@ -57,7 +57,8 @@ DEFobjCurrIf(parser)
/* tables for interfacing with the v6 config system (as far as we need to) */
static struct cnfparamdescr rspdescr[] = {
- { "name", eCmdHdlrString, CNFPARAM_REQUIRED }
+ { "name", eCmdHdlrString, CNFPARAM_REQUIRED },
+ { "parser", eCmdHdlrArray, 0 }
};
static struct cnfparamblk rspblk =
{ CNFPARAMBLK_VERSION,
@@ -758,6 +759,8 @@ BEGINobjDebugPrint(ruleset) /* be sure to specify the object type also in END an
CODESTARTobjDebugPrint(ruleset)
dbgoprint((obj_t*) pThis, "rsyslog ruleset %s:\n", pThis->pszName);
cnfstmtPrint(pThis->root, 0);
+ dbgoprint((obj_t*) pThis, "ruleset %s assigned parser list:\n", pThis->pszName);
+ printParserList(pThis->pParserLst);
ENDobjDebugPrint(ruleset)
@@ -865,13 +868,11 @@ rulesetCreateQueue(void __attribute__((unused)) *pVal, int *pNewVal)
* rgerhards, 2009-11-04
*/
static rsRetVal
-doRulesetAddParser(rsconf_t *conf, uchar *pName)
+doRulesetAddParser(ruleset_t *pRuleset, uchar *pName)
{
parser_t *pParser;
DEFiRet;
- assert(conf->rulesets.pCurr != NULL);
-
CHKiRet(objUse(parser, CORE_COMPONENT));
iRet = parser.FindParser(&pParser, pName);
if(iRet == RS_RET_PARSER_NOT_FOUND) {
@@ -883,9 +884,9 @@ doRulesetAddParser(rsconf_t *conf, uchar *pName)
FINALIZE;
}
- CHKiRet(parser.AddParserToList(&conf->rulesets.pCurr->pParserLst, pParser));
+ CHKiRet(parser.AddParserToList(&pRuleset->pParserLst, pParser));
- DBGPRINTF("added parser '%s' to ruleset '%s'\n", pName, conf->rulesets.pCurr->pszName);
+ DBGPRINTF("added parser '%s' to ruleset '%s'\n", pName, pRuleset->pszName);
finalize_it:
d_free(pName); /* no longer needed */
@@ -896,7 +897,7 @@ finalize_it:
static rsRetVal
rulesetAddParser(void __attribute__((unused)) *pVal, uchar *pName)
{
- return doRulesetAddParser(ourConf, pName);
+ return doRulesetAddParser(ourConf->rulesets.pCurr, pName);
}
@@ -907,8 +908,11 @@ rulesetProcessCnf(struct cnfobj *o)
struct cnfparamvals *pvals;
rsRetVal localRet;
uchar *rsName = NULL;
- int nameIdx;
+ uchar *parserName;
+ int nameIdx, parserIdx;
ruleset_t *pRuleset;
+ struct cnfarray *ar;
+ int i;
DEFiRet;
pvals = nvlstGetParams(o->nvlst, &rspblk, NULL);
@@ -934,6 +938,18 @@ rulesetProcessCnf(struct cnfobj *o)
CHKiRet(rulesetConstructFinalize(loadConf, pRuleset));
addScript(pRuleset, o->script);
+ /* we have only two params, so we do NOT do the usual param loop */
+ parserIdx = cnfparamGetIdx(&rspblk, "parser");
+ if(parserIdx == -1 || !pvals[parserIdx].bUsed)
+ FINALIZE;
+
+ ar = pvals[parserIdx].val.d.ar;
+ for(i = 0 ; i < ar->nmemb ; ++i) {
+ parserName = (uchar*)es_str2cstr(ar->arr[i], NULL);
+ doRulesetAddParser(pRuleset, parserName);
+ free(parserName);
+ }
+
finalize_it:
free(rsName);
cnfparamvalsDestruct(pvals, &rspblk);