diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2011-10-21 14:42:32 +0200 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2011-10-21 14:42:32 +0200 |
commit | 12102199c4b3a042fb91e1d52eb274f06e62213e (patch) | |
tree | 6e8d19a7a004bcc3fb03c2290a630281a846ff86 | |
parent | e61672c6932868d6b09ad0ae8453dc91c545742f (diff) | |
parent | 5d67d98c35da731eab933dbfd858a0e009aa58de (diff) | |
download | rsyslog-12102199c4b3a042fb91e1d52eb274f06e62213e.tar.gz rsyslog-12102199c4b3a042fb91e1d52eb274f06e62213e.tar.bz2 rsyslog-12102199c4b3a042fb91e1d52eb274f06e62213e.zip |
Merge branch 'v5-stable' into v5-devel
Conflicts:
ChangeLog
configure.ac
doc/manual.html
runtime/rsyslog.h
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | doc/property_replacer.html | 4 | ||||
-rw-r--r-- | doc/rsyslog_recording_pri.html | 6 | ||||
-rw-r--r-- | parse.c | 18 | ||||
-rw-r--r-- | parse.h | 2 | ||||
-rw-r--r-- | runtime/conf.c | 2 | ||||
-rw-r--r-- | runtime/rsyslog.h | 3 | ||||
-rw-r--r-- | runtime/stream.c | 2 | ||||
-rw-r--r-- | tools/omfile.c | 5 |
9 files changed, 30 insertions, 16 deletions
@@ -94,7 +94,9 @@ Version 5.9.0 [V5-DEVEL] (rgerhards), 2011-06-08 affected directive was: $ActionExecOnlyWhenPreviousIsSuspended on closes: http://bugzilla.adiscon.com/show_bug.cgi?id=236 --------------------------------------------------------------------------- -Version 5.8.6 [V5-stable] 2011-??-?? +Version 5.8.6 [V5-stable] 2011-10-21 +- bugfix: missing whitespace after property-based filter was not detected +- bugfix: $OMFileFlushInterval period was doubled - now using correct value - bugfix: ActionQueue could malfunction due to index error Thanks to Vlad Grigorescu for the patch - bugfix: $ActionExecOnlyOnce interval did not work properly diff --git a/doc/property_replacer.html b/doc/property_replacer.html index cd357f67..f0153f2a 100644 --- a/doc/property_replacer.html +++ b/doc/property_replacer.html @@ -65,8 +65,8 @@ BSD syslogd. For example, when TAG is "named[12345]", programname is </tr> <tr> <td><b>pri-text</b></td> -<td>the PRI part of the message in a textual form (e.g. -"syslog.info")</td> +<td>the PRI part of the message in a textual form with the numerical PRI appended in +brackes (e.g. "local0.err<133>")</td> </tr> <tr> <td><b>iut</b></td> diff --git a/doc/rsyslog_recording_pri.html b/doc/rsyslog_recording_pri.html index cf11e3e5..a092980c 100644 --- a/doc/rsyslog_recording_pri.html +++ b/doc/rsyslog_recording_pri.html @@ -44,13 +44,13 @@ from the syslog message when output is written. Everything outside of the percent signs is literal text, which is simply written as specified.</p> <p>Thankfully, rsyslog provides message properties for the priority. These are called "PRI", "syslogfacility" and "syslogpriority" (case is important!). They are numerical -values. Starting with rsyslog 1.13.4, there is also a property "PRI-text", which -contains the priority in friendly text format (e.g. "syslog.info"). For the rest +values. Starting with rsyslog 1.13.4, there is also a property "pri-text", which +contains the priority in friendly text format (e.g. "local0.err<133>"). For the rest of this article, I assume that you run version 1.13.4 or higher.</p> <p>Recording the priority is now a simple matter of adding the respective field to the template. It now looks like this:</p> <p align="center"> -<code>$template TraditionalFormatWithPRI,"%PRI-text%: %timegenerated% %HOSTNAME% %syslogtag%%msg:::drop-last-lf%\n"</code> +<code>$template TraditionalFormatWithPRI,"%pri-text%: %timegenerated% %HOSTNAME% %syslogtag%%msg:::drop-last-lf%\n"</code> </p> <p>Now we have the right template - but how to write it to a file? You probably have a line like this in your syslog.conf:</p> @@ -210,22 +210,32 @@ rsRetVal parsSkipAfterChar(rsParsObj *pThis, char c) /* Skip whitespace. Often used to trim parsable entries. * Returns with ParsePointer set to first non-whitespace * character (or at end of string). + * If bRequireOne is set to true, at least one whitespace + * must exist, else an error is returned. */ -rsRetVal parsSkipWhitespace(rsParsObj *pThis) +rsRetVal parsSkipWhitespace(rsParsObj *pThis, sbool bRequireOne) { register unsigned char *pC; + int numSkipped; + DEFiRet; + rsCHECKVALIDOBJECT(pThis, OIDrsPars); pC = rsCStrGetBufBeg(pThis->pCStr); + numSkipped = 0; while(pThis->iCurrPos < rsCStrLen(pThis->pCStr)) { if(!isspace((int)*(pC+pThis->iCurrPos))) break; ++pThis->iCurrPos; + ++numSkipped; } - return RS_RET_OK; + if(bRequireOne && numSkipped == 0) + iRet = RS_RET_MISSING_WHITESPACE; + + RETiRet; } /* Parse string up to a delimiter. @@ -252,7 +262,7 @@ rsRetVal parsDelimCStr(rsParsObj *pThis, cstr_t **ppCStr, char cDelim, int bTrim CHKiRet(rsCStrConstruct(&pCStr)); if(bTrimLeading) - parsSkipWhitespace(pThis); + parsSkipWhitespace(pThis, 0); pC = rsCStrGetBufBeg(pThis->pCStr) + pThis->iCurrPos; @@ -383,7 +393,7 @@ rsRetVal parsAddrWithBits(rsParsObj *pThis, struct NetAddr **pIP, int *pBits) CHKiRet(cstrConstruct(&pCStr)); - parsSkipWhitespace(pThis); + parsSkipWhitespace(pThis, 0); pC = rsCStrGetBufBeg(pThis->pCStr) + pThis->iCurrPos; /* we parse everything until either '/', ',' or @@ -77,7 +77,7 @@ rsRetVal rsParsAssignString(rsParsObj *pThis, cstr_t *pCStr); rsRetVal parsInt(rsParsObj *pThis, int* pInt); /* Skip whitespace. Often used to trim parsable entries. */ -rsRetVal parsSkipWhitespace(rsParsObj *pThis); +rsRetVal parsSkipWhitespace(rsParsObj *pThis, sbool bRequireOne); /* Parse string up to a delimiter. * diff --git a/runtime/conf.c b/runtime/conf.c index 858dbbfa..3f191292 100644 --- a/runtime/conf.c +++ b/runtime/conf.c @@ -922,7 +922,7 @@ static rsRetVal cflineProcessPropFilter(uchar **pline, register rule_t *f) } /* skip to action part */ - if((iRet = parsSkipWhitespace(pPars)) != RS_RET_OK) { + if((iRet = parsSkipWhitespace(pPars, 1)) != RS_RET_OK) { errmsg.LogError(0, iRet, "error %d skipping to action part - ignoring selector", iRet); rsParsDestruct(pPars); return(iRet); diff --git a/runtime/rsyslog.h b/runtime/rsyslog.h index 65ed70db..06438081 100644 --- a/runtime/rsyslog.h +++ b/runtime/rsyslog.h @@ -345,7 +345,8 @@ enum rsRetVal_ /** return value. All methods return this if not specified oth RS_RET_WRN_WRKDIR = -2182, /**< correctable problems with the rsyslog working directory */ RS_RET_ERR_QUEUE_EMERGENCY = -2183, /**< some fatal error caused queue to switch to emergency mode */ RS_RET_OUTDATED_STMT = -2184, /**< some outdated statement/functionality is being used in conf file */ - RS_RET_OK_WARN = -2185, /**< config part: everything was OK, but a warning message was emitted */ + RS_RET_MISSING_WHITESPACE = -2185, /**< whitespace is missing in some config construct */ + RS_RET_OK_WARN = -2186, /**< config part: everything was OK, but a warning message was emitted */ /* RainerScript error messages (range 1000.. 1999) */ RS_RET_SYSVAR_NOT_FOUND = 1001, /**< system variable could not be found (maybe misspelled) */ diff --git a/runtime/stream.c b/runtime/stream.c index 0238d25e..6b88d3f4 100644 --- a/runtime/stream.c +++ b/runtime/stream.c @@ -1036,7 +1036,7 @@ asyncWriterThread(void *pPtr) continue; /* now we should have data */ } bTimedOut = 0; - timeoutComp(&t, pThis->iFlushInterval * 2000); /* *1000 millisconds */ // TODO: check the 2000?!? + timeoutComp(&t, pThis->iFlushInterval * 1000); /* *1000 millisconds */ if(pThis->bDoTimedWait) { if(pthread_cond_timedwait(&pThis->notEmpty, &pThis->mut, &t) != 0) { int err = errno; diff --git a/tools/omfile.c b/tools/omfile.c index dcb09faf..c5e9b36b 100644 --- a/tools/omfile.c +++ b/tools/omfile.c @@ -579,9 +579,10 @@ prepareDynFile(instanceData *pData, uchar *newFileName, unsigned iMsgOpts) * news is that we also lose errors on startup messages, but so it is. */ if(iMsgOpts & INTERNAL_MSG) { - DBGPRINTF("Could not open dynaFile, discarding message\n"); + DBGPRINTF("Could not open dynaFile '%s', state %d, discarding message\n", + newFileName, localRet); } else { - errmsg.LogError(0, NO_ERRCODE, "Could not open dynamic file '%s' [state %d] - discarding message", newFileName, localRet); + errmsg.LogError(0, localRet, "Could not open dynamic file '%s' [state %d] - discarding message", newFileName, localRet); } ABORT_FINALIZE(localRet); } |