]> andersk Git - moira.git/blame - dbck/phase2.dc
better logging
[moira.git] / dbck / phase2.dc
CommitLineData
68bbc9c3 1/* $Header$
2 *
3 * (c) Copyright 1988 by the Massachusetts Institute of Technology.
4 * For copying and distribution information, please see the file
5 * <mit-copyright.h>.
6 */
7
8#include <mit-copyright.h>
9#include <stdio.h>
10#include <moira.h>
11#include "dbck.h"
208a4f4a 12EXEC SQL INCLUDE sqlca;
68bbc9c3 13
14static char phase2_qc_rcsid[] = "$Header$";
15
16
17show_mcm_mach(id)
18int id;
208a4f4a 19{
20 EXEC SQL BEGIN DECLARE SECTION;
21 int iid = id, found = 1;
22 char name[33];
23 EXEC SQL END DECLARE SECTION;
24
208a4f4a 25 EXEC SQL DECLARE csr201 CURSOR FOR
26 SELECT cluster.name FROM cluster, mcmap
27 WHERE cluster.clu_id=mcmap.clu_id AND mcmap.mach_id = :iid;
ced12e61 28 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 29 EXEC SQL OPEN csr201;
30 while(1) {
31 EXEC SQL FETCH csr201 INTO :name;
7bf0a6f3 32 if (sqlca.sqlcode != 0) {
33 ingerr(&sqlca.sqlcode);
34 break;
35 }
68bbc9c3 36
208a4f4a 37 strtrim(name);
38 found = 0;
39 printf("Clusqter %s, non-existant machine %d in cluster map\n", name, id);
40 }
41 EXEC SQL CLOSE csr201;
68bbc9c3 42 return(found);
208a4f4a 43}
68bbc9c3 44
45show_mcm_clu(id)
46int id;
208a4f4a 47{
48 EXEC SQL BEGIN DECLARE SECTION;
49 int iid = id, found = 1;
50 char name[33];
51 EXEC SQL END DECLARE SECTION;
52
208a4f4a 53 EXEC SQL DECLARE csr202 CURSOR FOR
54 SELECT machine.name FROM machine, mcmap
55 WHERE machine.mach_id=mcmap.mach_id AND mcmap.clu_id=:iid;
ced12e61 56 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 57 EXEC SQL OPEN csr202;
58 while(1) {
59 EXEC SQL FETCH csr202 INTO :name;
7bf0a6f3 60 if (sqlca.sqlcode != 0) {
61 ingerr(&sqlca.sqlcode);
62 break;
63 }
68bbc9c3 64
208a4f4a 65 strtrim(name);
66 found = 0;
67 printf("Machine %s, non-existant cluster %d in cluster map\n", name, id);
68 }
69 EXEC SQL CLOSE csr202;
68bbc9c3 70 return(found);
208a4f4a 71}
68bbc9c3 72
73pobox_check(id, u, hint)
74int id;
75struct user *u;
76int hint;
77{
78 switch (u->potype) {
79 case 'P':
80 if (!hash_lookup(machines, u->pobox_id)) {
81 printf("User %s(%s) has P.O.Box on non-existant machine %d\n",
82 u->login, u->fullname, u->pobox_id);
83 if (single_fix("Delete", 0)) {
84 remove_pobox(u->users_id);
85 u->potype = 'N';
86 }
87 }
88 break;
89 case 'S':
90 if (!string_check(u->pobox_id)) {
91 printf("User %s(%s) has P.O.Box with non-existant string %d\n",
92 u->login, u->fullname, u->pobox_id);
93 if (single_fix("Delete", 0)) {
94 remove_pobox(u->users_id);
95 u->potype = 'N';
96 }
97 }
98 break;
99 default:
100 ;
101 }
102}
103
104
105remove_pobox(id)
106int id;
208a4f4a 107{
108 EXEC SQL BEGIN DECLARE SECTION;
109 int rowcount, iid = id;
110 EXEC SQL END DECLARE SECTION;
7bf0a6f3 111
208a4f4a 112 EXEC SQL UPDATE users SET potype='NONE' WHERE users.users_id = :iid;
113 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
68bbc9c3 114 if (rowcount > 0)
115 printf("%d entr%s removed\n", rowcount, rowcount==1?"y":"ies");
116 else
117 printf("Not removed\n");
118 modified("users");
208a4f4a 119}
68bbc9c3 120
121show_svc(id)
122int id;
208a4f4a 123{
124 EXEC SQL BEGIN DECLARE SECTION;
125 int iid = id, found = 1;
126 char label[17], data[33];
127 EXEC SQL END DECLARE SECTION;
128
208a4f4a 129 EXEC SQL DECLARE csr203 CURSOR FOR
130 SELECT serv_label, serv_cluster FROM svc
131 WHERE clu_id = :iid;
ced12e61 132 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 133 EXEC SQL OPEN csr203;
134 while(1) {
135 EXEC SQL FETCH csr203 INTO :label, :data;
7bf0a6f3 136 if (sqlca.sqlcode != 0) {
137 ingerr(&sqlca.sqlcode);
138 break;
139 }
208a4f4a 140
141 strtrim(label);
142 strtrim(data);
143 found = 0;
144 printf("Cluster data [%s] %s for non-existant cluster %d\n",
145 label, data, id);
146 }
147 EXEC SQL CLOSE csr203;
68bbc9c3 148 return(found);
208a4f4a 149}
68bbc9c3 150
151list_check(id, l, hint)
152int id;
153struct list *l;
154int hint;
155{
156 switch (l->acl_type) {
157 case 'L':
158 if (!hash_lookup(lists, l->acl_id)) {
159 printf("List %s has bad LIST acl %d\n", l->name, l->acl_id);
160 if (single_fix("Patch", 1)) {
161 fix_list_acl(l->list_id);
162 }
163 }
164 break;
165 case 'U':
166 if (!hash_lookup(users, l->acl_id)) {
167 printf("List %s has bad USER acl %d\n", l->name, l->acl_id);
168 if (single_fix("Patch", 1)) {
169 fix_list_acl(l->list_id);
170 }
171 }
172 break;
173 }
174}
175
176fix_list_acl(id)
177int id;
208a4f4a 178{
179 EXEC SQL BEGIN DECLARE SECTION;
180 int rowcount, iid = id;
181 EXEC SQL END DECLARE SECTION;
182
208a4f4a 183 EXEC SQL UPDATE list SET acl_id = :iid, acl_type='LIST'
184 WHERE list_id = :iid;
185 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
68bbc9c3 186 if (rowcount > 0)
187 printf("%d entr%s fixed\n", rowcount, rowcount==1?"y":"ies");
188 else
189 printf("Not fixed\n");
190 modified("list");
208a4f4a 191}
68bbc9c3 192
193
194show_member_list(id)
195int id;
208a4f4a 196{
197 EXEC SQL BEGIN DECLARE SECTION;
198 int mid, iid = id, found = 1;
199 char mtype[9], *name = "";
200 EXEC SQL END DECLARE SECTION;
201
208a4f4a 202 EXEC SQL DECLARE csr204 CURSOR FOR
203 SELECT member_type, member_id FROM imembers
204 WHERE list_id = :iid AND direct=1;
ced12e61 205 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 206 EXEC SQL OPEN csr204;
207 while(1) {
208 EXEC SQL FETCH csr204 INTO :mtype, :mid;
7bf0a6f3 209 if (sqlca.sqlcode != 0) {
210 ingerr(&sqlca.sqlcode);
211 break;
212 }
208a4f4a 213
214 strtrim(mtype);
215 found = 0;
216 if (mtype[0] == 'L')
217 name = ((struct list *) hash_lookup(lists, mid))->name;
218 else if (mtype[0] == 'U')
219 name = ((struct user *) hash_lookup(users, mid))->login;
220 else if (mtype[0] == 'S' || mtype[0] == 'K')
221 name = ((struct string *) hash_lookup(strings, mid))->name;
222 printf("Non-existant list %d has member %s %s\n", iid, mtype, name);
223 }
224 EXEC SQL CLOSE csr204;
68bbc9c3 225 return(found);
208a4f4a 226}
68bbc9c3 227
228show_mem_user(id)
229int id;
208a4f4a 230{
231 EXEC SQL BEGIN DECLARE SECTION;
232 int lid, iid = id, found = 1;
233 char name[33];
234 EXEC SQL END DECLARE SECTION;
235
208a4f4a 236 EXEC SQL DECLARE csr205 CURSOR FOR
237 SELECT list_id FROM imembers
238 WHERE member_id = :iid AND member_type='USER' AND direct=1;
ced12e61 239 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 240 EXEC SQL OPEN csr205;
241 while(1) {
242 EXEC SQL FETCH csr205 INTO :lid;
7bf0a6f3 243 if (sqlca.sqlcode != 0) {
244 ingerr(&sqlca.sqlcode);
245 break;
246 }
208a4f4a 247
248 found = 0;
249 printf("List %s has non-existant user member, id %d\n",
250 ((struct list *)hash_lookup(lists, lid))->name, iid);
251 }
252 EXEC SQL CLOSE csr205;
68bbc9c3 253 return(found);
208a4f4a 254}
68bbc9c3 255
256show_mem_list(id)
257int id;
208a4f4a 258{
259 EXEC SQL BEGIN DECLARE SECTION;
260 int lid, iid = id, found = 1;
261 char name[33];
262 EXEC SQL END DECLARE SECTION;
263
208a4f4a 264 EXEC SQL DECLARE csr206 CURSOR FOR
265 SELECT list_id FROM imembers
266 WHERE member_id = :iid AND member_type='LIST' AND direct=1;
ced12e61 267 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 268 EXEC SQL OPEN csr206;
269 while(1) {
270 EXEC SQL FETCH csr206 INTO :lid;
7bf0a6f3 271 if (sqlca.sqlcode != 0) {
272 ingerr(&sqlca.sqlcode);
273 break;
274 }
208a4f4a 275
276 found = 0;
277 printf("List %s has non-existant list member, id %d\n",
278 ((struct list *)hash_lookup(lists, lid))->name, iid);
279 }
280 EXEC SQL CLOSE csr206;
68bbc9c3 281 return(found);
208a4f4a 282}
68bbc9c3 283
284show_mem_str(id)
285int id;
208a4f4a 286{
287 EXEC SQL BEGIN DECLARE SECTION;
288 int lid, iid = id, found = 1;
289 char name[33];
290 EXEC SQL END DECLARE SECTION;
291
208a4f4a 292 EXEC SQL DECLARE csr207 CURSOR FOR
293 SELECT list_id FROM imembers
294 WHERE member_id = :iid AND member_type='STRING' AND direct=1;
ced12e61 295 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 296 EXEC SQL OPEN csr207;
297 while(1) {
298 EXEC SQL FETCH csr207 INTO :lid;
7bf0a6f3 299 if (sqlca.sqlcode != 0) {
300 ingerr(&sqlca.sqlcode);
301 break;
302 }
208a4f4a 303
304 found = 0;
305 printf("List %s has non-existant string member, id %d\n",
306 ((struct list *)hash_lookup(lists, lid))->name, iid);
307 }
308 EXEC SQL CLOSE csr207;
68bbc9c3 309 return(found);
208a4f4a 310}
68bbc9c3 311
312
313show_mem_krb(id)
314int id;
208a4f4a 315{
316 EXEC SQL BEGIN DECLARE SECTION;
317 int lid, iid = id, found = 1;
318 char name[33];
319 EXEC SQL END DECLARE SECTION;
320
208a4f4a 321 EXEC SQL DECLARE csr208 CURSOR FOR
322 SELECT list_id FROM imembers
323 WHERE member_id = :iid AND member_type='KERBEROS' AND direct=1;
ced12e61 324 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 325 EXEC SQL OPEN csr208;
326 while(1) {
327 EXEC SQL FETCH csr208 INTO :lid;
7bf0a6f3 328 if (sqlca.sqlcode != 0) {
329 ingerr(&sqlca.sqlcode);
330 break;
331 }
68bbc9c3 332
208a4f4a 333 found = 0;
334 printf("List %s has non-existant kerberos member, id %d\n",
335 ((struct list *)hash_lookup(lists, lid))->name, iid);
336 }
337 EXEC SQL CLOSE csr208;
338 return(found);
339}
68bbc9c3 340
68bbc9c3 341
208a4f4a 342del_mem_user(id)
343EXEC SQL BEGIN DECLARE SECTION;
344int id;
345EXEC SQL END DECLARE SECTION;
346{
347 EXEC SQL BEGIN DECLARE SECTION;
348 int rowcount;
349 EXEC SQL END DECLARE SECTION;
350
208a4f4a 351 EXEC SQL DELETE FROM imembers WHERE member_type='USER' AND
352 member_id = :id AND direct = 1;
353 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
68bbc9c3 354 if (rowcount > 0)
355 printf("%d entr%s deleted\n", rowcount, rowcount==1?"y":"ies");
356 else
357 printf("Not deleted\n");
358 modified("imembers");
208a4f4a 359}
68bbc9c3 360
208a4f4a 361del_mem_list(id)
362EXEC SQL BEGIN DECLARE SECTION;
363int id;
364EXEC SQL END DECLARE SECTION;
365{
366 EXEC SQL BEGIN DECLARE SECTION;
367 int rowcount;
368 EXEC SQL END DECLARE SECTION;
369
208a4f4a 370 EXEC SQL DELETE FROM imembers WHERE member_type='LIST' AND
371 member_id = :id AND direct=1;
372 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
68bbc9c3 373 if (rowcount > 0)
374 printf("%d entr%s deleted\n", rowcount, rowcount==1?"y":"ies");
375 else
376 printf("Not deleted\n");
377 modified("imembers");
208a4f4a 378}
68bbc9c3 379
208a4f4a 380del_mem_str(id)
381EXEC SQL BEGIN DECLARE SECTION;
382int id;
383EXEC SQL END DECLARE SECTION;
384{
385 EXEC SQL BEGIN DECLARE SECTION;
386 int rowcount;
387 EXEC SQL END DECLARE SECTION;
388
208a4f4a 389 EXEC SQL DELETE FROM imembers WHERE member_type='STRING' AND
390 member_id = :id AND direct=1;
391 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
68bbc9c3 392 if (rowcount > 0)
393 printf("%d entr%s deleted\n", rowcount, rowcount==1?"y":"ies");
394 else
395 printf("Not deleted\n");
396 modified("imembers");
208a4f4a 397}
68bbc9c3 398
68bbc9c3 399
208a4f4a 400del_mem_krb(id)
401EXEC SQL BEGIN DECLARE SECTION;
402int id;
403EXEC SQL END DECLARE SECTION;
404{
405 EXEC SQL BEGIN DECLARE SECTION;
406 int rowcount;
407 EXEC SQL END DECLARE SECTION;
408
208a4f4a 409 EXEC SQL DELETE FROM imembers WHERE member_type='KERBEROS' AND
410 member_id = :id AND direct=1;
411 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
68bbc9c3 412 if (rowcount > 0)
413 printf("%d entr%s deleted\n", rowcount, rowcount==1?"y":"ies");
414 else
415 printf("Not deleted\n");
416 modified("imembers");
208a4f4a 417}
68bbc9c3 418
419
208a4f4a 420show_sh(id)
421EXEC SQL BEGIN DECLARE SECTION;
422int id;
423EXEC SQL END DECLARE SECTION;
424{
425 EXEC SQL BEGIN DECLARE SECTION;
426 char name[33];
427 EXEC SQL END DECLARE SECTION;
68bbc9c3 428 int found = 1;
429
208a4f4a 430 EXEC SQL DECLARE csr209 CURSOR FOR
431 SELECT service FROM serverhosts
432 WHERE mach_id = :id;
ced12e61 433 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 434 EXEC SQL OPEN csr209;
435 while(1) {
436 EXEC SQL FETCH csr209 INTO :name;
7bf0a6f3 437 if (sqlca.sqlcode != 0) {
438 ingerr(&sqlca.sqlcode);
439 break;
440 }
208a4f4a 441
442 found = 0;
443 printf("ServerHost entry for service %s non-existant host %d\n",
444 name, id);
445 }
446 EXEC SQL CLOSE csr209;
68bbc9c3 447 return(found);
208a4f4a 448}
68bbc9c3 449
208a4f4a 450del_sh_mach(id)
451EXEC SQL BEGIN DECLARE SECTION;
452int id;
453EXEC SQL END DECLARE SECTION;
454{
455 EXEC SQL BEGIN DECLARE SECTION;
456 int rowcount;
457 EXEC SQL END DECLARE SECTION;
68bbc9c3 458
208a4f4a 459 EXEC SQL DELETE FROM serverhosts WHERE mach_id = :id;
460 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
68bbc9c3 461 if (rowcount > 0)
462 printf("%d entr%s deleted\n", rowcount, rowcount==1?"y":"ies");
463 else
464 printf("Not deleted\n");
465 modified("serverhosts");
208a4f4a 466}
68bbc9c3 467
468
469static int fnchecklen;
470
471fsmatch(id, n, f)
472int id;
473struct nfsphys *n;
474struct filesys *f;
475{
476 if (n->mach_id == f->mach_id &&
477 !strncmp(f->dir, n->dir, strlen(n->dir)) &&
478 strlen(n->dir) > fnchecklen) {
479 f->phys_id = id;
480 fnchecklen = strlen(n->dir);
481 }
482}
483
484
208a4f4a 485check_fs(id, f, hint)
486EXEC SQL BEGIN DECLARE SECTION;
487int id;
488EXEC SQL END DECLARE SECTION;
68bbc9c3 489register struct filesys *f;
490int hint;
208a4f4a 491{
492 EXEC SQL BEGIN DECLARE SECTION;
493 int id1, id2, id3, rowcount;
494 char *dir;
495 EXEC SQL END DECLARE SECTION;
68bbc9c3 496 struct nfsphys *n;
497 struct machine *m;
498
499 if (!hash_lookup(machines, f->mach_id)) {
500 printf("Filesys %s with bad machine %d\n", f->name, f->mach_id);
501 if (single_fix("Fix", 0)) {
208a4f4a 502 EXEC SQL UPDATE filesys SET mach_id = 0 WHERE filsys_id = :id;
503 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
68bbc9c3 504 if (rowcount > 0)
505 printf("%d entr%s fixed\n",rowcount, rowcount==1?"y":"ies");
506 else
507 printf("Not fixed\n");
508 modified("filesys");
509 f->mach_id = 0;
510 }
511 }
512
513 if (!hash_lookup(users, f->owner)) {
514 printf("Filesys %s with bad owning user %d\n", f->name, f->owner);
515 if (single_fix("Fix", 1)) {
516 zero_fix("filesys", "owner", "filsys_id", f->filsys_id);
517 f->owner = 0;
518 }
519 }
520 if (!hash_lookup(lists, f->owners)) {
521 printf("Filesys %s with bad owning group %d\n", f->name, f->owners);
522 if (single_fix("Fix", 1)) {
523 zero_fix("filesys", "owners", "filsys_id", f->filsys_id);
524 f->owners = 0;
525 }
526 }
527
528 if (f->type == 'N') {
529 if (!hash_lookup(nfsphys, f->phys_id)) {
530 m = (struct machine *)hash_lookup(machines, f->mach_id);
531 printf("Filesys %s with bad phys_id %d\n", f->name, f->phys_id);
532 if (single_fix("Fix", 1)) {
533 fnchecklen = 0;
534 hash_step(nfsphys, fsmatch, f);
535 if (fnchecklen != 0) {
536 id1 = f->phys_id;
537 id2 = f->filsys_id;
538 id3 = f->mach_id;
208a4f4a 539 EXEC SQL UPDATE filesys SET phys_id = :id1 WHERE filsys_id = :id2;
540 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
68bbc9c3 541 if (rowcount > 0)
542 printf("%d entr%s fixed\n",rowcount, rowcount==1?"y":"ies");
543 else
544 printf("Not fixed\n");
545 modified("filesys");
546 } else {
547 printf("No NFSphys exsits for %s:%s\n", m->name, f->dir);
548 if (single_fix("Create", 0)) {
549 dir = f->dir;
550 id1 = f->phys_id;
551 id2 = f->filsys_id;
552 id3 = f->mach_id;
553 if (set_next_object_id("nfsphys_id", "nfsphys") !=
554 MR_SUCCESS) {
555 printf("Unable to assign unique ID\n");
556 return;
557 }
208a4f4a 558 EXEC SQL SELECT COUNT(*) INTO :rowcount FROM numvalues
559 WHERE name='nfsphys_id';
68bbc9c3 560 if (rowcount != 1) {
561 printf("Unable to retrieve unique ID\n");
562 return;
563 }
208a4f4a 564 EXEC SQL INSERT INTO mfsphys (mfsphys_id, mach_id,
565 device, dir, status, allocated, size, modtime,
566 modby, modwith) VALUES (:id1, :id3, '???', :dir,
567 0, 0, 0, 'now', 0, 'dbck');
568 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
68bbc9c3 569 if (rowcount > 0)
570 printf("%d entr%s created\n", rowcount,
571 rowcount==1?"y":"ies");
572 else
573 printf("Not created\n");
574 modified("nfsphys");
575 n = (struct nfsphys *)malloc(sizeof(struct nfsphys));
576 if (n == NULL)
577 out_of_mem("storing new nfsphys");
578 strcpy(n->dir, dir);
579 n->mach_id = id3;
580 n->nfsphys_id = id1;
581 n->allocated = 0;
582 n->count = 0;
583 hash_store(nfsphys, id1, n);
208a4f4a 584 EXEC SQL UPDATE filesys SET phys_id = :id1
585 WHERE filsys_id = :id2;
586 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
68bbc9c3 587 if (rowcount > 0)
588 printf("%d filesys entr%s fixed\n", rowcount,
589 rowcount==1?"y":"ies");
590 else
591 printf("Not fixed\n");
592 modified("filesys");
593 }
594 }
595 }
596 }
597 }
208a4f4a 598}
68bbc9c3 599
600
601check_nfsphys(id, n, hint)
602int id;
603struct nfsphys *n;
604int hint;
605{
606 if (!hash_lookup(machines, n->mach_id)) {
607 printf("NFSphys %d(%s) on non-existant machine %d\n",
608 id, n->dir, n->mach_id);
609 if (single_fix("Delete", 0))
610 single_delete("nfsphys", "nfsphys_id", id);
611 }
612}
613
208a4f4a 614show_fsg_missing(id)
615EXEC SQL BEGIN DECLARE SECTION;
616int id;
617EXEC SQL END DECLARE SECTION;
618{
619 EXEC SQL BEGIN DECLARE SECTION;
620 int id1, found = 1;
621 EXEC SQL END DECLARE SECTION;
68bbc9c3 622 struct filesys *f;
623
208a4f4a 624 EXEC SQL DECLARE csr210 CURSOR FOR
625 SELECT filsys_id FROM fsgroup
626 WHERE group_id = :id;
ced12e61 627 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 628 EXEC SQL OPEN csr210;
629 while(1) {
630 EXEC SQL FETCH csr210 INTO :id1;
7bf0a6f3 631 if (sqlca.sqlcode != 0) {
632 ingerr(&sqlca.sqlcode);
633 break;
634 }
208a4f4a 635
636 found = 0;
637 if (f = (struct filesys *) hash_lookup(filesys, id1))
638 printf("Missing fsgroup %d has member filesystem %s\n", id, f->name);
639 else
640 printf("Missing fsgroup %d has member filesystem %d\n", id, id1);
641 }
642 EXEC SQL CLOSE csr210;
68bbc9c3 643 return(found);
208a4f4a 644}
68bbc9c3 645
646show_fsg_type(f)
647struct filesys *f;
648{
649 char *t;
650
651 switch (f->type) {
652 case 'N':
653 t = "NFS";
654 break;
655 case 'R':
656 t = "RVD";
657 break;
658 case 'A':
659 t = "AFS";
660 break;
661 case 'E':
662 t = "ERR";
663 break;
664 case 'F':
665 t = "FSGROUP";
666 break;
667 case 'M':
668 t = "MUL";
669 break;
670 default:
671 t = "???";
672 }
673 printf("FSGroup %s has type %s instead of FSGROUP\n", f->name, t);
674 return(0);
675}
676
677fix_fsg_type(f)
678struct filesys *f;
208a4f4a 679{
680 EXEC SQL BEGIN DECLARE SECTION;
681 int rowcount, id = f->filsys_id;
682 EXEC SQL END DECLARE SECTION;
68bbc9c3 683
208a4f4a 684 EXEC SQL UPDATE filesys SET type='FSGROUP' WHERE filsys_id = :id;
685 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
68bbc9c3 686 if (rowcount > 0)
687 printf("%d entr%s fixed\n", rowcount, rowcount==1?"y":"ies");
688 else
689 printf("Not fixed\n");
690 modified("filesys");
208a4f4a 691}
68bbc9c3 692
208a4f4a 693show_fsg_nomember(id)
694EXEC SQL BEGIN DECLARE SECTION;
695int id;
696EXEC SQL END DECLARE SECTION;
697{
698 EXEC SQL BEGIN DECLARE SECTION;
699 int id1, found = 1;
700 EXEC SQL END DECLARE SECTION;
68bbc9c3 701 struct filesys *f;
702
208a4f4a 703 EXEC SQL DECLARE csr211 CURSOR FOR
704 SELECT group_id FROM fsgroup
705 WHERE filsys_id = :id;
ced12e61 706 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 707 EXEC SQL OPEN csr211;
708 while(1) {
709 EXEC SQL FETCH csr211 INTO :id1;
7bf0a6f3 710 if (sqlca.sqlcode != 0) {
711 ingerr(&sqlca.sqlcode);
712 break;
713 }
208a4f4a 714
715 found = 0;
716 if (f = (struct filesys *) hash_lookup(filesys, id1))
717 printf("FSGroup %s has missing member %d\n", f->name, id);
718 else
719 printf("FSGroup %d has missing member %d\n", id1, id);
720 }
721 EXEC SQL CLOSE csr211;
68bbc9c3 722 return(found);
208a4f4a 723}
724
725show_quota_nouser(id)
726EXEC SQL BEGIN DECLARE SECTION;
727int id;
728EXEC SQL END DECLARE SECTION;
729{
730 EXEC SQL BEGIN DECLARE SECTION;
731 int id1, found = 1;
732 EXEC SQL END DECLARE SECTION;
733
208a4f4a 734 EXEC SQL DECLARE csr212 CURSOR FOR
735 SELECT filsys_id FROM quota
736 WHERE entity_id = :id AND type='USER';
ced12e61 737 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 738 EXEC SQL OPEN csr212;
739 while(1) {
740 EXEC SQL FETCH csr212 INTO :id1;
7bf0a6f3 741 if (sqlca.sqlcode != 0) {
742 ingerr(&sqlca.sqlcode);
743 break;
744 }
208a4f4a 745
746 found = 0;
747 printf("Quota on fs %d for non-existant user %d\n", id1, id);
748 }
749 EXEC SQL CLOSE csr212;
68bbc9c3 750 return(found);
208a4f4a 751}
752
753show_quota_nolist(id)
754EXEC SQL BEGIN DECLARE SECTION;
755int id;
756EXEC SQL END DECLARE SECTION;
757{
758 EXEC SQL BEGIN DECLARE SECTION;
759 int id1, found = 1;
760 EXEC SQL END DECLARE SECTION;
761
208a4f4a 762 EXEC SQL DECLARE csr213 CURSOR FOR
763 SELECT filsys_id FROM quota
764 WHERE entity_id = :id AND type='GROUP';
ced12e61 765 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 766 EXEC SQL OPEN csr213;
767 while(1) {
768 EXEC SQL FETCH csr213 INTO :id1;
7bf0a6f3 769 if (sqlca.sqlcode != 0) {
770 ingerr(&sqlca.sqlcode);
771 break;
772 }
208a4f4a 773
774 found = 0;
775 printf("Quota on fs %d for non-existant list %d\n", id1, id);
776 }
777 EXEC SQL CLOSE csr213;
68bbc9c3 778 return(found);
208a4f4a 779}
68bbc9c3 780
208a4f4a 781fix_quota_nouser(id)
782EXEC SQL BEGIN DECLARE SECTION;
783int id;
784EXEC SQL END DECLARE SECTION;
785{
786 EXEC SQL BEGIN DECLARE SECTION;
787 int rowcount, id1;
788 EXEC SQL END DECLARE SECTION;
68bbc9c3 789
790 id1 = ((struct filesys *)hash_lookup(filesys, id))->phys_id;
208a4f4a 791 EXEC SQL DELETE FROM quota
792 WHERE entity_id = :id AND type = 'USER';
793 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
68bbc9c3 794 if (rowcount > 0)
795 printf("%d entr%s deleted\n",rowcount, rowcount==1?"y":"ies");
796 else
797 printf("Not deleted\n");
798 modified("quota");
208a4f4a 799}
68bbc9c3 800
208a4f4a 801fix_quota_nolist(id)
802EXEC SQL BEGIN DECLARE SECTION;
803int id;
804EXEC SQL END DECLARE SECTION;
805{
806 EXEC SQL BEGIN DECLARE SECTION;
807 int rowcount, id1;
808 EXEC SQL END DECLARE SECTION;
68bbc9c3 809
810 id1 = ((struct filesys *)hash_lookup(filesys, id))->phys_id;
208a4f4a 811 EXEC SQL DELETE FROM quota WHERE entity_id = :id AND type='GROUP';
812 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
68bbc9c3 813 if (rowcount > 0)
814 printf("%d entr%s deleted\n",rowcount, rowcount==1?"y":"ies");
815 else
816 printf("Not deleted\n");
817 modified("quota");
208a4f4a 818}
819
820show_quota_nofs(id)
821EXEC SQL BEGIN DECLARE SECTION;
822int id;
823EXEC SQL END DECLARE SECTION;
824{
825 EXEC SQL BEGIN DECLARE SECTION;
826 int id1, found = 1;
827 char type[9];
828 EXEC SQL END DECLARE SECTION;
829
208a4f4a 830 EXEC SQL DECLARE csr214 CURSOR FOR
831 SELECT entity_id, type FROM quota
832 WHERE filsys_id = :id;
ced12e61 833 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 834 EXEC SQL OPEN csr214;
835 while(1) {
836 EXEC SQL FETCH csr214 INTO :id1, :type;
7bf0a6f3 837 if (sqlca.sqlcode != 0) {
838 ingerr(&sqlca.sqlcode);
839 break;
840 }
208a4f4a 841
842 found = 0;
843 printf("Quota for %s %d on non-existant filesys %d\n", type, id1, id);
844 }
845 EXEC SQL CLOSE csr214;
68bbc9c3 846 return(found);
208a4f4a 847}
68bbc9c3 848
849fix_quota_nofs(id)
850{
851 single_delete("quota", "filsys_id", id);
852}
853
208a4f4a 854show_quota_wrongpid(id)
855EXEC SQL BEGIN DECLARE SECTION;
856int id;
857EXEC SQL END DECLARE SECTION;
858{
859 EXEC SQL BEGIN DECLARE SECTION;
860 int id1, found = 1;
861 char type[9];
862 EXEC SQL END DECLARE SECTION;
68bbc9c3 863 struct user *u;
864 struct filesys *f;
865
866 f = (struct filesys *)hash_lookup(filesys, id);
208a4f4a 867 EXEC SQL DECLARE csr215 CURSOR FOR
868 SELECT entity_id, type FROM quota
869 WHERE filsys_id = :id;
ced12e61 870 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 871 EXEC SQL OPEN csr215;
872 while(1) {
873 EXEC SQL FETCH csr215 INTO :id1, :type;
7bf0a6f3 874 if (sqlca.sqlcode != 0) {
875 ingerr(&sqlca.sqlcode);
876 break;
877 }
208a4f4a 878
879 found = 0;
880 printf("Quota for %s %d on filesys %s has wrong phys_id %d\n",
881 type, id1, f->name, id);
882 }
883 EXEC SQL CLOSE csr215;
68bbc9c3 884 return(found);
208a4f4a 885}
68bbc9c3 886
208a4f4a 887fix_quota_physid(id)
888EXEC SQL BEGIN DECLARE SECTION;
889int id;
890EXEC SQL END DECLARE SECTION;
891{
892 EXEC SQL BEGIN DECLARE SECTION;
893 int rowcount, id1;
894 EXEC SQL END DECLARE SECTION;
68bbc9c3 895
896 id1 = ((struct filesys *)hash_lookup(filesys, id))->phys_id;
208a4f4a 897 EXEC SQL UPDATE quota SET phys_id = :id1
898 WHERE filsys_id = :id AND phys_id != :id1;
899 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
68bbc9c3 900 if (rowcount > 0)
901 printf("%d entr%s fixed\n",rowcount, rowcount==1?"y":"ies");
902 else
903 printf("Not fixed\n");
904 modified("quota");
208a4f4a 905}
68bbc9c3 906
208a4f4a 907show_srv_user(id)
908EXEC SQL BEGIN DECLARE SECTION;
909int id;
910EXEC SQL END DECLARE SECTION;
911{
912 EXEC SQL BEGIN DECLARE SECTION;
913 char name[33];
914 EXEC SQL END DECLARE SECTION;
68bbc9c3 915 int found = 1;
916
208a4f4a 917 EXEC SQL DECLARE csr216 CURSOR FOR
918 SELECT name FROM servers
919 WHERE acl_type='USER' and acl_id = :id;
ced12e61 920 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 921 EXEC SQL OPEN csr216;
922 while(1) {
923 EXEC SQL FETCH csr216 INTO :name;
7bf0a6f3 924 if (sqlca.sqlcode != 0) {
925 ingerr(&sqlca.sqlcode);
926 break;
927 }
208a4f4a 928
68bbc9c3 929 strtrim(name);
930 printf("Service %s has acl non-existant user %d\n", name, id);
931 found = 0;
208a4f4a 932 }
933 EXEC SQL CLOSE csr216;
68bbc9c3 934 return(found);
208a4f4a 935}
68bbc9c3 936
208a4f4a 937show_srv_list(id)
938EXEC SQL BEGIN DECLARE SECTION;
939int id;
940EXEC SQL END DECLARE SECTION;
941{
942 EXEC SQL BEGIN DECLARE SECTION;
943 char name[33];
944 EXEC SQL END DECLARE SECTION;
68bbc9c3 945 int found = 1;
946
208a4f4a 947 EXEC SQL DECLARE csr217 CURSOR FOR
948 SELECT name FROM servers
949 WHERE acl_type='LIST' AND acl_id = :id;
ced12e61 950 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 951 EXEC SQL OPEN csr217;
952 while(1) {
953 EXEC SQL FETCH csr217 INTO :name;
7bf0a6f3 954 if (sqlca.sqlcode != 0) {
955 ingerr(&sqlca.sqlcode);
956 break;
957 }
208a4f4a 958
68bbc9c3 959 strtrim(name);
960 printf("Service %s has acl non-existant list %d\n", name, id);
961 found = 0;
208a4f4a 962 }
963 EXEC SQL CLOSE csr217;
68bbc9c3 964 return(found);
208a4f4a 965}
68bbc9c3 966
208a4f4a 967zero_srv_user(id)
968EXEC SQL BEGIN DECLARE SECTION;
969int id;
970EXEC SQL END DECLARE SECTION;
971{
972 EXEC SQL BEGIN DECLARE SECTION;
973 int rowcount;
974 EXEC SQL END DECLARE SECTION;
975
208a4f4a 976 EXEC SQL UPDATE servers SET acl_id=0 WHERE acl_id = :id AND
977 acl_type='USER';
978 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
68bbc9c3 979 if (rowcount > 0)
980 printf("%d entr%s fixed\n", rowcount, rowcount==1?"y":"ies");
981 else
982 printf("Not fixed\n");
983 modified("servers");
208a4f4a 984}
68bbc9c3 985
208a4f4a 986zero_srv_list(id)
987EXEC SQL BEGIN DECLARE SECTION;
988int id;
989EXEC SQL END DECLARE SECTION;
990{
991 EXEC SQL BEGIN DECLARE SECTION;
992 int rowcount;
993 EXEC SQL END DECLARE SECTION;
994
208a4f4a 995 EXEC SQL UPDATE servers SET acl_id=0 WHERE acl_id = :id AND
996 acl_type='LIST';
997 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
68bbc9c3 998 if (rowcount > 0)
999 printf("%d entr%s fixed\n", rowcount, rowcount==1?"y":"ies");
1000 else
1001 printf("Not fixed\n");
1002 modified("servers");
208a4f4a 1003}
68bbc9c3 1004
1005
208a4f4a 1006show_krb_usr(id)
1007EXEC SQL BEGIN DECLARE SECTION;
1008int id;
1009EXEC SQL END DECLARE SECTION;
1010{
1011 EXEC SQL BEGIN DECLARE SECTION;
1012 int found = 1, id1;
1013 EXEC SQL END DECLARE SECTION;
68bbc9c3 1014 struct string *s;
1015 char *ss;
1016
208a4f4a 1017 EXEC SQL DECLARE csr218 CURSOR FOR
1018 SELECT string_id FROM krbmap
1019 WHERE users_id = :id ;
ced12e61 1020 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 1021 EXEC SQL OPEN csr218;
1022 while(1) {
1023 EXEC SQL FETCH csr218 INTO :id1;
7bf0a6f3 1024 if (sqlca.sqlcode != 0) {
1025 ingerr(&sqlca.sqlcode);
1026 break;
1027 }
208a4f4a 1028
68bbc9c3 1029 if (s = ((struct string *)hash_lookup(strings, id1)))
208a4f4a 1030 ss = s->name;
68bbc9c3 1031 else
208a4f4a 1032 ss = "[unknown]";
68bbc9c3 1033 found = 0;
1034 printf("Kerberos map for non-existant user %d to principal %s\n",
1035 id, s);
208a4f4a 1036 }
1037 EXEC SQL CLOSE csr218;
68bbc9c3 1038 return(found);
208a4f4a 1039}
68bbc9c3 1040
1041
208a4f4a 1042show_krb_str(id)
1043EXEC SQL BEGIN DECLARE SECTION;
1044int id;
1045EXEC SQL END DECLARE SECTION;
1046{
1047 EXEC SQL BEGIN DECLARE SECTION;
1048 int found = 1, id1;
1049 EXEC SQL END DECLARE SECTION;
68bbc9c3 1050 struct user *u;
1051 char *s;
1052
208a4f4a 1053 EXEC SQL DECLARE csr219 CURSOR FOR
1054 SELECT users_id FROM krbmap
1055 WHERE string_id = :id;
ced12e61 1056 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 1057 EXEC SQL OPEN csr219;
1058 while(1) {
1059 EXEC SQL FETCH csr219 INTO :id1;
7bf0a6f3 1060 if (sqlca.sqlcode != 0) {
1061 ingerr(&sqlca.sqlcode);
1062 break;
1063 }
208a4f4a 1064
68bbc9c3 1065 if (u = ((struct user *)hash_lookup(users, id1)))
208a4f4a 1066 s = u->login;
68bbc9c3 1067 else
208a4f4a 1068 s = "[???]";
68bbc9c3 1069 found = 0;
1070 printf("Kerberos map for user %s (%d) to non-existant string %d\n",
1071 s, id1, id);
208a4f4a 1072 }
1073 EXEC SQL CLOSE csr219;
68bbc9c3 1074 return(found);
208a4f4a 1075}
68bbc9c3 1076
1077
208a4f4a 1078show_pdm_mach(id)
1079EXEC SQL BEGIN DECLARE SECTION;
1080int id;
1081EXEC SQL END DECLARE SECTION;
1082{
1083 EXEC SQL BEGIN DECLARE SECTION;
1084 char name[33];
1085 EXEC SQL END DECLARE SECTION;
68bbc9c3 1086 int found = 1;
1087
208a4f4a 1088 EXEC SQL DECLARE csr220 CURSOR FOR
1089 SELECT name FROM palladium
1090 WHERE mach_id = :id;
ced12e61 1091 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 1092 EXEC SQL OPEN csr220;
1093 while(1) {
1094 EXEC SQL FETCH csr220 INTO :name;
7bf0a6f3 1095 if (sqlca.sqlcode != 0) {
1096 ingerr(&sqlca.sqlcode);
1097 break;
1098 }
208a4f4a 1099
68bbc9c3 1100 strtrim(name);
1101 printf("Palladium server/supervisor %s is on non-existant machine %d\n",
1102 name, id);
1103 found = 0;
208a4f4a 1104 }
1105 EXEC SQL CLOSE csr220;
68bbc9c3 1106 return(found);
208a4f4a 1107}
68bbc9c3 1108
1109
1110phase2()
208a4f4a 1111{
1112 EXEC SQL BEGIN DECLARE SECTION;
1113 int id1, id2, id3, id4, id5;
1114 char type[9], name[33];
1115 EXEC SQL END DECLARE SECTION;
68bbc9c3 1116 struct save_queue *sq, *sq1, *sq2, *sq3, *sq4, *sq5;
1117 struct filesys *f;
1118 struct list *l;
1119 struct nfsphys *n;
1120 struct machine *m;
1121
1122 printf("Phase 2 - Checking references\n");
1123
1124 dprintf("Checking users...\n");
1125 hash_step(users, pobox_check, NULL);
1126
1127 dprintf("Checking mcmap...\n");
1128 sq1 = sq_create();
1129 sq2 = sq_create();
208a4f4a 1130 EXEC SQL DECLARE csr221 CURSOR FOR
1131 SELECT mach_id, clu_id FROM mcmap;
ced12e61 1132 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 1133 EXEC SQL OPEN csr221;
1134 while(1) {
1135 EXEC SQL FETCH csr221 INTO :id1, :id2;
7bf0a6f3 1136 if (sqlca.sqlcode != 0) {
1137 ingerr(&sqlca.sqlcode);
1138 break;
1139 }
208a4f4a 1140
68bbc9c3 1141 if (!(m = (struct machine *)hash_lookup(machines, id1)))
208a4f4a 1142 sq_save_unique_data(sq1, id1);
68bbc9c3 1143 if (!hash_lookup(clusters, id2))
208a4f4a 1144 sq_save_unique_data(sq2, id2);
68bbc9c3 1145 if (m) m->clucount++;
208a4f4a 1146 }
1147 EXEC SQL CLOSE csr221;
68bbc9c3 1148 generic_delete(sq1, show_mcm_mach, "mcmap", "mach_id", 1);
1149 generic_delete(sq2, show_mcm_clu, "mcmap", "clu_id", 1);
1150
1151 dprintf("Checking service clusters...\n");
1152 sq1 = sq_create();
208a4f4a 1153 EXEC SQL DECLARE csr222 CURSOR FOR
1154 SELECT clu_id FROM svc;
ced12e61 1155 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 1156 EXEC SQL OPEN csr222;
1157 while(1) {
1158 EXEC SQL FETCH csr222 INTO :id1;
7bf0a6f3 1159 if (sqlca.sqlcode != 0) {
1160 ingerr(&sqlca.sqlcode);
1161 break;
1162 }
208a4f4a 1163
68bbc9c3 1164 if (!hash_lookup(clusters, id1))
1165 sq_save_unique_data(sq1, id1);
208a4f4a 1166 }
1167 EXEC SQL CLOSE csr222;
68bbc9c3 1168 generic_delete(sq1, show_svc, "svc", "clu_id", 1);
1169
1170 dprintf("Checking lists...\n");
1171 hash_step(lists, list_check, NULL);
1172
1173 dprintf("Checking members...\n");
1174 sq1 = sq_create();
1175 sq2 = sq_create();
1176 sq3 = sq_create();
1177 sq4 = sq_create();
1178 sq5 = sq_create();
64842aba 1179
208a4f4a 1180 EXEC SQL DECLARE csr223 CURSOR FOR
64842aba 1181 SELECT list_id, member_type, member_id, ref_count, direct
1182 FROM imembers ORDER BY list_id;
ced12e61 1183 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 1184 EXEC SQL OPEN csr223;
1185 while(1) {
1186 EXEC SQL FETCH csr223 INTO :id1, :type, :id2, :id3, :id4;
7bf0a6f3 1187 if (sqlca.sqlcode != 0) {
1188 ingerr(&sqlca.sqlcode);
1189 break;
1190 }
208a4f4a 1191
68bbc9c3 1192 if ((l = (struct list *) hash_lookup(lists, id1)) == NULL)
1193 sq_save_unique_data(sq1, id1);
1194 else if (type[0] == 'U' && !hash_lookup(users, id2))
1195 sq_save_unique_data(sq2, id2);
1196 else if (type[0] == 'L' && !hash_lookup(lists, id2))
1197 sq_save_unique_data(sq3, id2);
1198 else if (type[0] == 'S' && !string_check(id2))
1199 sq_save_unique_data(sq4, id2);
1200 else if (type[0] == 'K' && !string_check(id2))
1201 sq_save_unique_data(sq5, id2);
1202 else
1203 l->members++;
208a4f4a 1204 }
1205 EXEC SQL CLOSE csr223;
68bbc9c3 1206 generic_delete(sq1, show_member_list, "imembers", "list_id", 1);
1207 generic_fix(sq2, show_mem_user, "Delete", del_mem_user, 1);
1208 generic_fix(sq3, show_mem_list, "Delete", del_mem_list, 1);
1209 generic_fix(sq4, show_mem_str, "Delete", del_mem_str, 1);
1210 generic_fix(sq5, show_mem_krb, "Delete", del_mem_krb, 1);
1211
1212 dprintf("Checking servers...\n");
1213 sq1 = sq_create();
1214 sq2 = sq_create();
208a4f4a 1215 EXEC SQL DECLARE csr224 CURSOR FOR
1216 SELECT name, acl_type, acl_id FROM servers;
ced12e61 1217 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 1218 EXEC SQL OPEN csr224;
1219 while(1) {
1220 EXEC SQL FETCH csr224 INTO :name, :type, :id1;
7bf0a6f3 1221 if (sqlca.sqlcode != 0) {
1222 ingerr(&sqlca.sqlcode);
1223 break;
1224 }
208a4f4a 1225
68bbc9c3 1226 strtrim(type);
1227 if (!strcmp(type, "USER") && !hash_lookup(users, id1)) {
1228 sq_save_data(sq1, id1);
1229 } else if (!strcmp(type, "LIST") && !hash_lookup(lists, id1)) {
1230 sq_save_data(sq2, id1);
1231 }
208a4f4a 1232 }
1233 EXEC SQL CLOSE csr224;
68bbc9c3 1234 generic_fix(sq1, show_srv_user, "Fix", zero_srv_user, 1);
1235 generic_fix(sq2, show_srv_list, "Fix", zero_srv_list, 1);
1236
7bf0a6f3 1237 dprintf("Checking serverhosts...\n");
68bbc9c3 1238 sq = sq_create();
208a4f4a 1239 EXEC SQL DECLARE csr225 CURSOR FOR
7bf0a6f3 1240 SELECT mach_id FROM serverhosts;
ced12e61 1241 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 1242 EXEC SQL OPEN csr225;
1243 while(1) {
1244 EXEC SQL FETCH csr225 INTO :id1;
7bf0a6f3 1245 if (sqlca.sqlcode != 0) {
1246 ingerr(&sqlca.sqlcode);
1247 break;
1248 }
208a4f4a 1249
68bbc9c3 1250 if (!hash_lookup(machines, id1))
1251 sq_save_data(sq, id1);
208a4f4a 1252 }
1253 EXEC SQL CLOSE csr225;
68bbc9c3 1254 generic_fix(sq, show_sh, "Delete", del_sh_mach, 0);
1255
1256 dprintf("Checking nfsphys...\n");
1257 hash_step(nfsphys, check_nfsphys, NULL);
1258
1259 dprintf("Checking filesys...\n");
1260 hash_step(filesys, check_fs, NULL);
1261
1262 dprintf("Checking filesystem groups...\n");
1263 sq1 = sq_create();
1264 sq2 = sq_create();
1265 sq3 = sq_create();
208a4f4a 1266 EXEC SQL DECLARE csr226 CURSOR FOR
1267 SELECT group_id, filsys_id FROM fsgroup;
ced12e61 1268 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 1269 EXEC SQL OPEN csr226;
1270 while(1) {
1271 EXEC SQL FETCH csr226 INTO :id1, :id2;
7bf0a6f3 1272 if (sqlca.sqlcode != 0) {
1273 ingerr(&sqlca.sqlcode);
1274 break;
1275 }
208a4f4a 1276
68bbc9c3 1277 if (!(f = (struct filesys *) hash_lookup(filesys, id1)))
1278 sq_save_data(sq1, id1);
1279 if (!hash_lookup(filesys, id2))
1280 sq_save_data(sq3, id2);
208a4f4a 1281 }
1282 EXEC SQL CLOSE csr226;
68bbc9c3 1283 generic_delete(sq1, show_fsg_missing, "fsgroup", "group_id", 0);
1284 generic_delete(sq3, show_fsg_nomember, "fsgroup", "filsys_id", 1);
1285
1286 dprintf("Checking quotas...\n");
1287 sq1 = sq_create();
1288 sq2 = sq_create();
1289 sq3 = sq_create();
1290 sq4 = sq_create();
208a4f4a 1291 EXEC SQL DECLARE csr227 CURSOR FOR
1292 SELECT entity_id, type, filsys_id, phys_id, quota FROM quota;
ced12e61 1293 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 1294 EXEC SQL OPEN csr227;
1295 while(1) {
1296 EXEC SQL FETCH csr227 INTO :id1, :type, :id2, :id3, :id4;
7bf0a6f3 1297 if (sqlca.sqlcode != 0) {
1298 ingerr(&sqlca.sqlcode);
1299 break;
1300 }
208a4f4a 1301
68bbc9c3 1302 if (type[0] == 'U' && id1 != 0 && !hash_lookup(users, id1))
1303 sq_save_data(sq1, id1);
1304 else if (type[0] == 'G' && !hash_lookup(lists, id1))
1305 sq_save_data(sq4, id1);
1306 else if (!(f = (struct filesys *) hash_lookup(filesys, id2)))
1307 sq_save_data(sq2, id2);
1308 else if (id3 != f->phys_id ||
1309 ((n = (struct nfsphys*) hash_lookup(nfsphys, id3)) ==
1310 (struct nfsphys *)NULL))
1311 sq_save_data(sq3, id2);
1312 else
1313 n->count += id4;
208a4f4a 1314 }
1315 EXEC SQL CLOSE csr227;
68bbc9c3 1316 generic_fix(sq1, show_quota_nouser, "Delete", fix_quota_nouser, 1);
1317 generic_fix(sq2, show_quota_nofs, "Delete", fix_quota_nofs, 0);
1318 generic_fix(sq3, show_quota_wrongpid, "Fix", fix_quota_physid, 1);
1319 generic_fix(sq4, show_quota_nolist, "Delete", fix_quota_nolist, 1);
1320
1321 dprintf("Not checking zephyr.\n");
1322
1323 dprintf("Checking hostaccess...\n");
208a4f4a 1324 EXEC SQL DECLARE csr228 CURSOR FOR
1325 SELECT mach_id, acl_type, acl_id FROM hostaccess;
ced12e61 1326 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 1327 EXEC SQL OPEN csr228;
1328 while(1) {
1329 EXEC SQL FETCH csr228 INTO :id1, :type, :id2;
7bf0a6f3 1330 if (sqlca.sqlcode != 0) {
1331 ingerr(&sqlca.sqlcode);
1332 break;
1333 }
208a4f4a 1334
68bbc9c3 1335 strtrim(type);
1336 if (!hash_lookup(machines, id1)) {
1337 printf("Hostaccess for non-existant host %d\n", id1);
1338 printf("Not fixing this error\n");
1339 }
1340 if (!strcmp(type, "USER") && !hash_lookup(users, id2)) {
1341 printf("Hostaccess for %d is non-existant user %d\n", id1, id2);
1342 printf("Not fixing this error\n");
1343 } else if (!strcmp(type, "LIST") && !hash_lookup(lists, id2)) {
1344 printf("Hostaccess for %d is non-existant list %d\n", id1, id2);
1345 printf("Not fixing this error\n");
1346 }
208a4f4a 1347 }
1348 EXEC SQL CLOSE csr228;
68bbc9c3 1349
1350 dprintf("Checking palladium...\n");
1351 sq1 = sq_create();
208a4f4a 1352 EXEC SQL DECLARE csr229 CURSOR FOR
1353 SELECT mach_id FROM palladium;
ced12e61 1354 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 1355 EXEC SQL OPEN csr229;
1356 while(1) {
1357 EXEC SQL FETCH csr229 INTO :id1;
7bf0a6f3 1358 if (sqlca.sqlcode != 0) {
1359 ingerr(&sqlca.sqlcode);
1360 break;
1361 }
208a4f4a 1362
68bbc9c3 1363 if (!hash_lookup(machines, id1)) {
1364 sq_save_unique_data(sq1, id1);
1365 }
208a4f4a 1366 }
1367 EXEC SQL CLOSE csr229;
68bbc9c3 1368 generic_delete(sq1, show_pdm_mach, "palladium", "mach_id", 1);
1369
1370 dprintf("Checking krbmap...\n");
1371 sq1 = sq_create();
1372 sq2 = sq_create();
208a4f4a 1373 EXEC SQL DECLARE csr230 CURSOR FOR
1374 SELECT users_id, string_id FROM krbmap;
ced12e61 1375 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 1376 EXEC SQL OPEN csr230;
1377 while(1) {
1378 EXEC SQL FETCH csr230 INTO :id1, :id2;
7bf0a6f3 1379 if (sqlca.sqlcode != 0) {
1380 ingerr(&sqlca.sqlcode);
1381 break;
1382 }
208a4f4a 1383
68bbc9c3 1384 if (!hash_lookup(users, id1))
1385 sq_save_unique_data(sq1, id1);
1386 if (!string_check(id2))
1387 sq_save_unique_data(sq2, id2);
208a4f4a 1388 }
1389 EXEC SQL CLOSE csr230;
68bbc9c3 1390 generic_delete(sq1, show_krb_usr, "krbmap", "users_id", 1);
1391 generic_delete(sq2, show_krb_str, "krbmap", "string_id", 1);
1392
1393 dprintf("Checking capacls...\n");
208a4f4a 1394 EXEC SQL DECLARE csr231 CURSOR FOR
1395 SELECT list_id, tag FROM capacls;
ced12e61 1396 if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
208a4f4a 1397 EXEC SQL OPEN csr231;
1398 while(1) {
1399 EXEC SQL FETCH csr231 INTO :id1, :name;
7bf0a6f3 1400 if (sqlca.sqlcode != 0) {
1401 ingerr(&sqlca.sqlcode);
1402 break;
1403 }
208a4f4a 1404
68bbc9c3 1405 if (!hash_lookup(lists, id1)) {
1406 printf("Capacl for %s is non-existant list %d\n", name, id1);
1407 printf("Not fixing this error\n");
1408 }
208a4f4a 1409 }
1410 EXEC SQL CLOSE csr231;
68bbc9c3 1411
208a4f4a 1412}
68bbc9c3 1413
This page took 0.261933 seconds and 5 git commands to generate.