diff options
Diffstat (limited to 'syslogd.c')
-rw-r--r-- | syslogd.c | 122 |
1 files changed, 63 insertions, 59 deletions
@@ -181,10 +181,7 @@ #include "outchannel.h" #include "syslogd.h" -/* from liblogging */ -#include "liblogging-stub.h" #include "stringbuf.h" -/* end liblogging */ #ifdef WITH_DB #define _DB_MAXDBLEN 128 /* maximum number of db */ @@ -2004,20 +2001,23 @@ int MsgSetRawMsg(struct msg *pMsg, char* pszRawMsg) * rgerhards 2004-11-23 * regular expression support contributed by Andres Riancho merged * on 2005-09-13 + * changed so that it now an be called without a template entry (NULL). + * In this case, only the (unmodified) property is returned. This will + * be used in selector line processing. + * rgerhards 2005-09-15 */ char *MsgGetProp(struct msg *pMsg, struct templateEntry *pTpe, unsigned short *pbMustBeFreed) { char *pName; char *pRes; /* result pointer */ -
-#ifdef FEATURE_REGEXP
- /* Variables necessary for regular expression matching */
- size_t nmatch = 2;
- regmatch_t pmatch[2];
+ +#ifdef FEATURE_REGEXP + /* Variables necessary for regular expression matching */ + size_t nmatch = 2; + regmatch_t pmatch[2]; #endif
assert(pMsg != NULL); - assert(pTpe != NULL); assert(pbMustBeFreed != NULL); pName = pTpe->data.field.pPropRepl; @@ -2054,6 +2054,12 @@ char *MsgGetProp(struct msg *pMsg, struct templateEntry *pTpe, unsigned short *p } else { pRes = "**INVALID PROPERTY NAME**"; } + + /* If we did not receive a template pointer, we are already done... */ + if(pTpe == NULL) { + *pbMustBeFreed = 0; + return pRes; + } /* Now check if we need to make "temporary" transformations (these * are transformations that do not go back into the message - @@ -2103,54 +2109,52 @@ char *MsgGetProp(struct msg *pMsg, struct templateEntry *pTpe, unsigned short *p free(pRes); pRes = pBufStart; *pbMustBeFreed = 1; - #ifdef FEATURE_REGEXP
- } else {
- /* Check for regular expressions */
- if (pTpe->data.field.has_regex != 0) {
- if (pTpe->data.field.has_regex == 2)
- /* Could not compile regex before! */
- return
- "**NO MATCH** **BAD REGULAR EXPRESSION**";
-
- dprintf
- ("debug: String to match for regex is: %s\n",
- pRes);
-
- if (0 !=
- regexec(&pTpe->data.field.re, pRes, nmatch,
- pmatch, 0)) {
- /* we got no match! */
- return "**NO MATCH**";
- } else {
- /* Match! */
- /* I need to malloc pBuf */
- int iLen;
- char *pBuf;
-
- iLen = pmatch[1].rm_eo - pmatch[1].rm_so;
- pBuf = (char *) malloc((iLen + 1) * sizeof(char));
-
- if (pBuf == NULL) {
- if (*pbMustBeFreed == 1)
- free(pRes);
- *pbMustBeFreed = 0;
- return
- "**OUT OF MEMORY ALLOCATING pBuf**";
- }
- *pBuf = '\0';
-
- /* Lets copy the matched substring to the buffer */
- /* TODO: RGer: I think we can use memcpy() here, too (faster) */
- strncpy(pBuf, pRes + pmatch[1].rm_so,
- iLen);
- pBuf[iLen] = '\0'; /* Null termination of string */
-
- if (*pbMustBeFreed == 1)
- free(pRes);
- pRes = pBuf;
- *pbMustBeFreed = 1;
- }
- }
+#ifdef FEATURE_REGEXP + } else { + /* Check for regular expressions */ + if (pTpe->data.field.has_regex != 0) { + if (pTpe->data.field.has_regex == 2) + /* Could not compile regex before! */ + return + "**NO MATCH** **BAD REGULAR EXPRESSION**"; + + dprintf("debug: String to match for regex is: %s\n", + pRes); + + if (0 != regexec(&pTpe->data.field.re, pRes, nmatch, + pmatch, 0)) { + /* we got no match! */ + return "**NO MATCH**"; + } else { + /* Match! */ + /* I need to malloc pBuf */ + int iLen; + char *pBuf; + + iLen = pmatch[1].rm_eo - pmatch[1].rm_so; + pBuf = (char *) malloc((iLen + 1) * sizeof(char)); + + if (pBuf == NULL) { + if (*pbMustBeFreed == 1) + free(pRes); + *pbMustBeFreed = 0; + return + "**OUT OF MEMORY ALLOCATING pBuf**"; + } + *pBuf = '\0'; + + /* Lets copy the matched substring to the buffer */ + /* TODO: RGer: I think we can use memcpy() here, too (faster) */ + strncpy(pBuf, pRes + pmatch[1].rm_so, + iLen); + pBuf[iLen] = '\0'; /* Null termination of string */ + + if (*pbMustBeFreed == 1) + free(pRes); + pRes = pBuf; + *pbMustBeFreed = 1; + } + } #endif /* #ifdef FEATURE_REGEXP */ } @@ -3518,7 +3522,7 @@ void doSQLEscape(char **pp, size_t *pLen, unsigned short *pbMustBeFreed) while(*p) { if(*p == '\'') { - if(rsCStrAppendChar(pStrB, '\'') != SR_RET_OK) { + if(rsCStrAppendChar(pStrB, '\'') != RS_RET_OK) { doSQLEmergencyEscape(*pp); rsCStrFinish(pStrB); if((pszGenerated = rsCStrConvSzStrAndDestruct(pStrB)) @@ -3528,7 +3532,7 @@ void doSQLEscape(char **pp, size_t *pLen, unsigned short *pbMustBeFreed) iLen++; /* reflect the extra character */ } } - if(rsCStrAppendChar(pStrB, *p) != SR_RET_OK) { + if(rsCStrAppendChar(pStrB, *p) != RS_RET_OK) { doSQLEmergencyEscape(*pp); rsCStrFinish(pStrB); if((pszGenerated = rsCStrConvSzStrAndDestruct(pStrB)) |