summaryrefslogtreecommitdiffstats
path: root/runtime/cfsysline.c
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2012-06-06 18:43:03 +0200
committerRainer Gerhards <rgerhards@adiscon.com>2012-06-06 18:43:03 +0200
commitba31ca0c288c71a714a93118acfb214879bf7b8f (patch)
tree670c914437ba781f34d6ab37962cb337711f7f26 /runtime/cfsysline.c
parent050db3854d664b47b8b27d7877984500c8ba9568 (diff)
parent7f109cca88816752a9c9cbe255df9e3a5b5a8b5a (diff)
downloadrsyslog-ba31ca0c288c71a714a93118acfb214879bf7b8f.tar.gz
rsyslog-ba31ca0c288c71a714a93118acfb214879bf7b8f.tar.bz2
rsyslog-ba31ca0c288c71a714a93118acfb214879bf7b8f.zip
Merge branch 'v5-stable' into v6-stable
Conflicts: ChangeLog configure.ac doc/manual.html
Diffstat (limited to 'runtime/cfsysline.c')
-rw-r--r--runtime/cfsysline.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/runtime/cfsysline.c b/runtime/cfsysline.c
index b9516435..2d91094c 100644
--- a/runtime/cfsysline.c
+++ b/runtime/cfsysline.c
@@ -339,11 +339,12 @@ static int doParseOnOffOption(uchar **pp)
*/
static rsRetVal doGetGID(uchar **pp, rsRetVal (*pSetHdlr)(void*, uid_t), void *pVal)
{
- struct group *pgBuf;
+ struct group *pgBuf = NULL;
struct group gBuf;
DEFiRet;
uchar szName[256];
- char stringBuf[2048]; /* I hope this is large enough... */
+ int bufSize = 2048;
+ char * stringBuf = NULL;
assert(pp != NULL);
assert(*pp != NULL);
@@ -353,7 +354,17 @@ static rsRetVal doGetGID(uchar **pp, rsRetVal (*pSetHdlr)(void*, uid_t), void *p
ABORT_FINALIZE(RS_RET_NOT_FOUND);
}
- getgrnam_r((char*)szName, &gBuf, stringBuf, sizeof(stringBuf), &pgBuf);
+
+ 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));
+ }
+ }
if(pgBuf == NULL) {
errmsg.LogError(0, RS_RET_NOT_FOUND, "ID for group '%s' could not be found or error", (char*)szName);
@@ -372,6 +383,7 @@ static rsRetVal doGetGID(uchar **pp, rsRetVal (*pSetHdlr)(void*, uid_t), void *p
skipWhiteSpace(pp); /* skip over any whitespace */
finalize_it:
+ free(stringBuf);
RETiRet;
}