]> andersk Git - moira.git/blobdiff - regtape/sign.dc
added hosttable stuff
[moira.git] / regtape / sign.dc
index 775cfcf31422174ed5bd4a977dde7514bfb6ceb0..887a937097bbbecd1204b23e5b625a915120593d 100644 (file)
@@ -13,6 +13,7 @@
 #include <krb.h>
 #include <krb_err.h>
 #include <gdss.h>
+EXEC SQL INCLUDE sqlca;
 
 
 char *program;
@@ -20,13 +21,15 @@ char *program;
 main(argc, argv)
 int argc;
 char **argv;
-##{
+{
      char buf[BUFSIZ], *data, *p;
      struct save_queue *sq;
      SigInfo si;
      int found, status, i, wait;
-##   char login[10], mid[32], rawsig[256];
-##   int id, timestamp, sms;
+     EXEC SQL BEGIN DECLARE SECTION;
+     char login[10], mid[32], rawsig[256];
+     int id, timestamp, sms;
+     EXEC SQL END DECLARE SECTION;
 
      program = "sign";
      init_krb_err_tbl();
@@ -53,12 +56,15 @@ char **argv;
           com_err(program, status + krb_err_base, " in krb_get_pw_in_tkt");
      }
 
-##   ingres #sms
-##   range of u is users
-##   range of s is strings
+     EXEC SQL CONNECT moira;
+     if (sqlca.sqlcode != 0) {
+        com_err(program, 0, "ingres error %d", sqlca.sqlcode);
+        exit(1);
+     }
 
      sms = 0;
-##   retrieve (sms = s.string_id) where s.string="moira.extra@ATHENA.MIT.EDU"
+     EXEC SQL SELECT string_id INTO :sms FROM strings 
+       WHERE string='moira.extra@ATHENA.MIT.EDU';
      if (sms == 0) {
         com_err(program, 0, " failed to find string moira.extra@ATHENA.MIT.EDU in database");
         dest_tkt();
@@ -68,15 +74,29 @@ char **argv;
      found = 0;
      sq = sq_create();
 
-##   retrieve (id = u.users_id, login = u.#login, mid = u.mit_id)
-##     where u.signature = "" and u.xmodtime > date("01-jul-92") {
-       if (login[0] == '#' || !isdigit(mid[0]))
-         continue;
-       sprintf(buf, "%d:%s:%s", id, strtrim(login), strtrim(mid));
-       sq_save_data(sq, strsave(buf));
-       found++;
-##   }
-
+     EXEC SQL DECLARE c CURSOR FOR
+       SELECT users_id, login, clearid
+       FROM users WHERE signature = '';
+     if (sqlca.sqlcode != 0) {
+        com_err(program, 0, "ingres error %d", sqlca.sqlcode);
+        exit(1);
+     }
+     EXEC SQL OPEN c;
+     if (sqlca.sqlcode != 0) {
+        com_err(program, 0, "ingres error %d", sqlca.sqlcode);
+        exit(1);
+     }
+     while (1) {
+        EXEC SQL FETCH c INTO :id, :login, :mid;
+        if (sqlca.sqlcode != 0) break;
+        if (login[0] == '#' || !isdigit(mid[0]))
+          continue;
+        sprintf(buf, "%d:%s:%s", id, strtrim(login), strtrim(mid));
+        sq_save_data(sq, strsave(buf));
+        found++;
+     }
+     EXEC SQL CLOSE c;
+     EXEC SQL COMMIT WORK;
      printf("Found %d users to sign.\n", found);
 
      si.rawsig = (unsigned char *) &rawsig[0];
@@ -90,6 +110,7 @@ char **argv;
         *p++ = 0;
         id = atoi(data);
         data = p;
+     again:
         status = GDSS_Sign(data, strlen(data), buf);
         if (status) {
             com_err(program, gdss2et(status), "signing data");
@@ -100,10 +121,20 @@ char **argv;
             com_err(program, gdss2et(status), "verifying data");
             continue;
         }
+        if (strlen(rawsig) > 68) {
+            sleep(1);
+            goto again;
+        }
 
         timestamp = si.timestamp;
-##      replace u (signature = rawsig, sigwho = sms, sigdate = timestamp)
-##        where u.users_id = id
+        EXEC SQL REPEATED UPDATE users 
+          SET signature = :rawsig, sigwho = :sms, sigdate = :timestamp
+          WHERE users_id = :id;
+        if (sqlca.sqlcode != 0) {
+            com_err(program, 0, "ingres error %d", sqlca.sqlcode);
+            exit(1);
+        }
+        EXEC SQL COMMIT WORK;
         if (wait) {
             printf("Next");
             fflush(stdout);
@@ -111,6 +142,5 @@ char **argv;
         }
      }
      dest_tkt();
-##   exit
      exit(0);
-##}
+}
This page took 0.038558 seconds and 4 git commands to generate.