3 * This program will bulk sign user records in the database.
11 #include <moira_site.h>
16 EXEC SQL INCLUDE sqlca;
25 char buf[BUFSIZ], *data, *p;
26 struct save_queue *sq;
28 int found, status, i, wait;
29 EXEC SQL BEGIN DECLARE SECTION;
30 char login[10], mid[32], rawsig[256];
31 int id, timestamp, sms;
32 EXEC SQL END DECLARE SECTION;
38 for (i = 1; i < argc; i++) {
39 if (!strcmp(argv[i], "-w"))
41 else if (!strcmp(argv[i], "-D"))
42 setenv("ING_SET", "set printqry");
44 fprintf(stderr, "Usage: %s [-w] [-D]\n", argv[0]);
47 /* Set the name of our kerberos ticket file */
48 krb_set_tkt_string("/tmp/tkt_sign");
51 printf("Authenticating as moira.extra:\n");
52 status = krb_get_pw_in_tkt("moira", "extra", "ATHENA.MIT.EDU",
53 "krbtgt", "ATHENA.MIT.EDU",
56 com_err(program, status + krb_err_base, " in krb_get_pw_in_tkt");
59 EXEC SQL CONNECT moira;
60 if (sqlca.sqlcode != 0) {
61 com_err(program, 0, "ingres error %d", sqlca.sqlcode);
66 EXEC SQL SELECT string_id INTO :sms FROM strings
67 WHERE string='moira.extra@ATHENA.MIT.EDU';
69 com_err(program, 0, " failed to find string moira.extra@ATHENA.MIT.EDU in database");
77 EXEC SQL DECLARE c CURSOR FOR
78 SELECT users_id, login, clearid
79 FROM users WHERE signature = '';
80 if (sqlca.sqlcode != 0) {
81 com_err(program, 0, "ingres error %d", sqlca.sqlcode);
85 if (sqlca.sqlcode != 0) {
86 com_err(program, 0, "ingres error %d", sqlca.sqlcode);
90 EXEC SQL FETCH c INTO :id, :login, :mid;
91 if (sqlca.sqlcode != 0) break;
92 if (login[0] == '#' || !isdigit(mid[0]))
94 sprintf(buf, "%d:%s:%s", id, strtrim(login), strtrim(mid));
95 sq_save_data(sq, strsave(buf));
100 printf("Found %d users to sign.\n", found);
102 si.rawsig = (unsigned char *) &rawsig[0];
104 while (sq_get_data(sq, &data)) {
105 p = index(data, ':');
107 com_err(program, 0, " malformatted data");
114 status = GDSS_Sign(data, strlen(data), buf);
116 com_err(program, gdss2et(status), "signing data");
119 status = GDSS_Verify(data, strlen(data), buf, &si);
121 com_err(program, gdss2et(status), "verifying data");
124 if (strlen(rawsig) > 68) {
129 timestamp = si.timestamp;
130 EXEC SQL REPEATED UPDATE users
131 SET signature = :rawsig, sigwho = :sms, sigdate = :timestamp
132 WHERE users_id = :id;
133 if (sqlca.sqlcode != 0) {
134 com_err(program, 0, "ingres error %d", sqlca.sqlcode);
137 EXEC SQL COMMIT WORK;