diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2011-10-13 08:04:40 +0200 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2011-10-13 08:04:40 +0200 |
commit | 4831a51f5a7c8e3821cb98bc21fb47204e5470c2 (patch) | |
tree | 654e1fa9549caef0ca14e92e37dee7a5ca044bc2 | |
parent | cd5253fa82fdbd7529f76c9cec2130e1ccb210bb (diff) | |
download | rsyslog-4831a51f5a7c8e3821cb98bc21fb47204e5470c2.tar.gz rsyslog-4831a51f5a7c8e3821cb98bc21fb47204e5470c2.tar.xz rsyslog-4831a51f5a7c8e3821cb98bc21fb47204e5470c2.zip |
bugfix: race condition when extracting program name and APPNAME
could lead to invalid characters e.g. in dynamic file names
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | runtime/msg.c | 28 |
2 files changed, 27 insertions, 5 deletions
@@ -1,5 +1,7 @@ --------------------------------------------------------------------------- -Version 5.8.6 [V5-stable] (rgerhards/al), 2011-??-?? +Version 5.8.6 [V5-stable] 2011-??-?? +- bugfix: race condition when extracting program name and APPNAME + could lead to invalid characters e.g. in dynamic file names - bugfix: imuxsock did no longer ignore message-provided timestamp, if so configured (the *default*). Lead to no longer sub-second timestamps. closes: http://bugzilla.adiscon.com/show_bug.cgi?id=281 diff --git a/runtime/msg.c b/runtime/msg.c index 7cc588b7..eb1e3ae4 100644 --- a/runtime/msg.c +++ b/runtime/msg.c @@ -1873,8 +1873,18 @@ int getProgramNameLen(msg_t *pM, sbool bLockMutex) */ uchar *getProgramName(msg_t *pM, sbool bLockMutex) { - prepareProgramName(pM, bLockMutex); - return (pM->pCSProgName == NULL) ? UCHAR_CONSTANT("") : rsCStrGetSzStrNoNULL(pM->pCSProgName); + uchar *pszRet; + + if(bLockMutex == LOCK_MUTEX) + MsgUnlock(pM); + prepareProgramName(pM, MUTEX_ALREADY_LOCKED); + if(pM->pCSProgName == NULL) + pszRet = UCHAR_CONSTANT(""); + else + pszRet = rsCStrGetSzStrNoNULL(pM->pCSProgName); + if(bLockMutex == LOCK_MUTEX) + MsgUnlock(pM); + return pszRet; } @@ -1920,9 +1930,19 @@ static inline void prepareAPPNAME(msg_t *pM, sbool bLockMutex) */ char *getAPPNAME(msg_t *pM, sbool bLockMutex) { + uchar *pszRet; + assert(pM != NULL); - prepareAPPNAME(pM, bLockMutex); - return (pM->pCSAPPNAME == NULL) ? "" : (char*) rsCStrGetSzStrNoNULL(pM->pCSAPPNAME); + if(bLockMutex == LOCK_MUTEX) + MsgUnlock(pM); + prepareAPPNAME(pM, MUTEX_ALREADY_LOCKED); + if(pM->pCSAPPNAME == NULL) + pszRet = UCHAR_CONSTANT(""); + else + pszRet = rsCStrGetSzStrNoNULL(pM->pCSAPPNAME); + if(bLockMutex == LOCK_MUTEX) + MsgUnlock(pM); + return (char*)pszRet; } /* rgerhards, 2005-11-24 |