#define HTYPE "TXT"
#endif
+/* max number of bytes of a data record that can be returned in a hesiod
+ * query. This is 512 - overhead (~66) [derived empirically]
+ */
+#define MAXHESSIZE 446
+
char hesiod_dir[64];
#define min(x,y) ((x) < (y) ? (x) : (y))
time_t ftime;
EXEC SQL BEGIN DECLARE SECTION;
char name[33];
- int gid, id, lid, flag1, flag2, flag3;
+ int gid, id, lid, flag1, flag2, flag3, len;
EXEC SQL END DECLARE SECTION;
/* open files */
continue;
fprintf(lout, "%s.grplist\tHS %s \"",
((struct user *)b->data)->name, HTYPE);
+ len = 0;
for (; g; g = g->next) {
- fputs(g->lid, lout);
- if (g->next)
- putc(':', lout);
+ if (len + strlen(g->lid) + 1 < MAXHESSIZE) {
+ fputs(g->lid, lout);
+ if (g->next)
+ putc(':', lout);
+ len += strlen(g->lid) + 1;
+ } else {
+ com_err(whoami, 0, "truncated grp list for user %s",
+ ((struct user *)b->data)->name);
+ break;
+ }
}
fputs("\"\n", lout);
}
time_t ftime;
EXEC SQL BEGIN DECLARE SECTION;
char name[17], rp[17], sd[33];
- int flag, ka, pc, rm, rq;
+ int flag1, flag2, ka, pc, rm, rq;
EXEC SQL END DECLARE SECTION;
sprintf(outf, "%s/printcap.db", hesiod_dir);
if (stat(outf, &sb) == 0) {
ftime = sb.st_mtime;
- if (ModDiff (&flag, "printcap", ftime)) exit (MR_DATE);
- if (flag < 0) {
+ if (ModDiff (&flag1, "printcap", ftime)
+ || ModDiff (&flag2, "machine", ftime))
+ exit (MR_DATE);
+ if (flag1 < 0 && flag2 < 0) {
fprintf(stderr, "File printcap.db does not need to be rebuilt.\n");
return(0);
}