mirror of
https://github.com/rsyslog/rsyslog.git
synced 2025-12-19 17:20:42 +01:00
mmdblookup: permit to specify custom var names
... for database fields
This commit is contained in:
parent
0e9c6547f6
commit
cc65f25f90
@ -38,6 +38,7 @@
|
|||||||
#include "template.h"
|
#include "template.h"
|
||||||
#include "module-template.h"
|
#include "module-template.h"
|
||||||
#include "errmsg.h"
|
#include "errmsg.h"
|
||||||
|
#include "parserif.h"
|
||||||
|
|
||||||
#include "maxminddb.h"
|
#include "maxminddb.h"
|
||||||
|
|
||||||
@ -57,7 +58,8 @@ typedef struct _instanceData {
|
|||||||
char *pszMmdbFile;
|
char *pszMmdbFile;
|
||||||
struct {
|
struct {
|
||||||
int nmemb;
|
int nmemb;
|
||||||
uchar **name;
|
char **name;
|
||||||
|
char **varname;
|
||||||
} fieldList;
|
} fieldList;
|
||||||
} instanceData;
|
} instanceData;
|
||||||
|
|
||||||
@ -147,8 +149,10 @@ CODESTARTfreeInstance
|
|||||||
if(pData->fieldList.name != NULL) {
|
if(pData->fieldList.name != NULL) {
|
||||||
for(int i = 0 ; i < pData->fieldList.nmemb ; ++i) {
|
for(int i = 0 ; i < pData->fieldList.nmemb ; ++i) {
|
||||||
free(pData->fieldList.name[i]);
|
free(pData->fieldList.name[i]);
|
||||||
|
free(pData->fieldList.varname[i]);
|
||||||
}
|
}
|
||||||
free(pData->fieldList.name);
|
free(pData->fieldList.name);
|
||||||
|
free(pData->fieldList.varname);
|
||||||
}
|
}
|
||||||
free(pData->pszKey);
|
free(pData->pszKey);
|
||||||
free(pData->pszMmdbFile);
|
free(pData->pszMmdbFile);
|
||||||
@ -192,8 +196,29 @@ CODESTARTnewActInst
|
|||||||
} else if (!strcmp(actpblk.descr[i].name, "fields")) {
|
} else if (!strcmp(actpblk.descr[i].name, "fields")) {
|
||||||
pData->fieldList.nmemb = pvals[i].val.d.ar->nmemb;
|
pData->fieldList.nmemb = pvals[i].val.d.ar->nmemb;
|
||||||
CHKmalloc(pData->fieldList.name = calloc(pData->fieldList.nmemb, sizeof(uchar *)));
|
CHKmalloc(pData->fieldList.name = calloc(pData->fieldList.nmemb, sizeof(uchar *)));
|
||||||
for (int j = 0; j < pvals[i].val.d.ar->nmemb; ++j)
|
CHKmalloc(pData->fieldList.varname = calloc(pData->fieldList.nmemb, sizeof(uchar *)));
|
||||||
pData->fieldList.name[j] = (uchar*)es_str2cstr(pvals[i].val.d.ar->arr[j], NULL);
|
for (int j = 0; j < pvals[i].val.d.ar->nmemb; ++j) {
|
||||||
|
char *const param = es_str2cstr(pvals[i].val.d.ar->arr[j], NULL);
|
||||||
|
char *varname = NULL;
|
||||||
|
char *name;
|
||||||
|
if(*param == ':') {
|
||||||
|
char *b = strchr(param+1, ':');
|
||||||
|
if(b == NULL) {
|
||||||
|
parser_errmsg("mmdblookup: missing closing colon: '%s'", param);
|
||||||
|
ABORT_FINALIZE(RS_RET_ERR);
|
||||||
|
}
|
||||||
|
*b = '\0'; /* split name & varname */
|
||||||
|
varname = param+1;
|
||||||
|
name = b+1;
|
||||||
|
} else {
|
||||||
|
name = param;
|
||||||
|
}
|
||||||
|
if(*name == '!')
|
||||||
|
++name;
|
||||||
|
CHKmalloc(pData->fieldList.name[j] = strdup(name));
|
||||||
|
CHKmalloc(pData->fieldList.varname[j] = strdup(varname == NULL ? name : varname));
|
||||||
|
free(param);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
dbgprintf("mmdblookup: program error, non-handled"
|
dbgprintf("mmdblookup: program error, non-handled"
|
||||||
" param '%s'\n", actpblk.descr[i].name);
|
" param '%s'\n", actpblk.descr[i].name);
|
||||||
@ -324,9 +349,9 @@ CODESTARTdoAction
|
|||||||
/* temp_json now contains the value we want to have, so set it */
|
/* temp_json now contains the value we want to have, so set it */
|
||||||
json_object_get(temp_json);
|
json_object_get(temp_json);
|
||||||
char varname[256];
|
char varname[256];
|
||||||
snprintf(varname, sizeof(varname), "%s%s%s", JSON_IPLOOKUP_NAME,
|
snprintf(varname, sizeof(varname), "%s!%s", JSON_IPLOOKUP_NAME,
|
||||||
(*pData->pszKey == '!') ? "" : "!", pData->pszKey);
|
pData->fieldList.varname[i]);
|
||||||
msgAddJSON(pMsg, (uchar *)JSON_IPLOOKUP_NAME "!ip!city", temp_json, 0, 0);
|
msgAddJSON(pMsg, (uchar *)varname, temp_json, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
finalize_it:
|
finalize_it:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user