* query. This is 512 - overhead (~78) [derived empirically]
* (it used to be 446 with older versions of bind)
*/
-#define MAXHESSIZE 434
+#define MAXHESSIZE 256
char hesiod_dir[MAXPATHLEN];
for (sawdot = 1; *name; name++)
{
+ if (*name == '$')
+ return 0;
if (*name == '.')
{
if (sawdot)
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], potype[USERS_POTYPE_SIZE];
+ int uid, id, pid, iid, eid, 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)
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, potype, pop_id, imap_id, exchange_id,
+ status
FROM users
WHERE status = 1 OR status = 2 OR status = 5 OR status = 6
ORDER BY users_id;
while (1)
{
EXEC SQL FETCH u_cursor INTO :login, :uid, :shell, :fullname, :nn,
- :oa, :op, :hp, :id, :pid, :ptype, :status;
+ :oa, :op, :hp, :id, :potype, :pid, :iid, :eid, :status;
if (sqlca.sqlcode)
break;
strtrim(login);
dequote(op);
dequote(hp);
dequote(shell);
+ dequote(potype);
u = malloc(sizeof(struct user));
strcpy(u->name, login);
u->lists = NULL;
op, hp, login, shell);
fprintf(uout, "%d.uid\t%s CNAME %s.passwd\n", uid, HCLASS, login);
}
- if (pid != 0 && (mach = hash_lookup(machines, pid)))
+
+ if (eid != 0)
+ {
+ /* eid will be for EXCHANGE.MIT.EDU, but we need to convert it to
+ * IMAP.EXCHANGE.MIT.EDU.
+ */
+ EXEC SQL SELECT mach_id INTO :eid FROM machine WHERE
+ name = 'IMAP.EXCHANGE.MIT.EDU';
+ if (sqlca.sqlcode == 0)
+ pid = eid;
+ }
+
+ 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 ((strcmp(potype, "NONE") != 0) && pid != 0 &&
+ (mach = hash_lookup(machines, pid)))
{
fprintf(bout, "%s.pobox\t%s %s \"POP %s %s\"\n",
login, HCLASS, HTYPE, mach, login);
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 */
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)
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)
{
}
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)
{
{
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];
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)
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;
{
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"))
{
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;
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)
{
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], pskind[PRINTSERVERS_KIND_SIZE];
- int flag1, flag2, ka, rm;
+ 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, "printers", ftime)
- || ModDiff (&flag2, "printservers", 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)
get_mach();
EXEC SQL DECLARE p_cursor2 CURSOR FOR
- SELECT p.name, p.duplexname, p.type, p.rp, p.rm, p.ka, ps.kind
+ 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, :pskind;
+ :rp, :rm, :ka, :mc, :pskind;
if (sqlca.sqlcode)
break;
if (!(rmname = hash_lookup(machines, rm)))
if (!valid(name))
continue;
strtrim(rp);
- fprintf(out, "%s.pcap\t%s %s \"%s:rp=%s:rm=%s:ka#%d:",
- name, HCLASS, HTYPE, name, rp, rmname, ka);
+ 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"))
}
else
strcpy(duplexrp, duplexname);
- fprintf(out, "%s.pcap\t%s %s \"%s:rp=%s:rm=%s:ka#%d:",
+ fprintf(out, "%s.pcap\t%s %s \"%s:rp=%s:rm=%s:ka#%d:mc#%d:",
duplexname, HCLASS, HTYPE, duplexname, duplexrp,
- rmname, ka);
+ rmname, ka, mc);
if (!strcmp(pskind, "BSD"))
fprintf(out, "auth=none:remote_support=RQM:");
{
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)
{
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)