mirror of
https://github.com/rsyslog/rsyslog.git
synced 2025-12-15 19:50:40 +01:00
finished field-based property replacer code
This commit is contained in:
parent
cb4ebecb2f
commit
69d0a13b86
12
syslogd.c
12
syslogd.c
@ -818,9 +818,7 @@ static void wallmsg(register struct filed *f);
|
||||
static void reapchild();
|
||||
static const char *cvthname(struct sockaddr_in *f);
|
||||
static void debug_switch();
|
||||
static void logerror(char *type);
|
||||
static void logerrorInt(char *type, int errCode);
|
||||
static void logerrorSz(char *type, char *errMsg);
|
||||
static rsRetVal cfline(char *line, register struct filed *f);
|
||||
static int decode(char *name, struct code *codetab);
|
||||
static void sighup_handler();
|
||||
@ -3065,7 +3063,7 @@ static char *MsgGetProp(struct msg *pMsg, struct templateEntry *pTpe,
|
||||
*/
|
||||
iCurrFld = 1;
|
||||
pFld = pRes;
|
||||
while(*pFld && iCurrFld < pTpe->data.field.iFromPos) {
|
||||
while(*pFld && iCurrFld < pTpe->data.field.iToPos) {
|
||||
/* skip fields until the requested field or end of string is found */
|
||||
while(*pFld && *pFld != '\t')
|
||||
++pFld; /* skip to field terminator */
|
||||
@ -3074,10 +3072,10 @@ static char *MsgGetProp(struct msg *pMsg, struct templateEntry *pTpe,
|
||||
++iCurrFld;
|
||||
}
|
||||
}
|
||||
dprintf("field requested %d, field found %d\n", pTpe->data.field.iFromPos, iCurrFld);
|
||||
dprintf("field requested %d, field found %d\n", pTpe->data.field.iToPos, iCurrFld);
|
||||
|
||||
|
||||
if(iCurrFld == pTpe->data.field.iFromPos) {
|
||||
if(iCurrFld == pTpe->data.field.iToPos) {
|
||||
/* field found, now extract it */
|
||||
/* first of all, we need to find the end */
|
||||
pFldEnd = pFld;
|
||||
@ -5482,7 +5480,7 @@ static void debug_switch()
|
||||
* correctly formatted for it (containing a single %s param).
|
||||
* rgerhards 2005-09-19
|
||||
*/
|
||||
static void logerrorSz(char *type, char *errMsg)
|
||||
void logerrorSz(char *type, char *errMsg)
|
||||
{
|
||||
char buf[1024];
|
||||
|
||||
@ -5508,7 +5506,7 @@ static void logerrorInt(char *type, int errCode)
|
||||
|
||||
/* Print syslogd errors some place.
|
||||
*/
|
||||
static void logerror(char *type)
|
||||
void logerror(char *type)
|
||||
{
|
||||
char buf[1024];
|
||||
|
||||
|
||||
@ -3,5 +3,7 @@
|
||||
#define dprintf mydprintf
|
||||
#endif /* __GLIBC__ */
|
||||
void dprintf(char *, ...);
|
||||
void logerror(char *type);
|
||||
void logerrorSz(char *type, char *errMsg);
|
||||
|
||||
#include "rsyslog.h"
|
||||
|
||||
50
template.c
50
template.c
@ -276,10 +276,9 @@ static int do_Parameter(char **pp, struct template *pTpl)
|
||||
if (*p != ':') {
|
||||
/* There is something more than an R , this is invalid ! */
|
||||
/* Complain on extra characters */
|
||||
dprintf
|
||||
("error: extra character in frompos, only \"R\" and numbers are allowed: '%s'\n",
|
||||
p);
|
||||
/* TODO: rger- add/change to logerror? */
|
||||
logerrorSz
|
||||
("error: invalid character in frompos after \"R\", property: '%%%s'",
|
||||
*pp);
|
||||
} else {
|
||||
pTpe->data.field.has_regex = 1;
|
||||
}
|
||||
@ -289,20 +288,30 @@ static int do_Parameter(char **pp, struct template *pTpl)
|
||||
if(*p == 'F') {
|
||||
/* we have a field counter, so indicate it in the template */
|
||||
++p; /* eat 'F' */
|
||||
pTpe->data.field.has_fields = 1;
|
||||
}
|
||||
/* we now fall through, as this is only a modifier, but it is followed
|
||||
* by a count as usual. rgerhards, 2005-12-22
|
||||
*/
|
||||
iNum = 0;
|
||||
while(isdigit(*p))
|
||||
iNum = iNum * 10 + *p++ - '0';
|
||||
pTpe->data.field.iFromPos = iNum;
|
||||
/* skip to next known good */
|
||||
while(*p && *p != '%' && *p != ':') {
|
||||
/* TODO: complain on extra characters */
|
||||
dprintf("error: extra character in frompos: '%s'\n", p);
|
||||
++p;
|
||||
if (*p != ':') {
|
||||
/* There is something more than an F, this is invalid ! */
|
||||
/* 2005-12-23 rgerhards: later, we will add modifiers, so
|
||||
* extra characters will then be valid. this is the number 1
|
||||
* reason why this code is NOT combined with the "R" case.
|
||||
*/
|
||||
logerrorSz
|
||||
("error: invalid character in frompos after \"F\", property: '%%%s'",
|
||||
*pp);
|
||||
} else {
|
||||
pTpe->data.field.has_fields = 1;
|
||||
}
|
||||
} else {
|
||||
/* we now have a simple offset in frompos (the previously "normal" case) */
|
||||
iNum = 0;
|
||||
while(isdigit(*p))
|
||||
iNum = iNum * 10 + *p++ - '0';
|
||||
pTpe->data.field.iFromPos = iNum;
|
||||
/* skip to next known good */
|
||||
while(*p && *p != '%' && *p != ':') {
|
||||
/* TODO: complain on extra characters */
|
||||
dprintf("error: extra character in frompos: '%s'\n", p);
|
||||
++p;
|
||||
}
|
||||
}
|
||||
#ifdef FEATURE_REGEXP
|
||||
}
|
||||
@ -341,8 +350,7 @@ static int do_Parameter(char **pp, struct template *pTpl)
|
||||
memcpy(regex_char, p, longitud);
|
||||
regex_char[longitud] = '\0';
|
||||
|
||||
dprintf("debug: regex detected: '%s'\n",
|
||||
regex_char);
|
||||
dprintf("debug: regex detected: '%s'\n", regex_char);
|
||||
|
||||
/* Now i compile the regex */
|
||||
/* Remember that the re is an attribute of the Template entry */
|
||||
@ -638,7 +646,7 @@ void tplPrintList(void)
|
||||
}
|
||||
if(pTpe->data.field.has_fields == 1) {
|
||||
dprintf("[substring, field #%d only] ",
|
||||
pTpe->data.field.iFromPos);
|
||||
pTpe->data.field.iToPos);
|
||||
} else if(pTpe->data.field.iFromPos != 0 ||
|
||||
pTpe->data.field.iToPos != 0) {
|
||||
dprintf("[substring, from character %d to %d] ",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user