From: mar Date: Wed, 22 Jul 1992 14:51:18 +0000 (+0000) Subject: Initial revision X-Git-Tag: release77~466 X-Git-Url: http://andersk.mit.edu/gitweb/moira.git/commitdiff_plain/0138e07357ba3eef46f3a8bca1c6d4daa31636af Initial revision --- diff --git a/regtape/sign.dc b/regtape/sign.dc new file mode 100644 index 00000000..775cfcf3 --- /dev/null +++ b/regtape/sign.dc @@ -0,0 +1,116 @@ +/* $Header$ + * + * This program will bulk sign user records in the database. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +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); +##}