]> andersk Git - moira.git/blobdiff - gen/hesiod.dc
ifdeffd getpid() dec. for sgi
[moira.git] / gen / hesiod.dc
index f865745aa46e8d1c2305e7f45711b25271a189ae..d99b2f87c809fd71841fd9c8e7c0099fe2bee8d8 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;
@@ -197,7 +198,7 @@ do_passwd()
       SELECT login, uid, shell, fullname, nickname, office_addr,
             office_phone, home_phone, users_id, pop_id, potype, status
       FROM users
-      WHERE status = 1 or status = 6
+      WHERE status = 1 or status = 5 or status = 6
       ORDER BY users_id;
     EXEC SQL OPEN u_cursor;
     while (1) {
@@ -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);
 }
 
 
@@ -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);
       }
@@ -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.048186 seconds and 4 git commands to generate.