]> andersk Git - moira.git/blobdiff - gen/hesiod.pc
EXCHANGE changes.
[moira.git] / gen / hesiod.pc
index d014ad99a15152b116287698d399860a82c3d86d..c07fa43ff1341698880d95797390a4f691735669 100644 (file)
@@ -29,7 +29,7 @@ RCSID("$Header$");
 #define HTYPE "TXT"
 #endif
 #ifndef HCLASS
-#define HCLASS "IN"
+#define HCLASS ""
 #endif
 
 #ifndef HESIOD_SUBDIR
@@ -37,11 +37,12 @@ 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 256
 
-char hesiod_dir[64];
+char hesiod_dir[MAXPATHLEN];
 
 #define min(x, y)      ((x) < (y) ? (x) : (y))
 struct hash *machines = NULL;
@@ -54,7 +55,7 @@ struct grp {
   char *lid;
 };
 struct user {
-  char name[9];
+  char name[USERS_LOGIN_SIZE];
   struct grp *lists;
 };
 
@@ -79,13 +80,13 @@ typedef long        set_mask;
 
 void get_mach(void);
 int nbitsset(set_mask *set);
+int valid(char *name);
 
 int do_passwd(void);
 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);
 
@@ -110,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();
@@ -138,7 +138,7 @@ void get_mach(void)
 {
   EXEC SQL BEGIN DECLARE SECTION;
   int id;
-  char name[41];
+  char name[MACHINE_NAME_SIZE];
   EXEC SQL END DECLARE SECTION;
 
   if (machines)
@@ -156,7 +156,10 @@ void get_mach(void)
       EXEC SQL FETCH m_cursor INTO :name, :id;
       if (sqlca.sqlcode)
        break;
-      hash_store(machines, id, strdup(strtrim(name)));
+      strtrim(name);
+      if (!valid(name))
+       continue;
+      hash_store(machines, id, strdup(name));
     }
   if (sqlca.sqlcode < 0)
     db_error(sqlca.sqlcode);
@@ -165,39 +168,49 @@ void get_mach(void)
 }
 
 
+/* Determine whether or not a name is a valid DNS label.
+   (Can't start or end with . or have two .s in a row) */
+int valid(char *name)
+{
+  int sawdot;
+
+  for (sawdot = 1; *name; name++)
+    {
+      if (*name == '$')
+       return 0;
+      if (*name == '.')
+       {
+         if (sawdot)
+           return 0;
+         else
+           sawdot = 1;
+       }
+      else
+       sawdot = 0;
+    }
+  return !sawdot;
+}
+
+
 int do_passwd(void)
 {
   FILE *pout, *uout, *bout;
-  char poutf[64], uoutf[64], poutft[64], uoutft[64], boutf[64], boutft[64];
-  struct stat psb, usb, bsb;
-  time_t ftime;
+  char poutf[MAXPATHLEN], uoutf[MAXPATHLEN], poutft[MAXPATHLEN];
+  char uoutft[MAXPATHLEN], boutf[MAXPATHLEN], boutft[MAXPATHLEN];
   struct user *u;
   char *mach;
   EXEC SQL BEGIN DECLARE SECTION;
-  char login[9], shell[33], fullname[33], oa[17], op[13], hp[17];
-  char nn[17], ptype[9];
-  int uid, flag1, flag2, id, pid, status;
+  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], 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)
@@ -226,15 +239,16 @@ 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, potype, pop_id, imap_id, exchange_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, :potype, :pid, :iid, :eid, :status;
       if (sqlca.sqlcode)
        break;
       strtrim(login);
@@ -244,18 +258,40 @@ int do_passwd(void)
       dequote(op);
       dequote(hp);
       dequote(shell);
+      dequote(potype);
       u = malloc(sizeof(struct user));
       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 (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);
@@ -281,16 +317,15 @@ int do_passwd(void)
 int do_groups(void)
 {
   FILE *iout, *gout, *lout;
-  char ioutf[64], goutf[64], loutf[64], buf[2048], *l;
+  char ioutf[MAXPATHLEN], goutf[MAXPATHLEN], loutf[MAXPATHLEN];
+  char buf[MAXPATHLEN], *l;
   struct hash *groups;
   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[33];
-  int gid, id, lid, flag1, flag2, flag3, len;
+  char name[LIST_NAME_SIZE];
+  int gid, id, lid, len;
   EXEC SQL END DECLARE SECTION;
 
   /* open files */
@@ -298,22 +333,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)
@@ -354,10 +373,14 @@ int do_groups(void)
   EXEC SQL OPEN l_cursor;
   while (1)
     {
+      char buf[LIST_NAME_SIZE + 10];
+
       EXEC SQL FETCH l_cursor INTO :name, :gid, :lid;
       if (sqlca.sqlcode)
        break;
       strtrim(name);
+      if (!valid(name))
+       continue;
       sprintf(buf, "%s:%d", name, gid);
       hash_store(groups, lid, strdup(buf));
       fprintf(iout, "%d.gid\t%s CNAME %s.group\n", gid, HCLASS, name);
@@ -376,8 +399,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)
        {
@@ -393,10 +415,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)
     {
@@ -462,38 +484,19 @@ sqlerr:
 int do_filsys(void)
 {
   FILE *out;
-  char outf[64], outft[64], *mach, *group;
-  struct stat sb;
-  time_t ftime;
+  char outf[MAXPATHLEN], outft[MAXPATHLEN], *mach, *group;
   struct save_queue *sq, *sq2;
   EXEC SQL BEGIN DECLARE SECTION;
-  char name[33], type[9], loc[81], access[2], mount[33], trans[257];
-  char comments[65];
-  int flag1, flag2, flag3, flag4, id, fid;
+  char name[FILESYS_LABEL_SIZE], type[FILESYS_TYPE_SIZE];
+  char loc[FILESYS_NAME_SIZE], access[FILESYS_RWACCESS_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 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)
@@ -518,36 +521,41 @@ int do_filsys(void)
        :mount, :comments, :fid;
       if (sqlca.sqlcode)
        break;
+      strtrim(name);
+      if (!valid(name))
+       continue;
       strtrim(type);
       if (!strcmp(type, "NFS") || !strcmp(type, "RVD"))
        {
          if ((mach = hash_lookup(machines, id)))
            {
              fprintf(out, "%s.filsys\t%s %s \"%s %s %s %s %s\"\n",
-                     strtrim(name), HCLASS, HTYPE, type, strtrim(loc),
+                     name, HCLASS, HTYPE, type, strtrim(loc),
                      mach, strtrim(access), strtrim(mount));
            }
        }
       else if (!strcmp(type, "AFS"))
        {
          fprintf(out, "%s.filsys\t%s %s \"AFS %s %s %s\"\n",
-                 strtrim(name), HCLASS, HTYPE, strtrim(loc),
+                 name, HCLASS, HTYPE, strtrim(loc),
                  strtrim(access), strtrim(mount));
        }
       else if (!strcmp(type, "ERR"))
        {
          fprintf(out, "%s.filsys\t%s %s \"ERR %s\"\n",
-                 strtrim(name), HCLASS, HTYPE, strtrim(comments));
+                 name, HCLASS, HTYPE, strtrim(comments));
        }
       else if (!strcmp(type, "FSGROUP"))
        {
-         sprintf(trans, "%s:%d", strtrim(name), fid);
-         sq_save_data(sq, strdup(trans));
+         char buf[FILESYS_NAME_SIZE + 10];
+         sprintf(buf, "%s:%d", name, fid);
+         sq_save_data(sq, strdup(buf));
        }
       else if (!strcmp(type, "MUL"))
        {
-         sprintf(trans, "%s:%d", strtrim(name), fid);
-         sq_save_data(sq2, strdup(trans));
+         char buf[FILESYS_NAME_SIZE + 10];
+         sprintf(buf, "%s:%d", name, fid);
+         sq_save_data(sq2, strdup(buf));
        }
     }
   EXEC SQL CLOSE f_cursor;
@@ -564,10 +572,10 @@ 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, :trans;
+           :comments, :name, :key;
          if (sqlca.sqlcode)
            break;
          strtrim(type);
@@ -577,14 +585,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"))
            {
@@ -610,7 +618,7 @@ int do_filsys(void)
       EXEC SQL OPEN f_cursor3;
       while (1)
        {
-         EXEC SQL FETCH f_cursor3 INTO :name, :trans;
+         EXEC SQL FETCH f_cursor3 INTO :name, :key;
          if (sqlca.sqlcode)
            break;
          fprintf(out, " %s", strtrim(name));
@@ -628,11 +636,15 @@ int do_filsys(void)
   EXEC SQL OPEN a_cursor;
   while (1)
     {
-      EXEC SQL FETCH a_cursor INTO :name, :trans;
+      EXEC SQL FETCH a_cursor INTO :aname, :trans;
       if (sqlca.sqlcode)
        break;
+      strtrim(aname);
+      strtrim(trans);
+      if (!valid(aname) || !valid(trans))
+       continue;
       fprintf(out, "%s.filsys\t%s CNAME %s.filsys\n",
-             strtrim(name), HCLASS, strtrim(trans));
+             aname, HCLASS, trans);
     }
   EXEC SQL CLOSE a_cursor;
 
@@ -650,7 +662,7 @@ sqlerr:
   return 0;
 }
 
- int nbitsset(set_mask *set)
+int nbitsset(set_mask *set)
 {
   int i, ret;
   ret = 0;
@@ -666,32 +678,17 @@ sqlerr:
 int do_cluster(void)
 {
   FILE *out;
-  char outf[64], outft[64], *mach, machbuf[64], clubuf[64], *p;
-  struct stat sb;
-  time_t ftime;
+  char outf[MAXPATHLEN], outft[MAXPATHLEN], *mach;
+  char machbuf[MACHINE_NAME_SIZE], clubuf[CLUSTERS_NAME_SIZE], *p;
   EXEC SQL BEGIN DECLARE SECTION;
-  int flag1, flag2, flag3, flag4, maxmach, maxclu, mid, cid, id;
-  char name[41], label2[17], data[33];
+  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;
   set_mask **machs, *ms, *ps;
 
   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)
@@ -750,13 +747,13 @@ int do_cluster(void)
                  EXEC SQL OPEN d_cursor;
                  while (1)
                    {
-                     EXEC SQL FETCH d_cursor INTO :label2, :data;
+                     EXEC SQL FETCH d_cursor INTO :label, :data;
                      if (sqlca.sqlcode)
                        break;
-                     strtrim(label2);
+                     strtrim(label);
                      strtrim(data);
                      fprintf(out, "%s.cluster\t%s %s \"%s %s\"\n",
-                             clubuf, HCLASS, HTYPE, label2, data);
+                             clubuf, HCLASS, HTYPE, label, data);
                    }
                  EXEC SQL CLOSE d_cursor;
                }
@@ -770,6 +767,8 @@ int do_cluster(void)
 
          EXEC SQL SELECT name INTO :name FROM clusters WHERE clu_id = :cid;
          strtrim(name);
+         if (!valid(name))
+           continue;
          strcpy(clubuf, name);
        }
 
@@ -818,14 +817,16 @@ int do_cluster(void)
   EXEC SQL OPEN d_cursor2;
   while (1)
     {
-      EXEC SQL FETCH d_cursor2 INTO :name, :label2, :data;
+      EXEC SQL FETCH d_cursor2 INTO :name, :label, :data;
       if (sqlca.sqlcode)
        break;
       strtrim(name);
-      strtrim(label2);
+      if (!valid(name))
+       continue;
+      strtrim(label);
       strtrim(data);
       fprintf(out, "%s.cluster\t%s %s \"%s %s\"\n",
-             name, HCLASS, HTYPE, label2, data);
+             name, HCLASS, HTYPE, label, data);
     }
   free(machs);
   EXEC SQL COMMIT;
@@ -846,29 +847,17 @@ sqlerr:
 int do_printcap(void)
 {
   FILE *out;
-  char outf[64], outft[64];
-  struct stat sb;
-  time_t ftime;
+  char outf[MAXPATHLEN], outft[MAXPATHLEN];
   EXEC SQL BEGIN DECLARE SECTION;
-  char name[17], rp[17], sd[33];
-  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)
@@ -881,120 +870,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;
-}
-
+      fprintf(out, "%s.pcap\t%s %s \"%s:rp=%s:rm=%s:ka#%d:mc#%d:",
+             name, HCLASS, HTYPE, name, rp, rmname, ka, mc);
 
-int do_palladium(void)
-{
-  FILE *out;
-  char outf[64], outft[64];
-  struct stat sb;
-  time_t ftime;
-  EXEC SQL BEGIN DECLARE SECTION;
-  char name[33], trans[129];
-  int flag, flag1, identifier, rm;
-  EXEC SQL END DECLARE SECTION;
-
-  sprintf(outf, "%s/palladium.db", hesiod_dir);
-
-  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");
        }
-    }
-
-  sprintf(outft, "%s~", outf);
-  out = fopen(outft, "w");
-  if (!out)
-    {
-      perror("cannot open palladium.db for write");
-      exit(MR_OCONFIG);
-    }
+      else if (!strcmp(pskind, "LPRNG"))
+       fprintf(out, "auth=kerberos5:xn:");
 
-  fprintf(stderr, "Building palladium.db\n");
-  get_mach();
+      fputs("\"\n", out);
 
-  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);
-      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;
+      strtrim(duplexname);
+      if (!valid(duplexname))
+       continue;
+      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 :name, :trans;
-      if (sqlca.sqlcode)
-       break;
-      strtrim(name);
-      strtrim(trans);
-      fprintf(out, "%s.palladium\t%s %s \"%s\"\n", name, 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);
@@ -1008,29 +949,14 @@ sqlerr:
 int do_sloc(void)
 {
   FILE *out;
-  char outf[64], outft[64], *mach;
-  struct stat sb;
-  time_t ftime;
+  char outf[MAXPATHLEN], outft[MAXPATHLEN], *mach;
   EXEC SQL BEGIN DECLARE SECTION;
-  char service[17];
-  int flag1, flag2, id;
+  char service[SERVERHOSTS_SERVICE_SIZE];
+  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)
@@ -1053,7 +979,7 @@ int do_sloc(void)
       if (sqlca.sqlcode)
        break;
       strtrim(service);
-      if ((mach = hash_lookup(machines, id)))
+      if (valid(service) && (mach = hash_lookup(machines, id)))
        fprintf(out, "%s.sloc\t%s %s %s\n", service, HCLASS, HTYPE, mach);
     }
   EXEC SQL CLOSE s_cursor;
@@ -1076,28 +1002,15 @@ sqlerr:
 int do_service(void)
 {
   FILE *out;
-  char outf[64], outft[64];
-  struct stat sb;
-  time_t ftime;
+  char outf[MAXPATHLEN], outft[MAXPATHLEN];
   EXEC SQL BEGIN DECLARE SECTION;
-  char service[33], protocol[9], altserv[129];
-  int port, flag1;
+  char service[SERVICES_NAME_SIZE], protocol[SERVICES_PROTOCOL_SIZE];
+  char aname[ALIAS_NAME_SIZE], trans[ALIAS_TRANS_SIZE];
+  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)
@@ -1119,6 +1032,8 @@ int do_service(void)
        break;
       lowercase(protocol);      /* Convert protocol to lowercase */
       strtrim(service);
+      if (!valid(service))
+       continue;
       strtrim(protocol);
       fprintf(out, "%s.service\t%s %s \"%s %s %d\"\n",
              service, HCLASS, HTYPE, service, protocol, port);
@@ -1132,13 +1047,15 @@ int do_service(void)
   EXEC SQL OPEN a_cursor3;
   while (1)
     {
-      EXEC SQL FETCH a_cursor3 INTO :service, :altserv;
+      EXEC SQL FETCH a_cursor3 INTO :aname, :trans;
       if (sqlca.sqlcode)
        break;
-      strtrim(service);
-      strtrim(altserv);
-      fprintf(out, "%s.service\t%s CNAME %s.service\n", service, HCLASS,
-             altserv);
+      strtrim(aname);
+      strtrim(trans);
+      if (!valid(aname) || !valid(trans))
+       continue;
+      fprintf(out, "%s.service\t%s CNAME %s.service\n", aname, HCLASS,
+             trans);
     }
   EXEC SQL CLOSE a_cursor3;
 
This page took 0.064837 seconds and 4 git commands to generate.