]> andersk Git - moira.git/blobdiff - gen/hosts.pc
Install commands for nagios-printers service.
[moira.git] / gen / hosts.pc
index d3f66b903d534c24ae29a9e0ffab07c26b4618a9..62174d17f1dfb0e848f1b1a2de2fc43c7519b8cc 100644 (file)
@@ -32,32 +32,21 @@ char *db = "moira/moira";
 int main(int argc, char **argv)
 {
   FILE *out = stdout;
-  char *outf = NULL, outft[64], *p, buf[256];
-  struct stat sb;
+  char *outf = NULL, outft[MAXPATHLEN], *p;
   struct timeval now;
-  int flag1, flag2, i;
+  int i;
   struct hash *aliases;
   EXEC SQL BEGIN DECLARE SECTION;
   int id;
-  char name[65], vendor[33], model[33], os[33], addr[17];
+  char name[MACHINE_NAME_SIZE], vendor[MACHINE_VENDOR_SIZE];
+  char model[MACHINE_MODEL_SIZE], os[MACHINE_OS_SIZE];
+  char addr[MACHINE_ADDRESS_SIZE];
   EXEC SQL END DECLARE SECTION;
 
   EXEC SQL CONNECT :db;
 
   if (argc == 2)
     {
-      if (stat(argv[1], &sb) == 0)
-       {
-         if (ModDiff(&flag1, "machine", sb.st_mtime) ||
-             ModDiff(&flag2, "subnet", sb.st_mtime))
-           exit(MR_DATE);
-         if (flag1 < 0 && flag2 < 0)
-           {
-             fprintf(stderr, "File %s does not need to be rebuilt.\n",
-                     argv[1]);
-             exit(MR_NO_CHANGE);
-           }
-       }
       outf = argv[1];
       sprintf(outft, "%s~", outf);
       if (!(out = fopen(outft, "w")))
@@ -97,18 +86,19 @@ int main(int argc, char **argv)
        continue;
       if (!*strtrim(name))
        continue;
-      if ((i = strlen(name)) < 9 || strcmp(&name[i - 8], ".MIT.EDU"))
+      if ((i = strlen(name)) < 9 || !strchr(name, '.') ||
+         strcmp(strchr(name, '.'), ".MIT.EDU"))
        {
-         fprintf(stderr, "Name %s not in MIT domain\n", name);
+         fprintf(stderr, "Ignoring alias %s\n", name);
          continue;
        }
       else
        name[i - 8] = 0;
       if ((p = hash_lookup(aliases, id)))
        {
-         sprintf(buf, "%s,%s", p, name);
-         hash_update(aliases, id, strdup(buf));
-         free(p);
+         p = realloc(p, strlen(p) + strlen(name) + 2);
+         sprintf(strchr(p, '\0'), ",%s", name);
+         hash_update(aliases, id, p);
        }
       else
        hash_store(aliases, id, strdup(name));
@@ -116,19 +106,22 @@ int main(int argc, char **argv)
 
   EXEC SQL DECLARE x CURSOR FOR SELECT
     name, mach_id, vendor, model, os, address
-    FROM machine WHERE status = 1 ORDER BY address;
+    FROM machine WHERE status = 1 AND mach_id > 0
+    ORDER BY address;
   EXEC SQL OPEN x;
   while (1)
     {
       EXEC SQL FETCH x INTO :name, :id, :vendor, :model, :os, :addr;
       if (sqlca.sqlcode)
        break;
-      if (id == 0)
-       continue;
       if (!*strtrim(name))
        continue;
-      if ((i = strlen(name)) < 9 || strcmp(&name[i - 8], ".MIT.EDU"))
-       continue;
+      if ((i = strlen(name)) < 9 || !strchr(name, '.') ||
+         strcmp(strchr(name, '.'), ".MIT.EDU"))
+       {
+         fprintf(stderr, "Ignoring machine %s\n", name);
+         continue;
+       }
       else
        name[i - 8] = 0;
       strtrim(vendor);
@@ -137,20 +130,18 @@ int main(int argc, char **argv)
       strtrim(addr);
       if (*addr == 0 || inet_addr(addr) == -1)
        continue;
+      fprintf(out, "HOST : %s : %s", addr, name);
       if ((p = hash_lookup(aliases, id)))
-       sprintf(buf, "%s,%s", name, p);
-      else
-       strcpy(buf, name);
-      fprintf(out, "HOST : %s : %s : ", addr, buf);
+       fprintf(out, ",%s", p);
       if ((*vendor || *model) && *os)
        {
          if (*vendor && *model)
-           fprintf(out, "%s/%s : %s :\n", vendor, model, os);
+           fprintf(out, " : %s/%s : %s :\n", vendor, model, os);
          else
-           fprintf(out, "%s%s : %s :\n", vendor, model, os);
+           fprintf(out, " : %s%s : %s :\n", vendor, model, os);
        }
       else
-       fputs("\n", out);
+       fputs(" : \n", out);
     }
 
   EXEC SQL CLOSE x;
This page took 0.041481 seconds and 4 git commands to generate.