EXEC SQL END DECLARE SECTION;
sprintf(file, "%s/list-", nfs_dir);
-#if 0
- if (stat(file, &sb) == 0)
- {
- if ((ModDiff (&flag1, "users", sb.st_mtime)) ||
- (ModDiff (&flag2, "list", sb.st_mtime)) ||
- (ModDiff (&flag3, "imembers", sb.st_mtime)) ||
- (ModDiff (&flag4, "serverhosts", sb.st_mtime)))
- exit(MR_DATE);
- if (flag1 < 0 && flag2 < 0 && flag3 < 0 && flag4 < 0)
- {
- fprintf(stderr, "The lists do not need to be rebuilt.\n");
- return 0;
- }
- }
-#endif
/* build the list of everyone, and store it in a file whose name
* corresponds to the empty list.
void do_everyone(void)
{
+ const buflen = MAXPATHLEN;
char buf[MAXPATHLEN], *l;
struct user *u;
struct grp *g;
EXEC SQL DECLARE l_cursor CURSOR FOR
SELECT gid, list_id
FROM list
- WHERE grouplist != 0 AND active != 0
+ WHERE nfsgroup != 0 AND grouplist != 0 AND active != 0
ORDER BY list_id;
EXEC SQL OPEN l_cursor;
while (1)
for (b = *p; b; b = b->next)
{
u = (struct user *)b->data;
- sprintf(buf, "%s:%d", u->name, u->uid);
+ 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);
}