summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2011-10-13 08:04:40 +0200
committerRainer Gerhards <rgerhards@adiscon.com>2011-10-13 08:04:40 +0200
commit4831a51f5a7c8e3821cb98bc21fb47204e5470c2 (patch)
tree654e1fa9549caef0ca14e92e37dee7a5ca044bc2
parentcd5253fa82fdbd7529f76c9cec2130e1ccb210bb (diff)
downloadrsyslog-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--ChangeLog4
-rw-r--r--runtime/msg.c28
2 files changed, 27 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index b89429f6..67359a96 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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