void do_everyone(void)
{
- char buf[MAXPATHLEN], *l;
+ const buflen = MAXPATHLEN;
+ char buf[buflen], *l;
struct user *u;
struct grp *g;
struct bucket *b, **p;
u = (struct user *)b->data;
sprintf(buf, "%s:%d:101", u->name, u->uid);
for (g = u->lists; g; g = g->next)
- strcat(buf, g->lid);
+ {
+ if ((strlen(buf) + strlen(g->lid)) <= buflen)
+ strcat(buf, g->lid);
+ else
+ {
+ com_err(whoami, 0, "truncated server-side grp list for %s",
+ u->name);
+ break;
+ }
+ }
b->data = strdup(buf);
fprintf(fd, "%s\n", buf);
}