]> andersk Git - moira.git/blobdiff - gen/hesiod.dc
fix leftover bug in usage message (s/-server/-database)
[moira.git] / gen / hesiod.dc
index 59a08257a4e74be48b16381a45d459c0d61812ef..c41149cd7f8beead2591def2ea3d5e2e57f51b26 100644 (file)
@@ -26,6 +26,11 @@ EXEC SQL INCLUDE sqlca;
 #define HTYPE "TXT"
 #endif
 
+/* max number of bytes of a data record that can be returned in a hesiod 
+ * query.  This is 512 - overhead (~66) [derived empirically]
+ */
+#define MAXHESSIZE 446
+
 char hesiod_dir[64];
 
 #define min(x,y)       ((x) < (y) ? (x) : (y))
@@ -107,7 +112,7 @@ get_mach()
 {
     EXEC SQL BEGIN DECLARE SECTION;
     int id;
-    char name[33];
+    char name[41];
     EXEC SQL END DECLARE SECTION;
 
     if (machines)
@@ -117,6 +122,7 @@ get_mach()
     EXEC SQL DECLARE m_cursor CURSOR FOR
       SELECT name, mach_id
       FROM machine
+      WHERE status = 1
       ORDER BY mach_id;
     EXEC SQL OPEN m_cursor;
     while (1) {
@@ -124,12 +130,7 @@ get_mach()
         if (sqlca.sqlcode != 0) break;
        hash_store(machines, id, strsave(strtrim(name)));
     }
-    if (sqlca.sqlcode < 0) {
-       com_err(whoami, MR_INGRES_ERR, " code %d\n", sqlca.sqlcode);
-       critical_alert("DCM", "Hesiod build encountered DATABASE ERROR %d",
-                      sqlca.sqlcode);
-       exit(MR_INGRES_ERR);
-    }
+    if (sqlca.sqlcode < 0) db_error(sqlca.sqlcode);
     EXEC SQL CLOSE m_cursor;
 #ifsql INGRES
     EXEC SQL COMMIT;
@@ -221,17 +222,12 @@ do_passwd()
                        login, shell);
                fprintf(uout, "%d.uid\tHS CNAME %s.passwd\n", uid, login);
            }
-           if (ptype[0] == 'P' && (mach = hash_lookup(machines, pid))) {
+           if (pid != 0 && (mach = hash_lookup(machines, pid))) {
                fprintf(bout, "%s.pobox\tHS %s \"POP %s %s\"\n",
                        login, HTYPE, mach, login);
            }
     }
-    if (sqlca.sqlcode < 0) {
-       com_err(whoami, MR_INGRES_ERR, " code %d\n", sqlca.sqlcode);
-       critical_alert("DCM", "Hesiod build encountered DATABASE ERROR %d",
-                      sqlca.sqlcode);
-       exit(MR_INGRES_ERR);
-    }
+    if (sqlca.sqlcode < 0) db_error(sqlca.sqlcode);
     EXEC SQL CLOSE u_cursor;
 #ifsql INGRES
     EXEC SQL COMMIT;
@@ -263,7 +259,7 @@ do_groups()
     time_t ftime;
     EXEC SQL BEGIN DECLARE SECTION;
     char name[33];
-    int gid, id, lid, flag1, flag2, flag3;
+    int gid, id, lid, flag1, flag2, flag3, len;
     EXEC SQL END DECLARE SECTION;
 
     /* open files */
@@ -388,10 +384,18 @@ do_groups()
              continue;
            fprintf(lout, "%s.grplist\tHS %s \"",
                    ((struct user *)b->data)->name, HTYPE);
+           len = 0;
            for (; g; g = g->next) {
-               fputs(g->lid, lout);
-               if (g->next)
-                 putc(':', lout);
+               if (len + strlen(g->lid) + 1 < MAXHESSIZE) {
+                   fputs(g->lid, lout);
+                   if (g->next)
+                     putc(':', lout);
+                   len += strlen(g->lid) + 1;
+               } else {
+                   com_err(whoami, 0, "truncated grp list for user %s",
+                           ((struct user *)b->data)->name);
+                   break;
+               }
            }
            fputs("\"\n", lout);
        }
@@ -406,10 +410,8 @@ do_groups()
     fix_file(loutf);
     return(1);
  sqlerr:
-    com_err(whoami, MR_INGRES_ERR, " code %d\n", sqlca.sqlcode);
-    critical_alert("DCM", "Hesiod build encountered DATABASE ERROR %d",
-                  sqlca.sqlcode);
-    exit(MR_INGRES_ERR);
+    db_error(sqlca.sqlcode);
+    return(0);
 }
 
 
@@ -500,21 +502,21 @@ do_filsys()
          WHERE f.filsys_id = g.filsys_id AND g.group_id = :fid
          ORDER BY key, label;
        EXEC SQL OPEN f_cursor2;
-        while (1) {
+        for (flag1=1;;flag1++) {
             EXEC SQL FETCH f_cursor2 INTO :type, :loc, :id, :access,:mount,
                                     :comments, :name, :trans;
             if (sqlca.sqlcode != 0) break;
            strtrim(type);
            if (!strcmp(type, "NFS") || !strcmp(type, "RVD")) {
                if (mach = hash_lookup(machines, id)) {
-                   fprintf(out, "%s.filsys\tHS %s \"%s %s %s %s %s\"\n",
+                   fprintf(out, "%s.filsys\tHS %s \"%s %s %s %s %s %d\"\n",
                            group, HTYPE, type, strtrim(loc), mach,
-                           strtrim(access), strtrim(mount));
+                           strtrim(access), strtrim(mount), flag1);
                }
            } else if (!strcmp(type, "AFS")) {
-               fprintf(out, "%s.filsys\tHS %s \"AFS %s %s %s\"\n",
+               fprintf(out, "%s.filsys\tHS %s \"AFS %s %s %s %d\"\n",
                        group, HTYPE, strtrim(loc), strtrim(access),
-                       strtrim(mount));
+                       strtrim(mount), flag1);
            } else if (!strcmp(type, "ERR")) {
                fprintf(out, "%s.filsys\tHS %s \"ERR %s\"\n",
                        group, HTYPE, strtrim(comments));
@@ -572,10 +574,8 @@ do_filsys()
     fix_file(outf);
     return(1);
  sqlerr:
-    com_err(whoami, MR_INGRES_ERR, " code %d\n", sqlca.sqlcode);
-    critical_alert("DCM", "Hesiod build encountered DATABASE ERROR %d",
-                  sqlca.sqlcode);
-    exit(MR_INGRES_ERR);
+    db_error(sqlca.sqlcode);
+    return(0);
 }
 
 
@@ -612,12 +612,12 @@ set_mask *set;
 do_cluster()
 {
     FILE *out;
-    char outf[64], outft[64], *mach, machbuf[33], *p;
+    char outf[64], outft[64], *mach, machbuf[41], *p;
     struct stat sb;
     time_t ftime;
     EXEC SQL BEGIN DECLARE SECTION;
     int flag1, flag2, flag3, flag4, maxmach, maxclu, mid, cid, id;
-    char name[33], label2[17], data[33];
+    char name[41], label2[17], data[33];
     EXEC SQL END DECLARE SECTION;
     set_mask **machs, *ms, *ps;
     int oneclu;
@@ -767,10 +767,8 @@ do_cluster()
     fix_file(outf);
     return(1);
  sqlerr:
-    com_err(whoami, MR_INGRES_ERR, " code %d\n", sqlca.sqlcode);
-    critical_alert("DCM", "Hesiod build encountered DATABASE ERROR %d",
-                  sqlca.sqlcode);
-    exit(MR_INGRES_ERR);
+    db_error(sqlca.sqlcode);
+    return(0);
 }
 
 
@@ -782,15 +780,17 @@ do_printcap()
     time_t ftime;
     EXEC SQL BEGIN DECLARE SECTION;
     char name[17], rp[17], sd[33];
-    int flag, ka, pc, rm, rq;
+    int flag1, flag2, ka, pc, rm, rq;
     EXEC SQL END DECLARE SECTION;
 
     sprintf(outf, "%s/printcap.db", hesiod_dir);
 
     if (stat(outf, &sb) == 0) {
        ftime = sb.st_mtime;
-       if (ModDiff (&flag, "printcap", ftime)) exit (MR_DATE);
-       if (flag < 0) {
+       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);
       }
@@ -818,7 +818,7 @@ do_printcap()
        strtrim(sd);
        fprintf(out, "%s.pcap\tHS %s \"%s:rp=%s:rm=%s:sd=%s:ka#%d:pc#%d",
                name, HTYPE, name, rp, hash_lookup(machines, rm), sd, ka, pc);
-       if (rq)
+       if (rq && hash_lookup(machines, rq))
          fprintf(out, ":rq=%s\"\n", hash_lookup(machines, rq));
        else
          fputs("\"\n", out);
@@ -838,10 +838,8 @@ do_printcap()
     fix_file(outf);
     return(1);
  sqlerr:
-    com_err(whoami, MR_INGRES_ERR, " code %d\n", sqlca.sqlcode);
-    critical_alert("DCM", "Hesiod build encountered DATABASE ERROR %d",
-                  sqlca.sqlcode);
-    exit(MR_INGRES_ERR);
+    db_error(sqlca.sqlcode);
+    return(0);
   }
 
 
@@ -919,10 +917,8 @@ do_palladium()
     fix_file(outf);
     return(1);
  sqlerr:
-    com_err(whoami, MR_INGRES_ERR, " code %d\n", sqlca.sqlcode);
-    critical_alert("DCM", "Hesiod build encountered DATABASE ERROR %d",
-                  sqlca.sqlcode);
-    exit(MR_INGRES_ERR);
+    db_error(sqlca.sqlcode);
+    return(0);
 }
 
 
@@ -987,10 +983,8 @@ do_sloc()
     fix_file(outf);
     return(1);
  sqlerr:
-    com_err(whoami, MR_INGRES_ERR, " code %d\n", sqlca.sqlcode);
-    critical_alert("DCM", "Hesiod build encountered DATABASE ERROR %d",
-                  sqlca.sqlcode);
-    exit(MR_INGRES_ERR);
+    db_error(sqlca.sqlcode);
+    return(0);
 }
 
 do_service()
@@ -1066,8 +1060,6 @@ do_service()
     fix_file(outf);
     return(1);
  sqlerr:
-    com_err(whoami, MR_INGRES_ERR, " code %d\n", sqlca.sqlcode);
-    critical_alert("DCM", "Hesiod build encountered DATABASE ERROR %d",
-                  sqlca.sqlcode);
-    exit(MR_INGRES_ERR);
+    db_error(sqlca.sqlcode);
+    return(0);
 }
This page took 0.052062 seconds and 4 git commands to generate.