X-Git-Url: http://andersk.mit.edu/gitweb/moira.git/blobdiff_plain/d652788ed4e18f82197e192e46b0ef199f487640..67805159a972397342c342ee735c8acd640e1399:/gen/hesiod.qc diff --git a/gen/hesiod.qc b/gen/hesiod.qc index 77b5387c..c56630ae 100644 --- a/gen/hesiod.qc +++ b/gen/hesiod.qc @@ -11,14 +11,20 @@ #include #include -#include -#include +#include +#include #include #include #include #include +#ifdef ATHENA +#define HTYPE "UNSPECA" +#else +#define HTYPE "TXT" +#endif + char hesiod_dir[64]; #define min(x,y) ((x) < (y) ? (x) : (y)) @@ -28,7 +34,7 @@ char *whoami = "hesiod.gen"; struct grp { struct grp *next; - int id; + char *lid; }; struct user { char name[9]; @@ -49,7 +55,7 @@ char **argv; if (argc > 2) { fprintf(stderr, "usage: %s [outfile]\n", argv[0]); - exit(SMS_ARGS); + exit(MR_ARGS); } IIseterr(ingerr); @@ -73,17 +79,17 @@ char **argv; if (!changed) { fprintf(stderr, "No files updated.\n"); if (argc == 2 && stat(argv[1], &sb) == 0) - exit(SMS_NO_CHANGE); + exit(MR_NO_CHANGE); } if (argc == 2) { fprintf(stderr, "Building tar file.\n"); sprintf(cmd, "cd %s; tar cf %s .", hesiod_dir, argv[1]); if (system(cmd)) - exit(SMS_TAR_FAIL); + exit(MR_TAR_FAIL); } - exit(SMS_SUCCESS); + exit(MR_SUCCESS); } @@ -101,12 +107,12 @@ static int ingerr(num) switch (*num) { case INGRES_DEADLOCK: - ingres_errno = SMS_DEADLOCK; + ingres_errno = MR_DEADLOCK; break; default: - ingres_errno = SMS_INGRES_ERR; + ingres_errno = MR_INGRES_ERR; } - com_err(whoami, SMS_INGRES_ERR, " code %d\n", *num); + com_err(whoami, MR_INGRES_ERR, " code %d\n", *num); critical_alert("DCM", "Hesiod build encountered INGRES ERROR %d", *num); exit(ingres_errno); } @@ -161,19 +167,19 @@ do_passwd() pout = fopen(poutft, "w"); if (!pout) { perror("cannot open passwd.db~ for write"); - exit(SMS_OCONFIG); + exit(MR_OCONFIG); } sprintf(uoutft, "%s~", uoutf); uout = fopen(uoutft, "w"); if (!uout) { perror("cannot open uid.db~ for write"); - exit(SMS_OCONFIG); + exit(MR_OCONFIG); } sprintf(boutft, "%s~", boutf); bout = fopen(boutft, "w"); if (!bout) { perror("cannot open pobox.db for write"); - exit(SMS_OCONFIG); + exit(MR_OCONFIG); } fprintf(stderr, "Building passwd.db, uid.db, and pobox.db\n"); @@ -197,18 +203,18 @@ do_passwd() strcpy(u->name, login); u->lists = NULL; hash_store(users, id, u); - fprintf(pout, "%s.passwd\tHS UNSPECA \"%s:*:%d:101:%s,%s,%s,%s,%s:/mit/%s:%s\"\n", - login, login, uid, fullname, nn, oa, op, hp, login, shell); + fprintf(pout, "%s.passwd\tHS %s \"%s:*:%d:101:%s,%s,%s,%s,%s:/mit/%s:%s\"\n", + login, HTYPE, login, uid, fullname, nn, oa, op, hp, login, shell); fprintf(uout, "%d.uid\tHS CNAME %s.passwd\n", uid, login); if (ptype[0] == 'P' && (mach = hash_lookup(machines, pid))) { - fprintf(bout, "%s.pobox\tHS UNSPECA \"POP %s %s\"\n", - login, mach, login); + fprintf(bout, "%s.pobox\tHS %s \"POP %s %s\"\n", + login, HTYPE, mach, login); } ## } if (fclose(pout) || fclose(uout) || fclose(bout)) { fprintf(stderr, "Unsuccessful file close of passwd.db, uid.db, or pobox.db\n"); - exit(SMS_CCONFIG); + exit(MR_CCONFIG); } fix_file(poutf); fix_file(uoutf); @@ -254,19 +260,19 @@ do_groups() iout = fopen(buf, "w"); if (!iout) { perror("cannot open gid.db for write"); - exit(SMS_OCONFIG); + exit(MR_OCONFIG); } sprintf(buf, "%s~", goutf); gout = fopen(buf, "w"); if (!gout) { perror("cannot open group.db for write"); - exit(SMS_OCONFIG); + exit(MR_OCONFIG); } sprintf(buf, "%s~", loutf); lout = fopen(buf, "w"); if (!lout) { perror("cannot open grplist.db for write"); - exit(SMS_OCONFIG); + exit(MR_OCONFIG); } fprintf(stderr, "Building gid.db, group.db, and grplist.db\n"); @@ -288,8 +294,8 @@ do_groups() sprintf(buf, "%s:%d", name, gid); hash_store(groups, lid, strsave(buf)); fprintf(iout, "%d.gid\tHS CNAME %s.group\n", gid, name); - fprintf(gout, "%s.group\tHS UNSPECA \"%s:*:%d:\"\n", - name, name, gid); + fprintf(gout, "%s.group\tHS %s \"%s:*:%d:\"\n", + name, HTYPE, name, gid); ## } fflush(iout); @@ -309,12 +315,12 @@ do_groups() ## repeat retrieve (lid = m.list_id, id = m.member_id) ## where m.member_type = "USER" { - if ((hash_lookup(groups, lid) != NULL) && + if (((l = hash_lookup(groups, lid)) != NULL) && (u = (struct user *) hash_lookup(users, id))) { g = (struct grp *) malloc(sizeof(struct grp)); g->next = u->lists; u->lists = g; - g->id = lid; + g->lid = l; } ## } ## end transaction @@ -323,21 +329,20 @@ do_groups() for (b = *p; b; b = b->next) { if ((g = ((struct user *)b->data)->lists) == NULL) continue; - fprintf(lout, "%s.grplist\tHS UNSPECA \"", - ((struct user *)b->data)->name); - for (; g; g = g->next) - if (l = hash_lookup(groups, g->id)) { - fputs(l, lout); - if (g->next) - putc(':', lout); - } + fprintf(lout, "%s.grplist\tHS %s \"", + ((struct user *)b->data)->name, HTYPE); + for (; g; g = g->next) { + fputs(g->lid, lout); + if (g->next) + putc(':', lout); + } fputs("\"\n", lout); } } if (fclose(iout) || fclose(gout) || fclose(lout)) { fprintf(stderr, "Unsuccessful close of gid.db, group.db, or grplist.db\n"); - exit(SMS_CCONFIG); + exit(MR_CCONFIG); } fix_file(ioutf); fix_file(goutf); @@ -382,7 +387,7 @@ do_filsys() out = fopen(outft, "w"); if (!out) { perror("cannot open filsys.db for write"); - exit(SMS_OCONFIG); + exit(MR_OCONFIG); } fprintf(stderr, "Building filsys.db\n"); @@ -403,17 +408,17 @@ do_filsys() *p++ = *mach; } *p = 0; - fprintf(out, "%s.filsys\tHS UNSPECA \"%s %s %s %s %s\"\n", - strtrim(name), type, strtrim(loc), machbuf, + fprintf(out, "%s.filsys\tHS %s \"%s %s %s %s %s\"\n", + strtrim(name), HTYPE, type, strtrim(loc), machbuf, strtrim(access), strtrim(mount)); } } else if (!strcmp(type, "AFS")) { - fprintf(out, "%s.filsys\tHS UNSPECA \"AFS %s %s %s\"\n", - strtrim(name), strtrim(loc), strtrim(access), + fprintf(out, "%s.filsys\tHS %s \"AFS %s %s %s\"\n", + strtrim(name), HTYPE, strtrim(loc), strtrim(access), strtrim(mount)); } else if (!strcmp(type, "ERR")) { - fprintf(out, "%s.filsys\tHS UNSPECA \"ERR %s\"\n", - name, strtrim(comments)); + fprintf(out, "%s.filsys\tHS %s \"ERR %s\"\n", + name, HTYPE, strtrim(comments)); } else if (!strcmp(type, "FSGROUP")) { sprintf(trans, "%s:%d", strtrim(name), fid); sq_save_data(sq, strsave(trans)); @@ -439,16 +444,17 @@ do_filsys() *p++ = *mach; } *p = 0; - fprintf(out, "%s.filsys\tHS UNSPECA \"%s %s %s %s %s\"\n", - group, type, strtrim(loc), machbuf, + fprintf(out, "%s.filsys\tHS %s \"%s %s %s %s %s\"\n", + group, HTYPE, type, strtrim(loc), machbuf, strtrim(access), strtrim(mount)); } } else if (!strcmp(type, "AFS")) { - fprintf(out, "%s.filsys\tHS UNSPECA \"AFS %s %s %s\"\n", - group, strtrim(loc), strtrim(access), strtrim(mount)); + fprintf(out, "%s.filsys\tHS %s \"AFS %s %s %s\"\n", + group, HTYPE, strtrim(loc), strtrim(access), + strtrim(mount)); } else if (!strcmp(type, "ERR")) { - fprintf(out, "%s.filsys\tHS UNSPECA \"ERR %s\"\n", - group, strtrim(comments)); + fprintf(out, "%s.filsys\tHS %s \"ERR %s\"\n", + group, HTYPE, strtrim(comments)); } ## } free(group); @@ -463,7 +469,7 @@ do_filsys() if (fclose(out)) { fprintf(stderr, "Unsuccessful close of filsys.db\n"); - exit(SMS_CCONFIG); + exit(MR_CCONFIG); } fix_file(outf); return(1); @@ -535,7 +541,7 @@ do_cluster() out = fopen(outft, "w"); if (!out) { perror("cannot open cluster.db for write"); - exit(SMS_OCONFIG); + exit(MR_OCONFIG); } fprintf(stderr, "Building cluster.db\n"); @@ -575,8 +581,8 @@ do_cluster() strtrim(label); strtrim(data); fprintf(out, - "smsinternal-%d.cluster\tHS UNSPECA \"%s %s\"\n", - mid, label, data); + "mrinternal-%d.cluster\tHS %s \"%s %s\"\n", + mid, HTYPE, label, data); ## } } } @@ -596,7 +602,7 @@ do_cluster() fprintf(out, "%s.cluster\tHS CNAME %s.cluster\n", machbuf, name); else - fprintf(out, "%s.cluster\tHS CNAME smsinternal-%d.cluster\n", + fprintf(out, "%s.cluster\tHS CNAME mrinternal-%d.cluster\n", machbuf, mid); } for (id = mid + 1; id < maxmach; id++) { @@ -612,7 +618,7 @@ do_cluster() machbuf, name); else fprintf(out, - "%s.cluster\tHS CNAME smsinternal-%d.cluster\n", + "%s.cluster\tHS CNAME mrinternal-%d.cluster\n", machbuf, mid); } } @@ -626,15 +632,15 @@ do_cluster() strtrim(name); strtrim(label); strtrim(data); - fprintf(out, "%s.cluster\tHS UNSPECA \"%s %s\"\n", - name, label, data); + fprintf(out, "%s.cluster\tHS %s \"%s %s\"\n", + name, HTYPE, label, data); ## } ## end transaction free(machs); if (fclose(out)) { fprintf(stderr, "Unsuccessful close of cluster.db\n"); - exit(SMS_CCONFIG); + exit(MR_CCONFIG); } fix_file(outf); return(1); @@ -647,8 +653,8 @@ do_printcap() char outf[64], outft[64]; struct stat sb; time_t ftime; -## char name[17], rp[17], sd[33], rm[33], *filetime; -## int flag; +## char name[17], rp[17], sd[33], rm[33], rq[33], *filetime; +## int flag, ka, pc; sprintf(outf, "%s/printcap.db", hesiod_dir); @@ -667,25 +673,32 @@ do_printcap() out = fopen(outft, "w"); if (!out) { perror("cannot open printcap.db for write"); - exit(SMS_OCONFIG); + exit(MR_OCONFIG); } fprintf(stderr, "Building printcap.db\n"); ## range of p is printcap -## retrieve (name = p.#name, rp = p.#rp, sd = p.dir, rm = machine.#name) -## where machine.mach_id = p.mach_id { +## range of m is machine +## retrieve (name = p.#name, rp = p.#rp, sd = p.dir, rm = machine.#name, +## ka = p.auth, pc = p.price, rq = m.#name) +## where machine.mach_id = p.mach_id and m.mach_id = p.quotaserver { strtrim(name); strtrim(rp); strtrim(sd); strtrim(rm); - fprintf(out, "%s.pcap\tHS UNSPECA \"%s:rp=%s:rm=%s:sd=%s\"\n", - name, name, rp, rm, sd); + strtrim(rq); + fprintf(out, "%s.pcap\tHS %s \"%s:rp=%s:rm=%s:sd=%s:ka#%d:pc#%d", + name, HTYPE, name, rp, rm, sd, ka, pc); + if (strcmp(rq, "[NONE]")) + fprintf(out, ":rq=%s\"\n", rq); + else + fputs("\"\n", out); ## } if (fclose(out)) { fprintf(stderr, "Unsuccessful close of pcap.db\n"); - exit(SMS_CCONFIG); + exit(MR_CCONFIG); } fix_file(outf); return(1); @@ -720,7 +733,7 @@ do_palladium() out = fopen(outft, "w"); if (!out) { perror("cannot open palladium.db for write"); - exit(SMS_OCONFIG); + exit(MR_OCONFIG); } fprintf(stderr, "Building palladium.db\n"); @@ -731,19 +744,19 @@ do_palladium() strtrim(name); strtrim(rm); fprintf(out, - "%s.palladium\tHS UNSPECA \"%s %d %s interface directory\"\n", - name, rm, ident, name); + "%s.palladium\tHS %s \"%s %d %s interface directory\"\n", + name, HTYPE, rm, ident, name); ## } ## range of a is alias ## retrieve (name = a.#name, trans = a.#trans) where a.#type = "PALLADIUM" { strtrim(name); strtrim(trans); - fprintf(out, "%s.palladium\tHS UNSPECA \"%s\"\n", name, trans); + fprintf(out, "%s.palladium\tHS %s \"%s\"\n", name, HTYPE, trans); ## } if (fclose(out)) { fprintf(stderr, "Unsuccessful close of palladium.db\n"); - exit(SMS_CCONFIG); + exit(MR_CCONFIG); } fix_file(outf); return(1); @@ -778,7 +791,7 @@ do_sloc() out = fopen(outft, "w"); if (!out) { perror("cannot open sloc.db for write"); - exit(SMS_OCONFIG); + exit(MR_OCONFIG); } fprintf(stderr, "Building sloc.db\n"); @@ -789,12 +802,12 @@ do_sloc() ## sort by #service { strtrim(service); if (mach = hash_lookup(machines, id)) - fprintf(out, "%s.sloc\tHS UNSPECA %s\n", service, mach); + fprintf(out, "%s.sloc\tHS %s %s\n", service, HTYPE, mach); ## } if (fclose(out)) { fprintf(stderr, "Unsuccessful close of sloc.db\n"); - exit(SMS_CCONFIG); + exit(MR_CCONFIG); } fix_file(outf); @@ -827,7 +840,7 @@ do_service() out = fopen(outft, "w"); if (!out) { perror("cannot open service.db for write"); - exit(SMS_OCONFIG); + exit(MR_OCONFIG); } fprintf(stderr, "Building service.db\n"); @@ -837,8 +850,8 @@ do_service() ## port = s.#port) { strtrim(service); strtrim(protocol); - fprintf(out, "%s.service\tHS UNSPECA \"%s %s %d\"\n", - service, service, protocol, port); + fprintf(out, "%s.service\tHS %s \"%s %s %d\"\n", + service, HTYPE, service, protocol, port); ## } ## range of a is alias @@ -850,7 +863,7 @@ do_service() if (fclose(out)) { fprintf(stderr, "Unsuccessful close of service.db\n"); - exit(SMS_CCONFIG); + exit(MR_CCONFIG); } fix_file(outf); return(1);