diff options
author | Michael Biebl <biebl@debian.org> | 2014-03-11 19:04:23 +0100 |
---|---|---|
committer | Michael Biebl <biebl@debian.org> | 2014-03-11 19:04:23 +0100 |
commit | 5fccf771f37973a2cea543fbdf1ed94ed9706faf (patch) | |
tree | 80b547300bfb6f1c8ffae16a8af9dea03c3fb75d /tools/syslogd.c | |
parent | 0c656246c6818b9fd0426411ed1cf926fbbc907d (diff) | |
download | rsyslog-upstream/7.4.8.tar.gz |
Imported Upstream version 7.4.8upstream/7.4.8
Diffstat (limited to 'tools/syslogd.c')
-rw-r--r-- | tools/syslogd.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/tools/syslogd.c b/tools/syslogd.c index a8a733d..f14e8d5 100644 --- a/tools/syslogd.c +++ b/tools/syslogd.c @@ -436,15 +436,31 @@ submitMsgWithDfltRatelimiter(msg_t *pMsg) * to log a message orginating from the syslogd itself. */ rsRetVal -logmsgInternal(int iErr, int pri, uchar *msg, int flags) +logmsgInternal(int iErr, int pri, const uchar *const msg, int flags) { uchar pszTag[33]; + size_t lenMsg; + unsigned i; + char *bufModMsg = NULL; /* buffer for modified message, should we need to modify */ msg_t *pMsg; DEFiRet; + /* we first do a path the remove control characters that may have accidently + * introduced (program error!). This costs performance, but we do not expect + * to be called very frequently in any case ;) -- rgerhards, 2013-12-19. + */ + lenMsg = ustrlen(msg); + for(i = 0 ; i < lenMsg ; ++i) { + if(msg[i] < 0x20 || msg[i] == 0x7f) { + if(bufModMsg == NULL) { + CHKmalloc(bufModMsg = strdup((char*) msg)); + } + bufModMsg[i] = ' '; + } + } CHKiRet(msgConstruct(&pMsg)); MsgSetInputName(pMsg, pInternalInputName); - MsgSetRawMsgWOSize(pMsg, (char*)msg); + MsgSetRawMsg(pMsg, (bufModMsg == NULL) ? (char*)msg : bufModMsg, lenMsg); MsgSetHOSTNAME(pMsg, glbl.GetLocalHostName(), ustrlen(glbl.GetLocalHostName())); MsgSetRcvFrom(pMsg, glbl.GetLocalHostNameProp()); MsgSetRcvFromIP(pMsg, glbl.GetLocalHostIP()); @@ -474,7 +490,7 @@ logmsgInternal(int iErr, int pri, uchar *msg, int flags) */ if(((Debug == DEBUG_FULL || !doFork) && ourConf->globals.bErrMsgToStderr) || iConfigVerify) { if(LOG_PRI(pri) == LOG_ERR) - fprintf(stderr, "rsyslogd: %s\n", msg); + fprintf(stderr, "rsyslogd: %s\n", (bufModMsg == NULL) ? (char*)msg : bufModMsg); } if(bHaveMainQueue == 0) { /* not yet in queued mode */ @@ -484,9 +500,9 @@ logmsgInternal(int iErr, int pri, uchar *msg, int flags) * message to the queue engine. */ ratelimitAddMsg(internalMsg_ratelimiter, NULL, pMsg); - //submitMsgWithDfltRatelimiter(pMsg); } finalize_it: + free(bufModMsg); RETiRet; } |