diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2011-07-06 12:26:52 +0200 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2011-07-06 12:26:52 +0200 |
commit | 30f2b5b094d282af6f601aa4e8fa88c1baf187f4 (patch) | |
tree | 64fe580b7ad3beb9523e006d9d3e439ca046b024 /runtime/rsconf.c | |
parent | 4fcfea31e3c46d27c5a54a8d1d9925e59550f82c (diff) | |
download | rsyslog-30f2b5b094d282af6f601aa4e8fa88c1baf187f4.tar.gz rsyslog-30f2b5b094d282af6f601aa4e8fa88c1baf187f4.tar.bz2 rsyslog-30f2b5b094d282af6f601aa4e8fa88c1baf187f4.zip |
milestone:/[PARTWORK]: config is processed using new parser, except...
... for "if" filters (more work to come, probably lots of more work... ;))
Diffstat (limited to 'runtime/rsconf.c')
-rw-r--r-- | runtime/rsconf.c | 70 |
1 files changed, 55 insertions, 15 deletions
diff --git a/runtime/rsconf.c b/runtime/rsconf.c index 446a9c8b..17332464 100644 --- a/runtime/rsconf.c +++ b/runtime/rsconf.c @@ -39,6 +39,7 @@ #include "rsyslog.h" #include "obj.h" #include "srUtils.h" +#include "rule.h" #include "ruleset.h" #include "modules.h" #include "conf.h" @@ -69,6 +70,7 @@ /* static data */ DEFobjStaticHelpers +DEFobjCurrIf(rule) DEFobjCurrIf(ruleset) DEFobjCurrIf(module) DEFobjCurrIf(conf) @@ -216,10 +218,12 @@ ENDobjDebugPrint(rsconf) rsRetVal -cnfDoActlst(struct cnfactlst *actlst) +cnfDoActlst(struct cnfactlst *actlst, rule_t *pRule) { struct cnfcfsyslinelst *cflst; + action_t *pAction; rsRetVal localRet; + uchar *str; DEFiRet; while(actlst != NULL) { @@ -227,8 +231,10 @@ cnfDoActlst(struct cnfactlst *actlst) if(actlst->actType == CNFACT_V2) { dbgprintf("V2 action type not yet handled\n"); } else { - dbgprintf("legacy action line not yet handled:%s\n", - actlst->data.legActLine); + dbgprintf("legacy action line:%s\n", actlst->data.legActLine); + str = (uchar*) actlst->data.legActLine; + iRet = cflineDoAction(loadConf, &str, &pAction); + iRet = llAppend(&(pRule)->llActList, NULL, (void*) pAction); } for( cflst = actlst->syslines ; cflst != NULL ; cflst = cflst->next) { @@ -268,44 +274,77 @@ void cnfDoObj(struct cnfobj *o) cnfobjDestruct(o); } -void cnfDoRule(struct cnfrule *rule) +void cnfDoRule(struct cnfrule *cnfrule) { + rule_t *pRule; + uchar *str; + DEFiRet; + dbgprintf("cnf:global:rule\n"); - cnfrulePrint(rule); + cnfrulePrint(cnfrule); - switch(rule->filttype) { + CHKiRet(rule.Construct(&pRule)); /* create "fresh" selector */ + CHKiRet(rule.SetAssRuleset(pRule, ruleset.GetCurrent(loadConf))); /* create "fresh" selector */ + CHKiRet(rule.ConstructFinalize(pRule)); /* create "fresh" selector */ + + switch(cnfrule->filttype) { case CNFFILT_NONE: break; case CNFFILT_PRI: + str = (uchar*) cnfrule->filt.s; + iRet = cflineProcessTradPRIFilter(&str, pRule); + break; case CNFFILT_PROP: - dbgprintf("%s\n", rule->filt.s); + dbgprintf("%s\n", cnfrule->filt.s); + str = (uchar*) cnfrule->filt.s; + iRet = cflineProcessPropFilter(&str, pRule); break; case CNFFILT_SCRIPT: - dbgprintf("\n"); - cnfexprPrint(rule->filt.expr, 0); + dbgprintf("TODO: script filter implementation missing\n"); + cnfexprPrint(cnfrule->filt.expr, 0); break; } - cnfDoActlst(rule->actlst); + /* we now check if there are some global (BSD-style) filter conditions + * and, if so, we copy them over. rgerhards, 2005-10-18 + */ +#if 0 // TODO: add LATER! + if(pDfltProgNameCmp != NULL) { + CHKiRet(rsCStrConstructFromCStr(&(f->pCSProgNameComp), pDfltProgNameCmp)); + } + + if(eDfltHostnameCmpMode != HN_NO_COMP) { + f->eHostnameCmpMode = eDfltHostnameCmpMode; + CHKiRet(rsCStrConstructFromCStr(&(f->pCSHostnameComp), pDfltHostnameCmp)); + } +#endif + + cnfDoActlst(cnfrule->actlst, pRule); + + CHKiRet(ruleset.AddRule(loadConf, rule.GetAssRuleset(pRule), &pRule)); + +finalize_it: + //TODO: do something with error states + ; } void cnfDoCfsysline(char *ln) { dbgprintf("cnf:global:cfsysline: %s\n", ln); /* the legacy system needs the "$" stripped */ - conf.cfsysline(loadConf, (uchar*) ln+1); + conf.cfsysline((uchar*) ln+1); dbgprintf("cnf:cfsysline call done\n"); } void cnfDoBSDTag(char *ln) { dbgprintf("cnf:global:BSD tag: %s\n", ln); - cflineProcessTagSelector(conf, &line); + cflineProcessTagSelector((uchar**)&ln); } void cnfDoBSDHost(char *ln) { dbgprintf("cnf:global:BSD host: %s\n", ln); - cflineProcessHostSelector(conf, &line); + cflineProcessHostSelector((uchar**)&ln); } /*------------------------------ end interface to flex/bison parser ------------------------------*/ @@ -1108,8 +1147,7 @@ ourConf = loadConf; // TODO: remove, once ourConf is gone! dbgprintf("ZZZZZ: cnfSetLexFile returns %d, calling yyparse()\n", r); r = yyparse(); dbgprintf("ZZZZZ: yyparse returns %d\n", r); - exit(1); - localRet = conf.processConfFile(loadConf, confFile); + //localRet = conf.processConfFile(loadConf, confFile); CHKiRet(conf.GetNbrActActions(loadConf, &iNbrActions)); if(localRet != RS_RET_OK && localRet != RS_RET_NONFATAL_CONFIG_ERR) { @@ -1208,6 +1246,7 @@ ENDobjQueryInterface(rsconf) BEGINObjClassInit(rsconf, 1, OBJ_IS_CORE_MODULE) /* class, version */ /* request objects we use */ CHKiRet(objUse(ruleset, CORE_COMPONENT)); + CHKiRet(objUse(rule, CORE_COMPONENT)); CHKiRet(objUse(module, CORE_COMPONENT)); CHKiRet(objUse(conf, CORE_COMPONENT)); CHKiRet(objUse(errmsg, CORE_COMPONENT)); @@ -1223,6 +1262,7 @@ ENDObjClassInit(rsconf) /* De-initialize the rsconf class. */ BEGINObjClassExit(rsconf, OBJ_IS_CORE_MODULE) /* class, version */ + objRelease(rule, CORE_COMPONENT); objRelease(ruleset, CORE_COMPONENT); objRelease(module, CORE_COMPONENT); objRelease(conf, CORE_COMPONENT); |