#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))
{
EXEC SQL BEGIN DECLARE SECTION;
int id;
- char name[33];
+ char name[41];
EXEC SQL END DECLARE SECTION;
if (machines)
EXEC SQL DECLARE m_cursor CURSOR FOR
SELECT name, mach_id
FROM machine
+ WHERE status = 1
ORDER BY mach_id;
EXEC SQL OPEN m_cursor;
while (1) {
if (sqlca.sqlcode != 0) break;
hash_store(machines, id, strsave(strtrim(name)));
}
- if (sqlca.sqlcode < 0) {
- com_err(whoami, MR_INGRES_ERR, " code %d\n", sqlca.sqlcode);
- critical_alert("DCM", "Hesiod build encountered DATABASE ERROR %d",
- sqlca.sqlcode);
- exit(MR_INGRES_ERR);
- }
+ if (sqlca.sqlcode < 0) db_error(sqlca.sqlcode);
EXEC SQL CLOSE m_cursor;
#ifsql INGRES
EXEC SQL COMMIT;
login, shell);
fprintf(uout, "%d.uid\tHS CNAME %s.passwd\n", uid, login);
}
- if (ptype[0] == 'P' && (mach = hash_lookup(machines, pid))) {
+ if (pid != 0 && (mach = hash_lookup(machines, pid))) {
fprintf(bout, "%s.pobox\tHS %s \"POP %s %s\"\n",
login, HTYPE, mach, login);
}
}
- if (sqlca.sqlcode < 0) {
- com_err(whoami, MR_INGRES_ERR, " code %d\n", sqlca.sqlcode);
- critical_alert("DCM", "Hesiod build encountered DATABASE ERROR %d",
- sqlca.sqlcode);
- exit(MR_INGRES_ERR);
- }
+ if (sqlca.sqlcode < 0) db_error(sqlca.sqlcode);
EXEC SQL CLOSE u_cursor;
#ifsql INGRES
EXEC SQL COMMIT;
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);
}
fix_file(loutf);
return(1);
sqlerr:
- com_err(whoami, MR_INGRES_ERR, " code %d\n", sqlca.sqlcode);
- critical_alert("DCM", "Hesiod build encountered DATABASE ERROR %d",
- sqlca.sqlcode);
- exit(MR_INGRES_ERR);
+ db_error(sqlca.sqlcode);
+ return(0);
}
fix_file(outf);
return(1);
sqlerr:
- com_err(whoami, MR_INGRES_ERR, " code %d\n", sqlca.sqlcode);
- critical_alert("DCM", "Hesiod build encountered DATABASE ERROR %d",
- sqlca.sqlcode);
- exit(MR_INGRES_ERR);
+ db_error(sqlca.sqlcode);
+ return(0);
}
do_cluster()
{
FILE *out;
- char outf[64], outft[64], *mach, machbuf[33], *p;
+ char outf[64], outft[64], *mach, machbuf[41], *p;
struct stat sb;
time_t ftime;
EXEC SQL BEGIN DECLARE SECTION;
int flag1, flag2, flag3, flag4, maxmach, maxclu, mid, cid, id;
- char name[33], label2[17], data[33];
+ char name[41], label2[17], data[33];
EXEC SQL END DECLARE SECTION;
set_mask **machs, *ms, *ps;
int oneclu;
fix_file(outf);
return(1);
sqlerr:
- com_err(whoami, MR_INGRES_ERR, " code %d\n", sqlca.sqlcode);
- critical_alert("DCM", "Hesiod build encountered DATABASE ERROR %d",
- sqlca.sqlcode);
- exit(MR_INGRES_ERR);
+ db_error(sqlca.sqlcode);
+ return(0);
}
fix_file(outf);
return(1);
sqlerr:
- com_err(whoami, MR_INGRES_ERR, " code %d\n", sqlca.sqlcode);
- critical_alert("DCM", "Hesiod build encountered DATABASE ERROR %d",
- sqlca.sqlcode);
- exit(MR_INGRES_ERR);
+ db_error(sqlca.sqlcode);
+ return(0);
}
fix_file(outf);
return(1);
sqlerr:
- com_err(whoami, MR_INGRES_ERR, " code %d\n", sqlca.sqlcode);
- critical_alert("DCM", "Hesiod build encountered DATABASE ERROR %d",
- sqlca.sqlcode);
- exit(MR_INGRES_ERR);
+ db_error(sqlca.sqlcode);
+ return(0);
}
fix_file(outf);
return(1);
sqlerr:
- com_err(whoami, MR_INGRES_ERR, " code %d\n", sqlca.sqlcode);
- critical_alert("DCM", "Hesiod build encountered DATABASE ERROR %d",
- sqlca.sqlcode);
- exit(MR_INGRES_ERR);
+ db_error(sqlca.sqlcode);
+ return(0);
}
do_service()
fix_file(outf);
return(1);
sqlerr:
- com_err(whoami, MR_INGRES_ERR, " code %d\n", sqlca.sqlcode);
- critical_alert("DCM", "Hesiod build encountered DATABASE ERROR %d",
- sqlca.sqlcode);
- exit(MR_INGRES_ERR);
+ db_error(sqlca.sqlcode);
+ return(0);
}