summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAriel P <ariel.p@hostdime.com>2011-01-31 17:22:39 +0100
committerRainer Gerhards <rgerhards@adiscon.com>2011-01-31 17:22:39 +0100
commit44e3fb96c5dd94a0669beff70cfa9d9097c35de2 (patch)
tree804bdbe79e4361da9ce7c3737ef432c2e017c5e9
parentb231db5253d68f1b707433aa708497b898aeb4ac (diff)
downloadrsyslog-44e3fb96c5dd94a0669beff70cfa9d9097c35de2.tar.gz
rsyslog-44e3fb96c5dd94a0669beff70cfa9d9097c35de2.tar.xz
rsyslog-44e3fb96c5dd94a0669beff70cfa9d9097c35de2.zip
added $OMMySQLConfigFile/$OMMySQLConfigSection config directives
Signed-off-by: Rainer Gerhards <rgerhards@adiscon.com>
-rw-r--r--ChangeLog2
-rw-r--r--plugins/ommysql/ommysql.c39
2 files changed, 41 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 0c66442f..5052a565 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,6 +8,8 @@ Version 5.7.3 [V5-DEVEL] (rgerhards), 2010-12-??
- bugfix: local hostname was pulled too-early, so that some config
directives (namely FQDN settings) did not have any effect
- bugfix: imfile did duplicate messages under some circumstances
+- added $OMMySQLConfigFile config directive
+- added $OMMySQLConfigSection config directive
---------------------------------------------------------------------------
Version 5.7.2 [V5-DEVEL] (rgerhards), 2010-11-26
- bugfix(important): problem in TLS handling could cause rsyslog to loop
diff --git a/plugins/ommysql/ommysql.c b/plugins/ommysql/ommysql.c
index d6870a7b..aff76d0a 100644
--- a/plugins/ommysql/ommysql.c
+++ b/plugins/ommysql/ommysql.c
@@ -60,9 +60,13 @@ typedef struct _instanceData {
char f_dbuid[_DB_MAXUNAMELEN+1]; /* DB user */
char f_dbpwd[_DB_MAXPWDLEN+1]; /* DB user's password */
unsigned uLastMySQLErrno; /* last errno returned by MySQL or 0 if all is well */
+ uchar * f_configfile; /* MySQL Client Configuration File */
+ uchar * f_configsection; /* MySQL Client Configuration Section */
} instanceData;
/* config variables */
+static uchar * pszMySQLConfigFile = NULL; /* MySQL Client Configuration File */
+static uchar * pszMySQLConfigSection = NULL; /* MySQL Client Configuration Section */
static int iSrvPort = 0; /* database server port */
@@ -91,6 +95,14 @@ static void closeMySQL(instanceData *pData)
mysql_close(pData->f_hmysql);
pData->f_hmysql = NULL;
}
+ if(pData->f_configfile!=NULL){
+ free(pData->f_configfile);
+ pData->f_configfile=NULL;
+ }
+ if(pData->f_configsection!=NULL){
+ free(pData->f_configsection);
+ pData->f_configsection=NULL;
+ }
}
BEGINfreeInstance
@@ -152,6 +164,25 @@ static rsRetVal initMySQL(instanceData *pData, int bSilent)
errmsg.LogError(0, RS_RET_SUSPENDED, "can not initialize MySQL handle");
iRet = RS_RET_SUSPENDED;
} else { /* we could get the handle, now on with work... */
+ mysql_options(pData->f_hmysql,MYSQL_READ_DEFAULT_GROUP,((pData->f_configsection!=NULL)?(char*)pData->f_configsection:"client"));
+ if(pData->f_configfile!=NULL){
+ FILE * fp;
+ fp=fopen((char*)pData->f_configfile,"r");
+ int err=errno;
+ if(fp==NULL){
+ char msg[512];
+ snprintf(msg,sizeof(msg)/sizeof(char),"Could not open '%s' for reading",pData->f_configfile);
+ if(bSilent) {
+ char errStr[512];
+ rs_strerror_r(err, errStr, sizeof(errStr));
+ dbgprintf("mysql configuration error(%d): %s - %s\n",err,msg,errStr);
+ } else
+ errmsg.LogError(err,NO_ERRCODE,"mysql configuration error: %s\n",msg);
+ } else {
+ fclose(fp);
+ mysql_options(pData->f_hmysql,MYSQL_READ_DEFAULT_FILE,pData->f_configfile);
+ }
+ }
/* Connect to database */
if(mysql_real_connect(pData->f_hmysql, pData->f_dbsrv, pData->f_dbuid,
pData->f_dbpwd, pData->f_dbname, pData->f_dbsrvPort, NULL, 0) == NULL) {
@@ -278,6 +309,8 @@ CODE_STD_STRING_REQUESTparseSelectorAct(1)
ABORT_FINALIZE(RS_RET_INVALID_PARAMS);
} else {
pData->f_dbsrvPort = (unsigned) iSrvPort; /* set configured port */
+ pData->f_configfile = pszMySQLConfigFile;
+ pData->f_configsection = pszMySQLConfigSection;
pData->f_hmysql = NULL; /* initialize, but connect only on first message (important for queued mode!) */
}
@@ -302,6 +335,10 @@ static rsRetVal resetConfigVariables(uchar __attribute__((unused)) *pp, void __a
{
DEFiRet;
iSrvPort = 0; /* zero is the default port */
+ free(pszMySQLConfigFile);
+ pszMySQLConfigFile = NULL;
+ free(pszMySQLConfigSection);
+ pszMySQLConfigSection = NULL;
RETiRet;
}
@@ -313,6 +350,8 @@ CODEmodInit_QueryRegCFSLineHdlr
/* register our config handlers */
CHKiRet(omsdRegCFSLineHdlr((uchar *)"actionommysqlserverport", 0, eCmdHdlrInt, NULL, &iSrvPort, STD_LOADABLE_MODULE_ID));
CHKiRet(omsdRegCFSLineHdlr((uchar *)"resetconfigvariables", 1, eCmdHdlrCustomHandler, resetConfigVariables, NULL, STD_LOADABLE_MODULE_ID));
+ CHKiRet(omsdRegCFSLineHdlr((uchar *)"ommysqlconfigfile",0,eCmdHdlrGetWord,NULL,&pszMySQLConfigFile,STD_LOADABLE_MODULE_ID));
+ CHKiRet(omsdRegCFSLineHdlr((uchar *)"ommysqlconfigsection",0,eCmdHdlrGetWord,NULL,&pszMySQLConfigSection,STD_LOADABLE_MODULE_ID));
ENDmodInit
/* vi:set ai: