X-Git-Url: http://andersk.mit.edu/gitweb/moira.git/blobdiff_plain/ed9a436ff7ddfc2627f523d1273ea73dd9aa265a..6d400ea1c7eb8f7ea9da43e59082e51731bb3be6:/gen/hesiod.pc diff --git a/gen/hesiod.pc b/gen/hesiod.pc index f8459f33..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]; @@ -194,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) @@ -253,7 +237,7 @@ 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 = 2 OR status = 5 OR status = 6 ORDER BY users_id; @@ -261,7 +245,7 @@ int do_passwd(void) 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); @@ -275,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", @@ -314,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 */ @@ -326,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) @@ -408,8 +383,7 @@ int do_groups(void) EXEC SQL DECLARE u_cursor2 CURSOR FOR SELECT users_id, login FROM users - WHERE status = 1 OR status = 2 - ORDER BY users_id; + WHERE status = 1 OR status = 2; EXEC SQL OPEN u_cursor2; while (1) { @@ -425,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) { @@ -495,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]; @@ -504,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) @@ -604,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; @@ -617,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")) { @@ -712,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; @@ -723,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) @@ -897,31 +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[PRINTERS_NAME_SIZE], duplexname[PRINTERS_DUPLEXNAME_SIZE]; char rp[PRINTERS_RP_SIZE], type[PRINTERS_TYPE_SIZE]; - char duplexrp[PRINTERS_RP_SIZE]; - int flag1, flag2, ka, pc, rm, rq; + char duplexrp[PRINTERS_RP_SIZE], pskind[PRINTSERVERS_KIND_SIZE]; + int ka, rm, mc; EXEC SQL END DECLARE SECTION; - char *rmname, *rqname; + 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) @@ -934,28 +854,37 @@ int do_printcap(void) get_mach(); EXEC SQL DECLARE p_cursor2 CURSOR FOR - SELECT name, duplexname, type, rp, rm, ka, pc, rq - FROM printers; + 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, :duplexname, :type, - :rp, :rm, :ka, :pc, :rq; + :rp, :rm, :ka, :mc, :pskind; if (sqlca.sqlcode) break; if (!(rmname = hash_lookup(machines, rm))) continue; - rqname = rq ? hash_lookup(machines, rq) : NULL; strtrim(name); if (!valid(name)) continue; strtrim(rp); - fprintf(out, "%s.pcap\t%s %s \"%s:rp=%s:rm=%s:ka#%d:pc#%d", - name, HCLASS, HTYPE, name, rp, rmname, ka, pc); - if (rqname) - fprintf(out, ":rq=%s\"\n", rqname); - else - fputs("\"\n", out); + fprintf(out, "%s.pcap\t%s %s \"%s:rp=%s:rm=%s:ka#%d:mc#%d:", + name, HCLASS, HTYPE, name, rp, rmname, ka, mc); + + strtrim(pskind); + 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:"); + + fputs("\"\n", out); strtrim(duplexname); if (!valid(duplexname)) @@ -968,13 +897,21 @@ int do_printcap(void) } else strcpy(duplexrp, duplexname); - fprintf(out, "%s.pcap\t%s %s \"%s:rp=%s:rm=%s:ka#%d:pc#%d", + fprintf(out, "%s.pcap\t%s %s \"%s:rp=%s:rm=%s:ka#%d:mc#%d:", duplexname, HCLASS, HTYPE, duplexname, duplexrp, - rmname, ka, pc); - if (rqname) - fprintf(out, ":rq=%s\"\n", rqname); - else - fputs("\"\n", out); + 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:"); + + fputs("\"\n", out); } EXEC SQL CLOSE p_cursor2; @@ -997,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) @@ -1065,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)