#include <krb.h>
#include <krb_err.h>
#include <gdss.h>
+EXEC SQL INCLUDE sqlca;
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();
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();
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];
*p++ = 0;
id = atoi(data);
data = p;
+ again:
status = GDSS_Sign(data, strlen(data), buf);
if (status) {
com_err(program, gdss2et(status), "signing data");
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);
}
}
dest_tkt();
-## exit
exit(0);
-##}
+}