summaryrefslogtreecommitdiffstats
path: root/plugins/imrelp
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2011-09-08 15:05:04 +0200
committerRainer Gerhards <rgerhards@adiscon.com>2011-09-08 15:05:04 +0200
commitc55997638f8833daec34d7f51b9ff6694620f6f8 (patch)
treeb2beec42c5419aff2bb4f1662bedb33676da2eae /plugins/imrelp
parente5d0f176fce7a96dbea164d13b4b549ecb424434 (diff)
downloadrsyslog-c55997638f8833daec34d7f51b9ff6694620f6f8.tar.gz
rsyslog-c55997638f8833daec34d7f51b9ff6694620f6f8.tar.xz
rsyslog-c55997638f8833daec34d7f51b9ff6694620f6f8.zip
added $InputRELPServerBindRuleset directive to specify rulesets for RELP
Diffstat (limited to 'plugins/imrelp')
-rw-r--r--plugins/imrelp/imrelp.c62
1 files changed, 49 insertions, 13 deletions
diff --git a/plugins/imrelp/imrelp.c b/plugins/imrelp/imrelp.c
index 5465b2a9..05a7ce31 100644
--- a/plugins/imrelp/imrelp.c
+++ b/plugins/imrelp/imrelp.c
@@ -46,6 +46,7 @@
#include "msg.h"
#include "unicode-helper.h"
#include "prop.h"
+#include "ruleset.h"
MODULE_TYPE_INPUT
MODULE_TYPE_NOKEEP
@@ -56,14 +57,19 @@ DEF_IMOD_STATIC_DATA
DEFobjCurrIf(net)
DEFobjCurrIf(prop)
DEFobjCurrIf(errmsg)
+DEFobjCurrIf(ruleset)
/* forward definitions */
static rsRetVal resetConfigVariables(uchar __attribute__((unused)) *pp, void __attribute__((unused)) *pVal);
/* Module static data */
+/* config vars for legacy config system */
static relpEngine_t *pRelpEngine; /* our relp engine */
static prop_t *pInputName = NULL; /* there is only one global inputName for all messages generated by this module */
+static struct configSettings_s {
+ uchar *pszBindRuleset; /* name of Ruleset to bind to */
+} cs;
struct instanceConf_s {
uchar *pszBindPort; /* port to bind to */
@@ -74,21 +80,13 @@ struct instanceConf_s {
struct modConfData_s {
rsconf_t *pConf; /* our overall config object */
instanceConf_t *root, *tail;
- int iTCPSessMax; /* max number of sessions */
- int iTCPLstnMax; /* max number of sessions */
- int iStrmDrvrMode; /* mode for stream driver, driver-dependent (0 mostly means plain tcp) */
- int bEmitMsgOnClose; /* emit an informational message on close by remote peer */
- int iAddtlFrameDelim; /* addtl frame delimiter, e.g. for netscreen, default none */
- int bDisableLFDelim; /* disable standard LF delimiter */
- int bUseFlowControl; /* use flow control, what means indicate ourselfs a "light delayable" */
- uchar *pszStrmDrvrAuthMode; /* authentication mode to use */
+ uchar *pszBindRuleset; /* name of Ruleset to bind to */
+ ruleset_t *pBindRuleset; /* due to librelp limitation, we need to bind all listerns to the same set */
};
static modConfData_t *loadModConf = NULL;/* modConf ptr to use for the current load process */
static modConfData_t *runModConf = NULL;/* modConf ptr to use for the current load process */
-//#include "im-helper.h" /* must be included AFTER the type definitions! */
-
/* ------------------------------ callbacks ------------------------------ */
@@ -107,7 +105,7 @@ onSyslogRcv(uchar *pHostname, uchar *pIP, uchar *pMsg, size_t lenMsg)
{
DEFiRet;
parseAndSubmitMessage(pHostname, pIP, pMsg, lenMsg, PARSE_HOSTNAME,
- eFLOWCTL_LIGHT_DELAY, pInputName, NULL, 0);
+ eFLOWCTL_LIGHT_DELAY, pInputName, NULL, 0, runModConf->pBindRuleset);
RETiRet;
}
@@ -116,6 +114,15 @@ onSyslogRcv(uchar *pHostname, uchar *pIP, uchar *pMsg, size_t lenMsg)
/* ------------------------------ end callbacks ------------------------------ */
+/* modified to work for module, not instance (as usual) */
+static inline void
+std_checkRuleset_genErrMsg(modConfData_t *modConf, __attribute__((unused)) instanceConf_t *inst)
+{
+ errmsg.LogError(0, NO_ERRCODE, "imrelp: ruleset '%s' not found - "
+ "using default ruleset instead", modConf->pszBindRuleset);
+}
+
+
/* This function is called when a new listener instace shall be added to
* the current config object via the legacy config system. It just shuffles
* all parameters to the listener in-memory instance.
@@ -170,19 +177,42 @@ CODESTARTbeginCnfLoad
loadModConf = pModConf;
pModConf->pConf = pConf;
/* init legacy config variables */
- resetConfigVariables(NULL, NULL); /* dummy parameters just to fulfill interface def */
+ cs.pszBindRuleset = NULL;
ENDbeginCnfLoad
BEGINendCnfLoad
CODESTARTendCnfLoad
+ if((cs.pszBindRuleset == NULL) || (cs.pszBindRuleset[0] == '\0')) {
+ loadModConf->pszBindRuleset = NULL;
+ } else {
+ CHKmalloc(loadModConf->pszBindRuleset = ustrdup(cs.pszBindRuleset));
+ }
+ loadModConf->pBindRuleset = NULL;
+finalize_it:
+ free(cs.pszBindRuleset);
loadModConf = NULL; /* done loading */
ENDendCnfLoad
BEGINcheckCnf
+ rsRetVal localRet;
+ ruleset_t *pRuleset;
CODESTARTcheckCnf
- /* so far, we have nothing to check... */
+ /* we emulate the standard "ruleset query" code provided by the framework
+ * for *instances* (which we can currently not support due to librelp).
+ */
+ if(pModConf->pszBindRuleset == NULL) {
+ pModConf->pBindRuleset = NULL;
+ } else {
+ localRet = ruleset.GetRuleset(pModConf->pConf, &pRuleset, pModConf->pszBindRuleset);
+ if(localRet == RS_RET_NOT_FOUND) {
+ std_checkRuleset_genErrMsg(pModConf, NULL);
+ }
+ CHKiRet(localRet);
+ pModConf->pBindRuleset = pRuleset;
+ }
+finalize_it:
ENDcheckCnf
@@ -239,6 +269,7 @@ CODESTARTmodExit
prop.Destruct(&pInputName);
/* release objects we used */
+ objRelease(ruleset, CORE_COMPONENT);
objRelease(prop, CORE_COMPONENT);
objRelease(net, LM_NET_FILENAME);
objRelease(errmsg, CORE_COMPONENT);
@@ -248,6 +279,8 @@ ENDmodExit
static rsRetVal
resetConfigVariables(uchar __attribute__((unused)) *pp, void __attribute__((unused)) *pVal)
{
+ free(cs.pszBindRuleset);
+ cs.pszBindRuleset = NULL;
return RS_RET_OK;
}
@@ -270,8 +303,11 @@ CODEmodInit_QueryRegCFSLineHdlr
CHKiRet(objUse(prop, CORE_COMPONENT));
CHKiRet(objUse(errmsg, CORE_COMPONENT));
CHKiRet(objUse(net, LM_NET_FILENAME));
+ CHKiRet(objUse(ruleset, CORE_COMPONENT));
/* register config file handlers */
+ CHKiRet(omsdRegCFSLineHdlr((uchar *)"inputrelpserverbindruleset", 0, eCmdHdlrGetWord,
+ NULL, &cs.pszBindRuleset, STD_LOADABLE_MODULE_ID, eConfObjGlobal));
CHKiRet(omsdRegCFSLineHdlr((uchar *)"inputrelpserverrun", 0, eCmdHdlrGetWord,
addInstance, NULL, STD_LOADABLE_MODULE_ID, eConfObjGlobal));
CHKiRet(omsdRegCFSLineHdlr((uchar *)"resetconfigvariables", 1, eCmdHdlrCustomHandler,