#include <mit-copyright.h>
#include <stdio.h>
-#include <sms.h>
-#include <sms_app.h>
+#include <moira.h>
+#include <moira_site.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <ctype.h>
+#ifdef ATHENA
+#define HTYPE "UNSPECA"
+#else
+#define HTYPE "TXT"
+#endif
+
char hesiod_dir[64];
#define min(x,y) ((x) < (y) ? (x) : (y))
struct grp {
struct grp *next;
- int id;
+ char *lid;
};
struct user {
char name[9];
if (argc > 2) {
fprintf(stderr, "usage: %s [outfile]\n", argv[0]);
- exit(SMS_ARGS);
+ exit(MR_ARGS);
}
IIseterr(ingerr);
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);
}
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);
}
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");
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);
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");
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);
## 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
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);
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");
*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));
*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);
if (fclose(out)) {
fprintf(stderr, "Unsuccessful close of filsys.db\n");
- exit(SMS_CCONFIG);
+ exit(MR_CCONFIG);
}
fix_file(outf);
return(1);
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");
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);
## }
}
}
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++) {
machbuf, name);
else
fprintf(out,
- "%s.cluster\tHS CNAME smsinternal-%d.cluster\n",
+ "%s.cluster\tHS CNAME mrinternal-%d.cluster\n",
machbuf, mid);
}
}
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);
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);
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);
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");
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);
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");
## 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);
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");
## 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
if (fclose(out)) {
fprintf(stderr, "Unsuccessful close of service.db\n");
- exit(SMS_CCONFIG);
+ exit(MR_CCONFIG);
}
fix_file(outf);
return(1);