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; }