X-Git-Url: http://andersk.mit.edu/gitweb/moira.git/blobdiff_plain/2203d8f9dccaa7f5a0510cc3a88cc44ee5f5e6f8..5d49d8207ad5dc7f5eec54989dcde0b35158f972:/gen/hesiod.pc diff --git a/gen/hesiod.pc b/gen/hesiod.pc index 93d5b2f7..ec3cf1fb 100644 --- a/gen/hesiod.pc +++ b/gen/hesiod.pc @@ -29,7 +29,7 @@ RCSID("$Header$"); #define HTYPE "TXT" #endif #ifndef HCLASS -#define HCLASS "IN" +#define HCLASS "" #endif #ifndef HESIOD_SUBDIR @@ -37,9 +37,10 @@ RCSID("$Header$"); #endif /* max number of bytes of a data record that can be returned in a hesiod - * query. This is 512 - overhead (~66) [derived empirically] + * query. This is 512 - overhead (~78) [derived empirically] + * (it used to be 446 with older versions of bind) */ -#define MAXHESSIZE 446 +#define MAXHESSIZE 434 char hesiod_dir[MAXPATHLEN]; @@ -86,7 +87,6 @@ int do_groups(void); int do_filsys(void); int do_cluster(void); int do_printcap(void); -int do_palladium(void); int do_sloc(void); int do_service(void); @@ -111,7 +111,6 @@ int main(int argc, char **argv) changed += do_filsys(); changed += do_cluster(); changed += do_printcap(); - changed += do_palladium(); changed += do_sloc(); changed += do_service(); changed += do_groups(); @@ -196,37 +195,20 @@ int do_passwd(void) FILE *pout, *uout, *bout; char poutf[MAXPATHLEN], uoutf[MAXPATHLEN], poutft[MAXPATHLEN]; char uoutft[MAXPATHLEN], boutf[MAXPATHLEN], boutft[MAXPATHLEN]; - struct stat psb, usb, bsb; - time_t ftime; struct user *u; char *mach; EXEC SQL BEGIN DECLARE SECTION; char login[USERS_LOGIN_SIZE], shell[USERS_SHELL_SIZE]; char fullname[USERS_FULLNAME_SIZE], oa[USERS_OFFICE_ADDR_SIZE]; char op[USERS_OFFICE_PHONE_SIZE], hp[USERS_HOME_PHONE_SIZE]; - char nn[USERS_NICKNAME_SIZE], ptype[USERS_POTYPE_SIZE]; - int uid, flag1, flag2, id, pid, status; + char nn[USERS_NICKNAME_SIZE]; + int uid, id, pid, iid, mid, status; EXEC SQL END DECLARE SECTION; sprintf(poutf, "%s/passwd.db", hesiod_dir); sprintf(uoutf, "%s/uid.db", hesiod_dir); sprintf(boutf, "%s/pobox.db", hesiod_dir); - if (stat(poutf, &psb) == 0 && stat(uoutf, &usb) == 0 && - stat(boutf, &bsb) == 0) - { - ftime = min(min(psb.st_mtime, usb.st_mtime), bsb.st_mtime); - if (ModDiff (&flag1, "users", ftime) || - ModDiff (&flag2, "machine", ftime)) - exit(MR_DATE); - if (flag1 < 0 && flag2 < 0) - { - fprintf(stderr, "Files passwd.db, uid.db, and pobox.db " - "do not need to be rebuilt.\n"); - return 0; - } - } - sprintf(poutft, "%s~", poutf); pout = fopen(poutft, "w"); if (!pout) @@ -255,15 +237,15 @@ int do_passwd(void) users = create_hash(12001); EXEC SQL DECLARE u_cursor CURSOR FOR SELECT login, unix_uid, shell, fullname, nickname, office_addr, - office_phone, home_phone, users_id, pop_id, potype, status + office_phone, home_phone, users_id, pop_id, imap_id, status FROM users - WHERE status = 1 or status = 5 or status = 6 + WHERE status = 1 OR status = 2 OR status = 5 OR status = 6 ORDER BY users_id; EXEC SQL OPEN u_cursor; while (1) { EXEC SQL FETCH u_cursor INTO :login, :uid, :shell, :fullname, :nn, - :oa, :op, :hp, :id, :pid, :ptype, :status; + :oa, :op, :hp, :id, :pid, :iid, :status; if (sqlca.sqlcode) break; strtrim(login); @@ -277,13 +259,22 @@ int do_passwd(void) strcpy(u->name, login); u->lists = NULL; hash_store(users, id, u); - if (status == 1) + if (status == 1 || status == 2) { fprintf(pout, "%s.passwd\t%s %s \"%s:*:%d:101:%s,%s,%s,%s,%s:/mit/%s:%s\"\n", login, HCLASS, HTYPE, login, uid, fullname, nn, oa, op, hp, login, shell); fprintf(uout, "%d.uid\t%s CNAME %s.passwd\n", uid, HCLASS, login); } + + if (iid != 0) + { + EXEC SQL SELECT mach_id INTO :mid FROM filesys + WHERE filsys_id = :iid AND type = 'IMAP'; + if (sqlca.sqlcode == 0) + pid = mid; + } + if (pid != 0 && (mach = hash_lookup(machines, pid))) { fprintf(bout, "%s.pobox\t%s %s \"POP %s %s\"\n", @@ -316,11 +307,9 @@ int do_groups(void) struct bucket *b, **p; struct grp *g; struct user *u; - struct stat isb, gsb, lsb; - time_t ftime; EXEC SQL BEGIN DECLARE SECTION; char name[LIST_NAME_SIZE]; - int gid, id, lid, flag1, flag2, flag3, len; + int gid, id, lid, len; EXEC SQL END DECLARE SECTION; /* open files */ @@ -328,22 +317,6 @@ int do_groups(void) sprintf(goutf, "%s/group.db", hesiod_dir); sprintf(loutf, "%s/grplist.db", hesiod_dir); - if (stat(ioutf, &isb) == 0 && stat(goutf, &gsb) == 0 && - stat(loutf, &lsb) == 0) - { - ftime = min(isb.st_mtime, min(gsb.st_mtime, lsb.st_mtime)); - if (ModDiff (&flag1, "users", ftime) || - ModDiff (&flag2, "list", ftime) || - ModDiff (&flag3, "imembers", ftime)) - exit(MR_DATE); - if (flag1 < 0 && flag2 < 0 && flag3 < 0) - { - fprintf(stderr, "Files gid.db, group.db and grplist.db " - "do not need to be rebuilt.\n"); - return 0; - } - } - sprintf(buf, "%s~", ioutf); iout = fopen(buf, "w"); if (!iout) @@ -410,8 +383,7 @@ int do_groups(void) EXEC SQL DECLARE u_cursor2 CURSOR FOR SELECT users_id, login FROM users - WHERE status = 1 - ORDER BY users_id; + WHERE status = 1 OR status = 2; EXEC SQL OPEN u_cursor2; while (1) { @@ -427,10 +399,10 @@ int do_groups(void) } EXEC SQL DECLARE i_cursor CURSOR FOR - SELECT list_id, member_id - FROM imembers - WHERE member_type = 'USER' - ORDER BY list_id; + SELECT m.list_id, m.member_id + FROM imembers m, list l + WHERE m.member_type = 'USER' + AND m.list_id = l.list_id AND l.grouplist = 1 AND l.nfsgroup = 1; EXEC SQL OPEN i_cursor; while (1) { @@ -497,8 +469,6 @@ int do_filsys(void) { FILE *out; char outf[MAXPATHLEN], outft[MAXPATHLEN], *mach, *group; - struct stat sb; - time_t ftime; struct save_queue *sq, *sq2; EXEC SQL BEGIN DECLARE SECTION; char name[FILESYS_LABEL_SIZE], type[FILESYS_TYPE_SIZE]; @@ -506,31 +476,11 @@ int do_filsys(void) char mount[FILESYS_MOUNT_SIZE], comments[FILESYS_COMMENTS_SIZE]; char key[FSGROUP_KEY_SIZE]; char aname[ALIAS_NAME_SIZE], trans[ALIAS_TRANS_SIZE]; - int flag1, flag2, flag3, flag4, id, fid; + int flag, id, fid; EXEC SQL END DECLARE SECTION; sprintf(outf, "%s/filsys.db", hesiod_dir); - if (stat(outf, &sb) == 0) - { - ftime = sb.st_mtime; - - if (ModDiff(&flag1, "filesys", ftime)) - exit(MR_DATE); - if (ModDiff(&flag2, "machine", ftime)) - exit(MR_DATE); - if (ModDiff(&flag3, "alias", ftime)) - exit(MR_DATE); - if (ModDiff(&flag4, "fsgroup", ftime)) - exit(MR_DATE); - - if (flag1 < 0 && flag2 < 0 && flag3 < 0 && flag4 < 0) - { - fprintf(stderr, "File filsys.db does not need to be rebuilt.\n"); - return 0; - } - } - sprintf(outft, "%s~", outf); out = fopen(outft, "w"); if (!out) @@ -606,7 +556,7 @@ int do_filsys(void) WHERE f.filsys_id = g.filsys_id AND g.group_id = :fid ORDER BY key, label; EXEC SQL OPEN f_cursor2; - for (flag1 = 1; ; flag1++) + for (flag = 1; ; flag++) { EXEC SQL FETCH f_cursor2 INTO :type, :loc, :id, :access, :mount, :comments, :name, :key; @@ -619,14 +569,14 @@ int do_filsys(void) { fprintf(out, "%s.filsys\t%s %s \"%s %s %s %s %s %d\"\n", group, HCLASS, HTYPE, type, strtrim(loc), mach, - strtrim(access), strtrim(mount), flag1); + strtrim(access), strtrim(mount), flag); } } else if (!strcmp(type, "AFS")) { fprintf(out, "%s.filsys\t%s %s \"AFS %s %s %s %d\"\n", group, HCLASS, HTYPE, strtrim(loc), strtrim(access), - strtrim(mount), flag1); + strtrim(mount), flag); } else if (!strcmp(type, "ERR")) { @@ -714,10 +664,8 @@ int do_cluster(void) FILE *out; char outf[MAXPATHLEN], outft[MAXPATHLEN], *mach; char machbuf[MACHINE_NAME_SIZE], clubuf[CLUSTERS_NAME_SIZE], *p; - struct stat sb; - time_t ftime; EXEC SQL BEGIN DECLARE SECTION; - int flag1, flag2, flag3, flag4, maxmach, maxclu, mid, cid, id; + int maxmach, maxclu, mid, cid, id; char name[CLUSTERS_NAME_SIZE]; char label[SVC_SERV_LABEL_SIZE], data[SVC_SERV_CLUSTER_SIZE]; EXEC SQL END DECLARE SECTION; @@ -725,21 +673,6 @@ int do_cluster(void) sprintf(outf, "%s/cluster.db", hesiod_dir); - if (stat(outf, &sb) == 0) - { - ftime = sb.st_mtime; - if (ModDiff (&flag1, "clusters", ftime) - || ModDiff (&flag2, "machine", ftime) - || ModDiff (&flag3, "mcmap", ftime) - || ModDiff (&flag4, "svc", ftime)) - exit(MR_DATE); - if (flag1 < 0 && flag2 < 0 && flag3 < 0 && flag4 < 0) - { - fprintf(stderr, "File cluster.db does not need to be rebuilt.\n"); - return 0; - } - } - sprintf(outft, "%s~", outf); out = fopen(outft, "w"); if (!out) @@ -899,28 +832,16 @@ int do_printcap(void) { FILE *out; char outf[MAXPATHLEN], outft[MAXPATHLEN]; - struct stat sb; - time_t ftime; EXEC SQL BEGIN DECLARE SECTION; - char name[PRINTCAP_NAME_SIZE], rp[PRINTCAP_RP_SIZE], sd[PRINTCAP_DIR_SIZE]; - int flag1, flag2, ka, pc, rm, rq; + char name[PRINTERS_NAME_SIZE], duplexname[PRINTERS_DUPLEXNAME_SIZE]; + char rp[PRINTERS_RP_SIZE], type[PRINTERS_TYPE_SIZE]; + char duplexrp[PRINTERS_RP_SIZE], pskind[PRINTSERVERS_KIND_SIZE]; + int ka, rm, mc; EXEC SQL END DECLARE SECTION; + char *rmname; sprintf(outf, "%s/printcap.db", hesiod_dir); - if (stat(outf, &sb) == 0) - { - ftime = sb.st_mtime; - 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; - } - } - sprintf(outft, "%s~", outf); out = fopen(outft, "w"); if (!out) @@ -933,128 +854,72 @@ int do_printcap(void) get_mach(); EXEC SQL DECLARE p_cursor2 CURSOR FOR - SELECT name, rp, dir, mach_id, auth, price, quotaserver - FROM printcap; + SELECT p.name, p.duplexname, p.type, p.rp, p.rm, p.ka, p.mc, ps.kind + FROM printers p, printservers ps + WHERE p.rm = ps.mach_id; EXEC SQL OPEN p_cursor2; while (1) { - EXEC SQL FETCH p_cursor2 INTO :name, :rp, :sd, :rm, :ka, :pc, :rq; + EXEC SQL FETCH p_cursor2 INTO :name, :duplexname, :type, + :rp, :rm, :ka, :mc, :pskind; if (sqlca.sqlcode) break; - if (!hash_lookup(machines, rm)) + if (!(rmname = hash_lookup(machines, rm))) continue; strtrim(name); if (!valid(name)) continue; strtrim(rp); - strtrim(sd); - fprintf(out, "%s.pcap\t%s %s \"%s:rp=%s:rm=%s:sd=%s:ka#%d:pc#%d", - name, HCLASS, HTYPE, name, rp, (char *)hash_lookup(machines, rm), - sd, ka, pc); - if (rq && hash_lookup(machines, rq)) - fprintf(out, ":rq=%s\"\n", (char *)hash_lookup(machines, rq)); - else - fputs("\"\n", out); - } - EXEC SQL CLOSE p_cursor2; - - EXEC SQL COMMIT; - - if (fclose(out)) - { - fprintf(stderr, "Unsuccessful close of pcap.db\n"); - exit(MR_CCONFIG); - } - fix_file(outf); - return 1; -sqlerr: - db_error(sqlca.sqlcode); - return 0; -} - - -int do_palladium(void) -{ - FILE *out; - char outf[MAXPATHLEN], outft[MAXPATHLEN]; - struct stat sb; - time_t ftime; - EXEC SQL BEGIN DECLARE SECTION; - char name[PALLADIUM_NAME_SIZE], trans[ALIAS_TRANS_SIZE]; - char aname[ALIAS_NAME_SIZE]; - int flag, flag1, identifier, rm; - EXEC SQL END DECLARE SECTION; - - sprintf(outf, "%s/palladium.db", hesiod_dir); + fprintf(out, "%s.pcap\t%s %s \"%s:rp=%s:rm=%s:ka#%d:mc#%d:", + name, HCLASS, HTYPE, name, rp, rmname, ka, mc); - if (stat(outf, &sb) == 0) - { - ftime = sb.st_mtime; - if ((ModDiff (&flag, "palladium", ftime)) || - (ModDiff (&flag1, "alias", ftime))) - exit(MR_DATE); - if (flag < 0 && flag1 < 0) + strtrim(pskind); + if (!strcmp(pskind, "BSD")) + fprintf(out, "auth=none:remote_support=RQM:"); + else if (!strcmp(pskind, "ATHENA")) { - fprintf(stderr, "File palladium.db does not need to be rebuilt.\n"); - return 0; + fprintf(out, "auth=%s:az:remote_support=RQM:", + ka ? "kerberos4" : "none"); } - } + else if (!strcmp(pskind, "LPRNG")) + fprintf(out, "auth=kerberos5:xn:"); - sprintf(outft, "%s~", outf); - out = fopen(outft, "w"); - if (!out) - { - perror("cannot open palladium.db for write"); - exit(MR_OCONFIG); - } + fputs("\"\n", out); - fprintf(stderr, "Building palladium.db\n"); - get_mach(); - - EXEC SQL DECLARE p_cursor3 CURSOR FOR - SELECT name, identifier, mach_id - FROM palladium; - EXEC SQL OPEN p_cursor3; - while (1) - { - EXEC SQL FETCH p_cursor3 INTO :name, :identifier, :rm; - if (sqlca.sqlcode) - break; - if (!hash_lookup(machines, rm)) - break; - strtrim(name); - if (!valid(name)) + strtrim(duplexname); + if (!valid(duplexname)) continue; - fprintf(out, "%s.palladium\t%s %s \"%s %d %s interface directory\"\n", - name, HCLASS, HTYPE, (char *)hash_lookup(machines, rm), - identifier, name); - } - EXEC SQL CLOSE p_cursor3; + if (!strcmp(strtrim(type), "ALIAS")) + { + EXEC SQL SELECT duplexname INTO :duplexrp + FROM printers WHERE name = :rp; + strtrim(duplexrp); + } + else + strcpy(duplexrp, duplexname); + fprintf(out, "%s.pcap\t%s %s \"%s:rp=%s:rm=%s:ka#%d:mc#%d:", + duplexname, HCLASS, HTYPE, duplexname, duplexrp, + rmname, ka, mc); + + if (!strcmp(pskind, "BSD")) + fprintf(out, "auth=none:remote_support=RQM:"); + else if (!strcmp(pskind, "ATHENA")) + { + fprintf(out, "auth=%s:az:remote_support=RQM:", + ka ? "kerberos4" : "none"); + } + else if (!strcmp(pskind, "LPRNG")) + fprintf(out, "auth=kerberos5:xn:"); - EXEC SQL DECLARE a_cursor2 CURSOR FOR - SELECT name, trans - FROM alias - WHERE type = 'PALLADIUM'; - EXEC SQL OPEN a_cursor2; - while (1) - { - EXEC SQL FETCH a_cursor2 INTO :aname, :trans; - if (sqlca.sqlcode) - break; - strtrim(aname); - if (!valid(aname)) - continue; - strtrim(trans); - fprintf(out, "%s.palladium\t%s %s \"%s\"\n", - aname, HCLASS, HTYPE, trans); + fputs("\"\n", out); } - EXEC SQL CLOSE a_cursor2; + EXEC SQL CLOSE p_cursor2; EXEC SQL COMMIT; if (fclose(out)) { - fprintf(stderr, "Unsuccessful close of palladium.db\n"); + fprintf(stderr, "Unsuccessful close of pcap.db\n"); exit(MR_CCONFIG); } fix_file(outf); @@ -1069,28 +934,13 @@ int do_sloc(void) { FILE *out; char outf[MAXPATHLEN], outft[MAXPATHLEN], *mach; - struct stat sb; - time_t ftime; EXEC SQL BEGIN DECLARE SECTION; char service[SERVERHOSTS_SERVICE_SIZE]; - int flag1, flag2, id; + int id; EXEC SQL END DECLARE SECTION; sprintf(outf, "%s/sloc.db", hesiod_dir); - if (stat(outf, &sb) == 0) - { - ftime = sb.st_mtime; - if ((ModDiff (&flag1, "serverhosts", ftime)) || - (ModDiff (&flag2, "machine", ftime))) - exit(MR_DATE); - if (flag1 < 0 && flag2 < 0) - { - fprintf(stderr, "File sloc.db does not need to be rebuilt.\n"); - return 0; - } - } - sprintf(outft, "%s~", outf); out = fopen(outft, "w"); if (!out) @@ -1137,28 +987,14 @@ int do_service(void) { FILE *out; char outf[MAXPATHLEN], outft[MAXPATHLEN]; - struct stat sb; - time_t ftime; EXEC SQL BEGIN DECLARE SECTION; char service[SERVICES_NAME_SIZE], protocol[SERVICES_PROTOCOL_SIZE]; char aname[ALIAS_NAME_SIZE], trans[ALIAS_TRANS_SIZE]; - int port, flag1; + int port; EXEC SQL END DECLARE SECTION; sprintf(outf, "%s/service.db", hesiod_dir); - if (stat(outf, &sb) == 0) - { - ftime = sb.st_mtime; - if (ModDiff (&flag1, "services", ftime)) - exit(MR_DATE); - if (flag1 < 0) - { - fprintf(stderr, "File service.db does not need to be rebuilt.\n"); - return 0; - } - } - sprintf(outft, "%s~", outf); out = fopen(outft, "w"); if (!out)