summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2013-03-20 09:47:26 +0100
committerRainer Gerhards <rgerhards@adiscon.com>2013-03-20 09:47:26 +0100
commitbdf743197da2e09f303cbd06c708767fe7c6adfd (patch)
treee262823ded64dc6cfc246fa4b117b13d81131f36
parentaef0be0c1799fbb20955fc1dc014cb9c9772af88 (diff)
parent2e4e7e819fed64fa2897af01479a9083b081d0c2 (diff)
downloadrsyslog-bdf743197da2e09f303cbd06c708767fe7c6adfd.tar.gz
rsyslog-bdf743197da2e09f303cbd06c708767fe7c6adfd.tar.bz2
rsyslog-bdf743197da2e09f303cbd06c708767fe7c6adfd.zip
Merge branch 'v7-stable' into tmp
-rw-r--r--ChangeLog6
-rw-r--r--configure.ac2
-rw-r--r--grammar/rainerscript.c6
-rw-r--r--runtime/cfsysline.c28
4 files changed, 27 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index 07cf7844..0fd84585 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -189,6 +189,12 @@ Version 7.2.7 [v7-stable] 2013-03-??
- improved debugging support in forked (auto-backgrounding) mode
The rsyslog debug log file is now continued to be written across the
fork.
+- bugfix: using group resolution could lead to endless loop
+ Thanks to Tomas Heinrich for the patch.
+ closes: http://bugzilla.adiscon.com/show_bug.cgi?id=310
+- bugfix: RainerScript getenv() function caused segfault when var was
+ not found.
+ Thanks to Philippe Muller for the patch.
- bugfix: several issues in imkmsg
see bug tracker: http://bugzilla.adiscon.com/show_bug.cgi?id=421#c8
- bugfix: imuxsock was missing SysSock.ParseTrusted module parameter
diff --git a/configure.ac b/configure.ac
index 68769808..526244fe 100644
--- a/configure.ac
+++ b/configure.ac
@@ -32,7 +32,7 @@ AC_CANONICAL_HOST
PKG_PROG_PKG_CONFIG
# modules we require
-PKG_CHECK_MODULES(LIBESTR, libestr >= 0.1.2)
+PKG_CHECK_MODULES(LIBESTR, libestr >= 0.1.5)
PKG_CHECK_MODULES(LIBEE, libee >= 0.4.0)
PKG_CHECK_MODULES([JSON_C], [json])
diff --git a/grammar/rainerscript.c b/grammar/rainerscript.c
index 8a9c9aaa..065e815a 100644
--- a/grammar/rainerscript.c
+++ b/grammar/rainerscript.c
@@ -1273,8 +1273,12 @@ doFuncCall(struct cnffunc *func, struct var *ret, void* usrptr)
estr = var2String(&r[0], &bMustFree);
str = (char*) es_str2cstr(estr, NULL);
envvar = getenv(str);
+ if(envvar == NULL) {
+ ret->d.estr = es_newStr(0);
+ } else {
+ ret->d.estr = es_newStrFromCStr(envvar, strlen(envvar));
+ }
ret->datatype = 'S';
- ret->d.estr = es_newStrFromCStr(envvar, strlen(envvar));
if(bMustFree) es_deleteStr(estr);
if(r[0].datatype == 'S') es_deleteStr(r[0].d.estr);
free(str);
diff --git a/runtime/cfsysline.c b/runtime/cfsysline.c
index 6b06d427..a437b7f8 100644
--- a/runtime/cfsysline.c
+++ b/runtime/cfsysline.c
@@ -350,8 +350,9 @@ static rsRetVal doGetGID(uchar **pp, rsRetVal (*pSetHdlr)(void*, uid_t), void *p
struct group gBuf;
DEFiRet;
uchar szName[256];
- int bufSize = 2048;
+ int bufSize = 1024;
char * stringBuf = NULL;
+ int err;
assert(pp != NULL);
assert(*pp != NULL);
@@ -361,20 +362,21 @@ static rsRetVal doGetGID(uchar **pp, rsRetVal (*pSetHdlr)(void*, uid_t), void *p
ABORT_FINALIZE(RS_RET_NOT_FOUND);
}
-
- CHKmalloc(stringBuf = malloc(bufSize));
- while(pgBuf == NULL) {
- errno = 0;
- getgrnam_r((char*)szName, &gBuf, stringBuf, bufSize, &pgBuf);
- if((pgBuf == NULL) && (errno == ERANGE)) {
- /* Increase bufsize and try again.*/
- bufSize *= 2;
- CHKmalloc(stringBuf = realloc(stringBuf, bufSize));
- }
- }
+ do {
+ /* Increase bufsize and try again.*/
+ bufSize *= 2;
+ CHKmalloc(stringBuf = realloc(stringBuf, bufSize));
+ err = getgrnam_r((char*)szName, &gBuf, stringBuf, bufSize, &pgBuf);
+ } while((pgBuf == NULL) && (err == ERANGE));
if(pgBuf == NULL) {
- errmsg.LogError(0, RS_RET_NOT_FOUND, "ID for group '%s' could not be found or error", (char*)szName);
+ if (err != 0) {
+ rs_strerror_r(err, stringBuf, bufSize);
+ errmsg.LogError(0, RS_RET_NOT_FOUND, "Query for group '%s' resulted in an error: %s\n",
+ (char*)szName, stringBuf);
+ } else {
+ errmsg.LogError(0, RS_RET_NOT_FOUND, "ID for group '%s' could not be found", (char*)szName);
+ }
iRet = RS_RET_NOT_FOUND;
} else {
if(pSetHdlr == NULL) {