]> andersk Git - moira.git/commitdiff
Initial revision
authormar <mar>
Wed, 22 Jul 1992 14:51:18 +0000 (14:51 +0000)
committermar <mar>
Wed, 22 Jul 1992 14:51:18 +0000 (14:51 +0000)
regtape/sign.dc [new file with mode: 0644]

diff --git a/regtape/sign.dc b/regtape/sign.dc
new file mode 100644 (file)
index 0000000..775cfcf
--- /dev/null
@@ -0,0 +1,116 @@
+/* $Header$
+ *
+ * This program will bulk sign user records in the database.
+ */
+
+#include <stdio.h>
+#include <strings.h>
+#include <ctype.h>
+#include <sys/time.h>
+#include <moira.h>
+#include <moira_site.h>
+#include <des.h>
+#include <krb.h>
+#include <krb_err.h>
+#include <gdss.h>
+
+
+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;
+
+     program = "sign";
+     init_krb_err_tbl();
+     init_sms_err_tbl();
+
+     for (i = 1; i < argc; i++) {
+       if (!strcmp(argv[i], "-w"))
+         wait++;
+       else if (!strcmp(argv[i], "-D"))
+         setenv("ING_SET", "set printqry");
+       else
+         fprintf(stderr, "Usage: %s [-w] [-D]\n", argv[0]);
+    }
+
+     /* Set the name of our kerberos ticket file */
+     krb_set_tkt_string("/tmp/tkt_sign");
+     status = 1;
+     while (status) {
+        printf("Authenticating as moira.extra:\n");
+        status = krb_get_pw_in_tkt("moira", "extra", "ATHENA.MIT.EDU",
+                                   "krbtgt", "ATHENA.MIT.EDU",
+                                   DEFAULT_TKT_LIFE, 0);
+        if (status != 0)
+          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
+
+     sms = 0;
+##   retrieve (sms = s.string_id) where s.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();
+        exit(1);
+     }
+
+     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++;
+##   }
+
+     printf("Found %d users to sign.\n", found);
+
+     si.rawsig = (unsigned char *) &rawsig[0];
+
+     while (sq_get_data(sq, &data)) {
+        p = index(data, ':');
+        if (!p) {
+            com_err(program, 0, " malformatted data");
+            continue;
+        }
+        *p++ = 0;
+        id = atoi(data);
+        data = p;
+        status = GDSS_Sign(data, strlen(data), buf);
+        if (status) {
+            com_err(program, gdss2et(status), "signing data");
+            continue;
+        }
+        status = GDSS_Verify(data, strlen(data), buf, &si);
+        if (status) {
+            com_err(program, gdss2et(status), "verifying data");
+            continue;
+        }
+
+        timestamp = si.timestamp;
+##      replace u (signature = rawsig, sigwho = sms, sigdate = timestamp)
+##        where u.users_id = id
+        if (wait) {
+            printf("Next");
+            fflush(stdout);
+            gets(buf);
+        }
+     }
+     dest_tkt();
+##   exit
+     exit(0);
+##}
This page took 0.409242 seconds and 5 git commands to generate.