diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2008-09-02 11:38:31 +0200 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2008-09-02 11:38:31 +0200 |
commit | 1a9ac0ced72dd163228438af4f31f233fab20529 (patch) | |
tree | 6f228f58615d596bef9ca4f3f0da934368191369 /plugins/imuxsock/imuxsock.c | |
parent | c2f30a2fc3fb1f87c157828dd08ee20fe444833d (diff) | |
download | rsyslog-1a9ac0ced72dd163228438af4f31f233fab20529.tar.gz rsyslog-1a9ac0ced72dd163228438af4f31f233fab20529.tar.xz rsyslog-1a9ac0ced72dd163228438af4f31f233fab20529.zip |
removed compile time fixed message size limit (was 2K)
The limit can now be set via $MaxMessageSize global config
directive (finally gotten rid of MAXLINE ;))
Diffstat (limited to 'plugins/imuxsock/imuxsock.c')
-rw-r--r-- | plugins/imuxsock/imuxsock.c | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/plugins/imuxsock/imuxsock.c b/plugins/imuxsock/imuxsock.c index 4f1fcea4..6e0fa1d3 100644 --- a/plugins/imuxsock/imuxsock.c +++ b/plugins/imuxsock/imuxsock.c @@ -196,14 +196,31 @@ static rsRetVal readSocket(int fd, int iSock) { DEFiRet; int iRcvd; - uchar line[MAXLINE +1]; + int iMaxLine; + uchar bufRcv[4096+1]; + uchar *pRcv = NULL; /* receive buffer */ assert(iSock >= 0); - iRcvd = recv(fd, line, MAXLINE - 1, 0); + + iMaxLine = glbl.GetMaxLine(); + + /* we optimize performance: if iMaxLine is below 4K (which it is in almost all + * cases, we use a fixed buffer on the stack. Only if it is higher, heap memory + * is used. We could use alloca() to achive a similar aspect, but there are so + * many issues with alloca() that I do not want to take that route. + * rgerhards, 2008-09-02 + */ + if((size_t) iMaxLine < sizeof(bufRcv) - 1) { + pRcv = bufRcv; + } else { + CHKmalloc(pRcv = (uchar*) malloc(sizeof(uchar) * (iMaxLine + 1))); + } + + iRcvd = recv(fd, pRcv, iMaxLine, 0); dbgprintf("Message from UNIX socket: #%d\n", fd); if (iRcvd > 0) { parseAndSubmitMessage(funixHName[iSock] == NULL ? glbl.GetLocalHostName() : funixHName[iSock], - (uchar*)"127.0.0.1", line, + (uchar*)"127.0.0.1", pRcv, iRcvd, funixParseHost[iSock], funixFlags[iSock], funixFlowCtl[iSock]); } else if (iRcvd < 0 && errno != EINTR) { char errStr[1024]; @@ -212,6 +229,10 @@ static rsRetVal readSocket(int fd, int iSock) errmsg.LogError(errno, NO_ERRCODE, "recvfrom UNIX"); } +finalize_it: + if(pRcv != NULL && (size_t) iMaxLine >= sizeof(bufRcv) - 1) + free(pRcv); + RETiRet; } |