50 lines
1.6 KiB
Diff
50 lines
1.6 KiB
Diff
diff -up rsyslog-8.1911.0/grammar/rainerscript.c.orig rsyslog-8.1911.0/grammar/rainerscript.c
|
|
--- rsyslog-8.1911.0/grammar/rainerscript.c.orig 2021-04-06 13:43:55.366523373 +0200
|
|
+++ rsyslog-8.1911.0/grammar/rainerscript.c 2021-04-06 13:44:40.039239056 +0200
|
|
@@ -905,15 +905,29 @@ static int
|
|
doGetGID(struct nvlst *valnode, struct cnfparamdescr *param,
|
|
struct cnfparamvals *val)
|
|
{
|
|
- char *cstr;
|
|
- int r;
|
|
- struct group *resultBuf;
|
|
- struct group wrkBuf;
|
|
- char stringBuf[2048]; /* 2048 has been proven to be large enough */
|
|
+ char *cstr;
|
|
+ int r;
|
|
+ struct group *resultBuf = NULL;
|
|
+ struct group wrkBuf;
|
|
+ char *stringBuf = NULL;
|
|
+ size_t bufSize = 1024;
|
|
+ int e;
|
|
+
|
|
+ cstr = es_str2cstr(valnode->val.d.estr, NULL);
|
|
+ do {
|
|
+ char *p;
|
|
+
|
|
+ /* Increase bufsize and try again.*/
|
|
+ bufSize *= 2;
|
|
+ p = realloc(stringBuf, bufSize);
|
|
+ if(!p) {
|
|
+ e = ENOMEM;
|
|
+ break;
|
|
+ }
|
|
+ stringBuf = p;
|
|
+ e = getgrnam_r(cstr, &wrkBuf, stringBuf, bufSize, &resultBuf);
|
|
+ } while(!resultBuf && (e == ERANGE));
|
|
|
|
- cstr = es_str2cstr(valnode->val.d.estr, NULL);
|
|
- const int e = getgrnam_r(cstr, &wrkBuf, stringBuf,
|
|
- sizeof(stringBuf), &resultBuf);
|
|
if(resultBuf == NULL) {
|
|
if(e != 0) {
|
|
LogError(e, RS_RET_ERR, "parameter '%s': error to "
|
|
@@ -929,6 +943,7 @@ doGetGID(struct nvlst *valnode, struct c
|
|
param->name, (int) resultBuf->gr_gid, cstr);
|
|
r = 1;
|
|
}
|
|
+ free(stringBuf);
|
|
free(cstr);
|
|
return r;
|
|
}
|