3 * (c) Copyright 1988 by the Massachusetts Institute of Technology.
4 * For copying and distribution information, please see the file
8 #include <mit-copyright.h>
12 EXEC SQL INCLUDE sqlca;
14 static char phase2_qc_rcsid[] = "$Header$";
20 EXEC SQL BEGIN DECLARE SECTION;
21 int iid = id, found = 1;
23 EXEC SQL END DECLARE SECTION;
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;
30 EXEC SQL FETCH csr201 INTO :name;
31 if (sqlca.sqlcode != 0) {
32 ingerr(&sqlca.sqlcode);
38 printf("Clusqter %s, non-existant machine %d in cluster map\n", name, id);
40 EXEC SQL CLOSE csr201;
47 EXEC SQL BEGIN DECLARE SECTION;
48 int iid = id, found = 1;
50 EXEC SQL END DECLARE SECTION;
52 EXEC SQL DECLARE csr202 CURSOR FOR
53 SELECT machine.name FROM machine, mcmap
54 WHERE machine.mach_id=mcmap.mach_id AND mcmap.clu_id=:iid;
57 EXEC SQL FETCH csr202 INTO :name;
58 if (sqlca.sqlcode != 0) {
59 ingerr(&sqlca.sqlcode);
65 printf("Machine %s, non-existant cluster %d in cluster map\n", name, id);
67 EXEC SQL CLOSE csr202;
71 pobox_check(id, u, hint)
78 if (!hash_lookup(machines, u->pobox_id)) {
79 printf("User %s(%s) has P.O.Box on non-existant machine %d\n",
80 u->login, u->fullname, u->pobox_id);
81 if (single_fix("Delete", 0)) {
82 remove_pobox(u->users_id);
88 if (!string_check(u->pobox_id)) {
89 printf("User %s(%s) has P.O.Box with non-existant string %d\n",
90 u->login, u->fullname, u->pobox_id);
91 if (single_fix("Delete", 0)) {
92 remove_pobox(u->users_id);
106 EXEC SQL BEGIN DECLARE SECTION;
107 int rowcount, iid = id;
108 EXEC SQL END DECLARE SECTION;
110 EXEC SQL UPDATE users SET potype='NONE' WHERE users.users_id = :iid;
111 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
113 printf("%d entr%s removed\n", rowcount, rowcount==1?"y":"ies");
115 printf("Not removed\n");
122 EXEC SQL BEGIN DECLARE SECTION;
123 int iid = id, found = 1;
124 char label[17], data[33];
125 EXEC SQL END DECLARE SECTION;
127 EXEC SQL DECLARE csr203 CURSOR FOR
128 SELECT serv_label, serv_cluster FROM svc
130 EXEC SQL OPEN csr203;
132 EXEC SQL FETCH csr203 INTO :label, :data;
133 if (sqlca.sqlcode != 0) {
134 ingerr(&sqlca.sqlcode);
141 printf("Cluster data [%s] %s for non-existant cluster %d\n",
144 EXEC SQL CLOSE csr203;
148 list_check(id, l, hint)
153 switch (l->acl_type) {
155 if (!hash_lookup(lists, l->acl_id)) {
156 printf("List %s has bad LIST acl %d\n", l->name, l->acl_id);
157 if (single_fix("Patch", 1)) {
158 fix_list_acl(l->list_id);
163 if (!hash_lookup(users, l->acl_id)) {
164 printf("List %s has bad USER acl %d\n", l->name, l->acl_id);
165 if (single_fix("Patch", 1)) {
166 fix_list_acl(l->list_id);
176 EXEC SQL BEGIN DECLARE SECTION;
177 int rowcount, iid = id;
178 EXEC SQL END DECLARE SECTION;
180 EXEC SQL UPDATE list SET acl_id = :iid, acl_type='LIST'
181 WHERE list_id = :iid;
182 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
184 printf("%d entr%s fixed\n", rowcount, rowcount==1?"y":"ies");
186 printf("Not fixed\n");
194 EXEC SQL BEGIN DECLARE SECTION;
195 int mid, iid = id, found = 1;
196 char mtype[9], *name = "";
197 EXEC SQL END DECLARE SECTION;
199 EXEC SQL DECLARE csr204 CURSOR FOR
200 SELECT member_type, member_id FROM imembers
201 WHERE list_id = :iid AND direct=1;
202 EXEC SQL OPEN csr204;
204 EXEC SQL FETCH csr204 INTO :mtype, :mid;
205 if (sqlca.sqlcode != 0) {
206 ingerr(&sqlca.sqlcode);
213 name = ((struct list *) hash_lookup(lists, mid))->name;
214 else if (mtype[0] == 'U')
215 name = ((struct user *) hash_lookup(users, mid))->login;
216 else if (mtype[0] == 'S' || mtype[0] == 'K')
217 name = ((struct string *) hash_lookup(strings, mid))->name;
218 printf("Non-existant list %d has member %s %s\n", iid, mtype, name);
220 EXEC SQL CLOSE csr204;
227 EXEC SQL BEGIN DECLARE SECTION;
228 int lid, iid = id, found = 1;
230 EXEC SQL END DECLARE SECTION;
232 EXEC SQL DECLARE csr205 CURSOR FOR
233 SELECT list_id FROM imembers
234 WHERE member_id = :iid AND member_type='USER' AND direct=1;
235 EXEC SQL OPEN csr205;
237 EXEC SQL FETCH csr205 INTO :lid;
238 if (sqlca.sqlcode != 0) {
239 ingerr(&sqlca.sqlcode);
244 printf("List %s has non-existant user member, id %d\n",
245 ((struct list *)hash_lookup(lists, lid))->name, iid);
247 EXEC SQL CLOSE csr205;
254 EXEC SQL BEGIN DECLARE SECTION;
255 int lid, iid = id, found = 1;
257 EXEC SQL END DECLARE SECTION;
259 EXEC SQL DECLARE csr206 CURSOR FOR
260 SELECT list_id FROM imembers
261 WHERE member_id = :iid AND member_type='LIST' AND direct=1;
262 EXEC SQL OPEN csr206;
264 EXEC SQL FETCH csr206 INTO :lid;
265 if (sqlca.sqlcode != 0) {
266 ingerr(&sqlca.sqlcode);
271 printf("List %s has non-existant list member, id %d\n",
272 ((struct list *)hash_lookup(lists, lid))->name, iid);
274 EXEC SQL CLOSE csr206;
281 EXEC SQL BEGIN DECLARE SECTION;
282 int lid, iid = id, found = 1;
284 EXEC SQL END DECLARE SECTION;
286 EXEC SQL DECLARE csr207 CURSOR FOR
287 SELECT list_id FROM imembers
288 WHERE member_id = :iid AND member_type='STRING' AND direct=1;
289 EXEC SQL OPEN csr207;
291 EXEC SQL FETCH csr207 INTO :lid;
292 if (sqlca.sqlcode != 0) {
293 ingerr(&sqlca.sqlcode);
298 printf("List %s has non-existant string member, id %d\n",
299 ((struct list *)hash_lookup(lists, lid))->name, iid);
301 EXEC SQL CLOSE csr207;
309 EXEC SQL BEGIN DECLARE SECTION;
310 int lid, iid = id, found = 1;
312 EXEC SQL END DECLARE SECTION;
314 EXEC SQL DECLARE csr208 CURSOR FOR
315 SELECT list_id FROM imembers
316 WHERE member_id = :iid AND member_type='KERBEROS' AND direct=1;
317 EXEC SQL OPEN csr208;
319 EXEC SQL FETCH csr208 INTO :lid;
320 if (sqlca.sqlcode != 0) {
321 ingerr(&sqlca.sqlcode);
326 printf("List %s has non-existant kerberos member, id %d\n",
327 ((struct list *)hash_lookup(lists, lid))->name, iid);
329 EXEC SQL CLOSE csr208;
335 EXEC SQL BEGIN DECLARE SECTION;
337 EXEC SQL END DECLARE SECTION;
339 EXEC SQL BEGIN DECLARE SECTION;
341 EXEC SQL END DECLARE SECTION;
343 EXEC SQL DELETE FROM imembers WHERE member_type='USER' AND
344 member_id = :id AND direct = 1;
345 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
347 printf("%d entr%s deleted\n", rowcount, rowcount==1?"y":"ies");
349 printf("Not deleted\n");
350 modified("imembers");
354 EXEC SQL BEGIN DECLARE SECTION;
356 EXEC SQL END DECLARE SECTION;
358 EXEC SQL BEGIN DECLARE SECTION;
360 EXEC SQL END DECLARE SECTION;
362 EXEC SQL DELETE FROM imembers WHERE member_type='LIST' AND
363 member_id = :id AND direct=1;
364 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
366 printf("%d entr%s deleted\n", rowcount, rowcount==1?"y":"ies");
368 printf("Not deleted\n");
369 modified("imembers");
373 EXEC SQL BEGIN DECLARE SECTION;
375 EXEC SQL END DECLARE SECTION;
377 EXEC SQL BEGIN DECLARE SECTION;
379 EXEC SQL END DECLARE SECTION;
381 EXEC SQL DELETE FROM imembers WHERE member_type='STRING' AND
382 member_id = :id AND direct=1;
383 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
385 printf("%d entr%s deleted\n", rowcount, rowcount==1?"y":"ies");
387 printf("Not deleted\n");
388 modified("imembers");
393 EXEC SQL BEGIN DECLARE SECTION;
395 EXEC SQL END DECLARE SECTION;
397 EXEC SQL BEGIN DECLARE SECTION;
399 EXEC SQL END DECLARE SECTION;
401 EXEC SQL DELETE FROM imembers WHERE member_type='KERBEROS' AND
402 member_id = :id AND direct=1;
403 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
405 printf("%d entr%s deleted\n", rowcount, rowcount==1?"y":"ies");
407 printf("Not deleted\n");
408 modified("imembers");
413 EXEC SQL BEGIN DECLARE SECTION;
415 EXEC SQL END DECLARE SECTION;
417 EXEC SQL BEGIN DECLARE SECTION;
419 EXEC SQL END DECLARE SECTION;
422 EXEC SQL DECLARE csr209 CURSOR FOR
423 SELECT service FROM serverhosts
425 EXEC SQL OPEN csr209;
427 EXEC SQL FETCH csr209 INTO :name;
428 if (sqlca.sqlcode != 0) {
429 ingerr(&sqlca.sqlcode);
434 printf("ServerHost entry for service %s non-existant host %d\n",
437 EXEC SQL CLOSE csr209;
442 EXEC SQL BEGIN DECLARE SECTION;
444 EXEC SQL END DECLARE SECTION;
446 EXEC SQL BEGIN DECLARE SECTION;
448 EXEC SQL END DECLARE SECTION;
450 EXEC SQL DELETE FROM serverhosts WHERE mach_id = :id;
451 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
453 printf("%d entr%s deleted\n", rowcount, rowcount==1?"y":"ies");
455 printf("Not deleted\n");
456 modified("serverhosts");
460 static int fnchecklen;
467 if (n->mach_id == f->mach_id &&
468 !strncmp(f->dir, n->dir, strlen(n->dir)) &&
469 strlen(n->dir) > fnchecklen) {
471 fnchecklen = strlen(n->dir);
476 check_fs(id, f, hint)
477 EXEC SQL BEGIN DECLARE SECTION;
479 EXEC SQL END DECLARE SECTION;
480 register struct filesys *f;
483 EXEC SQL BEGIN DECLARE SECTION;
484 int id1, id2, id3, rowcount;
486 EXEC SQL END DECLARE SECTION;
490 if (!hash_lookup(machines, f->mach_id)) {
491 printf("Filesys %s with bad machine %d\n", f->name, f->mach_id);
492 if (single_fix("Fix", 0)) {
493 EXEC SQL UPDATE filesys SET mach_id = 0 WHERE filsys_id = :id;
494 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
496 printf("%d entr%s fixed\n",rowcount, rowcount==1?"y":"ies");
498 printf("Not fixed\n");
504 if (!hash_lookup(users, f->owner)) {
505 printf("Filesys %s with bad owning user %d\n", f->name, f->owner);
506 if (single_fix("Fix", 1)) {
507 zero_fix("filesys", "owner", "filsys_id", f->filsys_id);
511 if (!hash_lookup(lists, f->owners)) {
512 printf("Filesys %s with bad owning group %d\n", f->name, f->owners);
513 if (single_fix("Fix", 1)) {
514 zero_fix("filesys", "owners", "filsys_id", f->filsys_id);
519 if (f->type == 'N') {
520 if (!hash_lookup(nfsphys, f->phys_id)) {
521 m = (struct machine *)hash_lookup(machines, f->mach_id);
522 printf("Filesys %s with bad phys_id %d\n", f->name, f->phys_id);
523 if (single_fix("Fix", 1)) {
525 hash_step(nfsphys, fsmatch, f);
526 if (fnchecklen != 0) {
530 EXEC SQL UPDATE filesys SET phys_id = :id1 WHERE filsys_id = :id2;
531 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
533 printf("%d entr%s fixed\n",rowcount, rowcount==1?"y":"ies");
535 printf("Not fixed\n");
538 printf("No NFSphys exsits for %s:%s\n", m->name, f->dir);
539 if (single_fix("Create", 0)) {
544 if (set_next_object_id("nfsphys_id", "nfsphys") !=
546 printf("Unable to assign unique ID\n");
549 EXEC SQL SELECT COUNT(*) INTO :rowcount FROM numvalues
550 WHERE name='nfsphys_id';
552 printf("Unable to retrieve unique ID\n");
555 EXEC SQL INSERT INTO mfsphys (mfsphys_id, mach_id,
556 device, dir, status, allocated, size, modtime,
557 modby, modwith) VALUES (:id1, :id3, '???', :dir,
558 0, 0, 0, 'now', 0, 'dbck');
559 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
561 printf("%d entr%s created\n", rowcount,
562 rowcount==1?"y":"ies");
564 printf("Not created\n");
566 n = (struct nfsphys *)malloc(sizeof(struct nfsphys));
568 out_of_mem("storing new nfsphys");
574 hash_store(nfsphys, id1, n);
575 EXEC SQL UPDATE filesys SET phys_id = :id1
576 WHERE filsys_id = :id2;
577 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
579 printf("%d filesys entr%s fixed\n", rowcount,
580 rowcount==1?"y":"ies");
582 printf("Not fixed\n");
592 check_nfsphys(id, n, hint)
597 if (!hash_lookup(machines, n->mach_id)) {
598 printf("NFSphys %d(%s) on non-existant machine %d\n",
599 id, n->dir, n->mach_id);
600 if (single_fix("Delete", 0))
601 single_delete("nfsphys", "nfsphys_id", id);
606 EXEC SQL BEGIN DECLARE SECTION;
608 EXEC SQL END DECLARE SECTION;
610 EXEC SQL BEGIN DECLARE SECTION;
612 EXEC SQL END DECLARE SECTION;
615 EXEC SQL DECLARE csr210 CURSOR FOR
616 SELECT filsys_id FROM fsgroup
617 WHERE group_id = :id;
618 EXEC SQL OPEN csr210;
620 EXEC SQL FETCH csr210 INTO :id1;
621 if (sqlca.sqlcode != 0) {
622 ingerr(&sqlca.sqlcode);
627 if (f = (struct filesys *) hash_lookup(filesys, id1))
628 printf("Missing fsgroup %d has member filesystem %s\n", id, f->name);
630 printf("Missing fsgroup %d has member filesystem %d\n", id, id1);
632 EXEC SQL CLOSE csr210;
663 printf("FSGroup %s has type %s instead of FSGROUP\n", f->name, t);
670 EXEC SQL BEGIN DECLARE SECTION;
671 int rowcount, id = f->filsys_id;
672 EXEC SQL END DECLARE SECTION;
674 EXEC SQL UPDATE filesys SET type='FSGROUP' WHERE filsys_id = :id;
675 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
677 printf("%d entr%s fixed\n", rowcount, rowcount==1?"y":"ies");
679 printf("Not fixed\n");
683 show_fsg_nomember(id)
684 EXEC SQL BEGIN DECLARE SECTION;
686 EXEC SQL END DECLARE SECTION;
688 EXEC SQL BEGIN DECLARE SECTION;
690 EXEC SQL END DECLARE SECTION;
693 EXEC SQL DECLARE csr211 CURSOR FOR
694 SELECT group_id FROM fsgroup
695 WHERE filsys_id = :id;
696 EXEC SQL OPEN csr211;
698 EXEC SQL FETCH csr211 INTO :id1;
699 if (sqlca.sqlcode != 0) {
700 ingerr(&sqlca.sqlcode);
705 if (f = (struct filesys *) hash_lookup(filesys, id1))
706 printf("FSGroup %s has missing member %d\n", f->name, id);
708 printf("FSGroup %d has missing member %d\n", id1, id);
710 EXEC SQL CLOSE csr211;
714 show_quota_nouser(id)
715 EXEC SQL BEGIN DECLARE SECTION;
717 EXEC SQL END DECLARE SECTION;
719 EXEC SQL BEGIN DECLARE SECTION;
721 EXEC SQL END DECLARE SECTION;
723 EXEC SQL DECLARE csr212 CURSOR FOR
724 SELECT filsys_id FROM quota
725 WHERE entity_id = :id AND type='USER';
726 EXEC SQL OPEN csr212;
728 EXEC SQL FETCH csr212 INTO :id1;
729 if (sqlca.sqlcode != 0) {
730 ingerr(&sqlca.sqlcode);
735 printf("Quota on fs %d for non-existant user %d\n", id1, id);
737 EXEC SQL CLOSE csr212;
741 show_quota_nolist(id)
742 EXEC SQL BEGIN DECLARE SECTION;
744 EXEC SQL END DECLARE SECTION;
746 EXEC SQL BEGIN DECLARE SECTION;
748 EXEC SQL END DECLARE SECTION;
750 EXEC SQL DECLARE csr213 CURSOR FOR
751 SELECT filsys_id FROM quota
752 WHERE entity_id = :id AND type='GROUP';
753 EXEC SQL OPEN csr213;
755 EXEC SQL FETCH csr213 INTO :id1;
756 if (sqlca.sqlcode != 0) {
757 ingerr(&sqlca.sqlcode);
762 printf("Quota on fs %d for non-existant list %d\n", id1, id);
764 EXEC SQL CLOSE csr213;
769 EXEC SQL BEGIN DECLARE SECTION;
771 EXEC SQL END DECLARE SECTION;
773 EXEC SQL BEGIN DECLARE SECTION;
775 EXEC SQL END DECLARE SECTION;
777 id1 = ((struct filesys *)hash_lookup(filesys, id))->phys_id;
778 EXEC SQL DELETE FROM quota
779 WHERE entity_id = :id AND type = 'USER';
780 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
782 printf("%d entr%s deleted\n",rowcount, rowcount==1?"y":"ies");
784 printf("Not deleted\n");
789 EXEC SQL BEGIN DECLARE SECTION;
791 EXEC SQL END DECLARE SECTION;
793 EXEC SQL BEGIN DECLARE SECTION;
795 EXEC SQL END DECLARE SECTION;
797 id1 = ((struct filesys *)hash_lookup(filesys, id))->phys_id;
798 EXEC SQL DELETE FROM quota WHERE entity_id = :id AND type='GROUP';
799 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
801 printf("%d entr%s deleted\n",rowcount, rowcount==1?"y":"ies");
803 printf("Not deleted\n");
808 EXEC SQL BEGIN DECLARE SECTION;
810 EXEC SQL END DECLARE SECTION;
812 EXEC SQL BEGIN DECLARE SECTION;
815 EXEC SQL END DECLARE SECTION;
817 EXEC SQL DECLARE csr214 CURSOR FOR
818 SELECT entity_id, type FROM quota
819 WHERE filsys_id = :id;
820 EXEC SQL OPEN csr214;
822 EXEC SQL FETCH csr214 INTO :id1, :type;
823 if (sqlca.sqlcode != 0) {
824 ingerr(&sqlca.sqlcode);
829 printf("Quota for %s %d on non-existant filesys %d\n", type, id1, id);
831 EXEC SQL CLOSE csr214;
837 single_delete("quota", "filsys_id", id);
840 show_quota_wrongpid(id)
841 EXEC SQL BEGIN DECLARE SECTION;
843 EXEC SQL END DECLARE SECTION;
845 EXEC SQL BEGIN DECLARE SECTION;
848 EXEC SQL END DECLARE SECTION;
852 f = (struct filesys *)hash_lookup(filesys, id);
853 EXEC SQL DECLARE csr215 CURSOR FOR
854 SELECT entity_id, type FROM quota
855 WHERE filsys_id = :id;
856 EXEC SQL OPEN csr215;
858 EXEC SQL FETCH csr215 INTO :id1, :type;
859 if (sqlca.sqlcode != 0) {
860 ingerr(&sqlca.sqlcode);
865 printf("Quota for %s %d on filesys %s has wrong phys_id %d\n",
866 type, id1, f->name, id);
868 EXEC SQL CLOSE csr215;
873 EXEC SQL BEGIN DECLARE SECTION;
875 EXEC SQL END DECLARE SECTION;
877 EXEC SQL BEGIN DECLARE SECTION;
879 EXEC SQL END DECLARE SECTION;
881 id1 = ((struct filesys *)hash_lookup(filesys, id))->phys_id;
882 EXEC SQL UPDATE quota SET phys_id = :id1
883 WHERE filsys_id = :id AND phys_id != :id1;
884 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
886 printf("%d entr%s fixed\n",rowcount, rowcount==1?"y":"ies");
888 printf("Not fixed\n");
893 EXEC SQL BEGIN DECLARE SECTION;
895 EXEC SQL END DECLARE SECTION;
897 EXEC SQL BEGIN DECLARE SECTION;
899 EXEC SQL END DECLARE SECTION;
902 EXEC SQL DECLARE csr216 CURSOR FOR
903 SELECT name FROM servers
904 WHERE acl_type='USER' and acl_id = :id;
905 EXEC SQL OPEN csr216;
907 EXEC SQL FETCH csr216 INTO :name;
908 if (sqlca.sqlcode != 0) {
909 ingerr(&sqlca.sqlcode);
914 printf("Service %s has acl non-existant user %d\n", name, id);
917 EXEC SQL CLOSE csr216;
922 EXEC SQL BEGIN DECLARE SECTION;
924 EXEC SQL END DECLARE SECTION;
926 EXEC SQL BEGIN DECLARE SECTION;
928 EXEC SQL END DECLARE SECTION;
931 EXEC SQL DECLARE csr217 CURSOR FOR
932 SELECT name FROM servers
933 WHERE acl_type='LIST' AND acl_id = :id;
934 EXEC SQL OPEN csr217;
936 EXEC SQL FETCH csr217 INTO :name;
937 if (sqlca.sqlcode != 0) {
938 ingerr(&sqlca.sqlcode);
943 printf("Service %s has acl non-existant list %d\n", name, id);
946 EXEC SQL CLOSE csr217;
951 EXEC SQL BEGIN DECLARE SECTION;
953 EXEC SQL END DECLARE SECTION;
955 EXEC SQL BEGIN DECLARE SECTION;
957 EXEC SQL END DECLARE SECTION;
959 EXEC SQL UPDATE servers SET acl_id=0 WHERE acl_id = :id AND
961 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
963 printf("%d entr%s fixed\n", rowcount, rowcount==1?"y":"ies");
965 printf("Not fixed\n");
970 EXEC SQL BEGIN DECLARE SECTION;
972 EXEC SQL END DECLARE SECTION;
974 EXEC SQL BEGIN DECLARE SECTION;
976 EXEC SQL END DECLARE SECTION;
978 EXEC SQL UPDATE servers SET acl_id=0 WHERE acl_id = :id AND
980 EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
982 printf("%d entr%s fixed\n", rowcount, rowcount==1?"y":"ies");
984 printf("Not fixed\n");
990 EXEC SQL BEGIN DECLARE SECTION;
992 EXEC SQL END DECLARE SECTION;
994 EXEC SQL BEGIN DECLARE SECTION;
996 EXEC SQL END DECLARE SECTION;
1000 EXEC SQL DECLARE csr218 CURSOR FOR
1001 SELECT string_id FROM krbmap
1002 WHERE users_id = :id ;
1003 EXEC SQL OPEN csr218;
1005 EXEC SQL FETCH csr218 INTO :id1;
1006 if (sqlca.sqlcode != 0) {
1007 ingerr(&sqlca.sqlcode);
1011 if (s = ((struct string *)hash_lookup(strings, id1)))
1016 printf("Kerberos map for non-existant user %d to principal %s\n",
1019 EXEC SQL CLOSE csr218;
1025 EXEC SQL BEGIN DECLARE SECTION;
1027 EXEC SQL END DECLARE SECTION;
1029 EXEC SQL BEGIN DECLARE SECTION;
1031 EXEC SQL END DECLARE SECTION;
1035 EXEC SQL DECLARE csr219 CURSOR FOR
1036 SELECT users_id FROM krbmap
1037 WHERE string_id = :id;
1038 EXEC SQL OPEN csr219;
1040 EXEC SQL FETCH csr219 INTO :id1;
1041 if (sqlca.sqlcode != 0) {
1042 ingerr(&sqlca.sqlcode);
1046 if (u = ((struct user *)hash_lookup(users, id1)))
1051 printf("Kerberos map for user %s (%d) to non-existant string %d\n",
1054 EXEC SQL CLOSE csr219;
1060 EXEC SQL BEGIN DECLARE SECTION;
1062 EXEC SQL END DECLARE SECTION;
1064 EXEC SQL BEGIN DECLARE SECTION;
1066 EXEC SQL END DECLARE SECTION;
1069 EXEC SQL DECLARE csr220 CURSOR FOR
1070 SELECT name FROM palladium
1071 WHERE mach_id = :id;
1072 EXEC SQL OPEN csr220;
1074 EXEC SQL FETCH csr220 INTO :name;
1075 if (sqlca.sqlcode != 0) {
1076 ingerr(&sqlca.sqlcode);
1081 printf("Palladium server/supervisor %s is on non-existant machine %d\n",
1085 EXEC SQL CLOSE csr220;
1092 EXEC SQL BEGIN DECLARE SECTION;
1093 int id1, id2, id3, id4, id5;
1094 char type[9], name[33];
1095 EXEC SQL END DECLARE SECTION;
1096 struct save_queue *sq, *sq1, *sq2, *sq3, *sq4, *sq5;
1102 printf("Phase 2 - Checking references\n");
1104 dprintf("Checking users...\n");
1105 hash_step(users, pobox_check, NULL);
1107 dprintf("Checking mcmap...\n");
1110 EXEC SQL DECLARE csr221 CURSOR FOR
1111 SELECT mach_id, clu_id FROM mcmap;
1112 EXEC SQL OPEN csr221;
1114 EXEC SQL FETCH csr221 INTO :id1, :id2;
1115 if (sqlca.sqlcode != 0) {
1116 ingerr(&sqlca.sqlcode);
1120 if (!(m = (struct machine *)hash_lookup(machines, id1)))
1121 sq_save_unique_data(sq1, id1);
1122 if (!hash_lookup(clusters, id2))
1123 sq_save_unique_data(sq2, id2);
1124 if (m) m->clucount++;
1126 EXEC SQL CLOSE csr221;
1127 generic_delete(sq1, show_mcm_mach, "mcmap", "mach_id", 1);
1128 generic_delete(sq2, show_mcm_clu, "mcmap", "clu_id", 1);
1130 dprintf("Checking service clusters...\n");
1132 EXEC SQL DECLARE csr222 CURSOR FOR
1133 SELECT clu_id FROM svc;
1134 EXEC SQL OPEN csr222;
1136 EXEC SQL FETCH csr222 INTO :id1;
1137 if (sqlca.sqlcode != 0) {
1138 ingerr(&sqlca.sqlcode);
1142 if (!hash_lookup(clusters, id1))
1143 sq_save_unique_data(sq1, id1);
1145 EXEC SQL CLOSE csr222;
1146 generic_delete(sq1, show_svc, "svc", "clu_id", 1);
1148 dprintf("Checking lists...\n");
1149 hash_step(lists, list_check, NULL);
1151 dprintf("Checking members...\n");
1158 EXEC SQL DECLARE csr223 CURSOR FOR
1159 SELECT list_id, member_type, member_id, ref_count, direct
1160 FROM imembers ORDER BY list_id;
1161 EXEC SQL OPEN csr223;
1163 EXEC SQL FETCH csr223 INTO :id1, :type, :id2, :id3, :id4;
1164 if (sqlca.sqlcode != 0) {
1165 ingerr(&sqlca.sqlcode);
1169 if ((l = (struct list *) hash_lookup(lists, id1)) == NULL)
1170 sq_save_unique_data(sq1, id1);
1171 else if (type[0] == 'U' && !hash_lookup(users, id2))
1172 sq_save_unique_data(sq2, id2);
1173 else if (type[0] == 'L' && !hash_lookup(lists, id2))
1174 sq_save_unique_data(sq3, id2);
1175 else if (type[0] == 'S' && !string_check(id2))
1176 sq_save_unique_data(sq4, id2);
1177 else if (type[0] == 'K' && !string_check(id2))
1178 sq_save_unique_data(sq5, id2);
1182 EXEC SQL CLOSE csr223;
1183 generic_delete(sq1, show_member_list, "imembers", "list_id", 1);
1184 generic_fix(sq2, show_mem_user, "Delete", del_mem_user, 1);
1185 generic_fix(sq3, show_mem_list, "Delete", del_mem_list, 1);
1186 generic_fix(sq4, show_mem_str, "Delete", del_mem_str, 1);
1187 generic_fix(sq5, show_mem_krb, "Delete", del_mem_krb, 1);
1189 dprintf("Checking servers...\n");
1192 EXEC SQL DECLARE csr224 CURSOR FOR
1193 SELECT name, acl_type, acl_id FROM servers;
1194 EXEC SQL OPEN csr224;
1196 EXEC SQL FETCH csr224 INTO :name, :type, :id1;
1197 if (sqlca.sqlcode != 0) {
1198 ingerr(&sqlca.sqlcode);
1203 if (!strcmp(type, "USER") && !hash_lookup(users, id1)) {
1204 sq_save_data(sq1, id1);
1205 } else if (!strcmp(type, "LIST") && !hash_lookup(lists, id1)) {
1206 sq_save_data(sq2, id1);
1209 EXEC SQL CLOSE csr224;
1210 generic_fix(sq1, show_srv_user, "Fix", zero_srv_user, 1);
1211 generic_fix(sq2, show_srv_list, "Fix", zero_srv_list, 1);
1213 dprintf("Checking serverhosts...\n");
1215 EXEC SQL DECLARE csr225 CURSOR FOR
1216 SELECT mach_id FROM serverhosts;
1217 EXEC SQL OPEN csr225;
1219 EXEC SQL FETCH csr225 INTO :id1;
1220 if (sqlca.sqlcode != 0) {
1221 ingerr(&sqlca.sqlcode);
1225 if (!hash_lookup(machines, id1))
1226 sq_save_data(sq, id1);
1228 EXEC SQL CLOSE csr225;
1229 generic_fix(sq, show_sh, "Delete", del_sh_mach, 0);
1231 dprintf("Checking nfsphys...\n");
1232 hash_step(nfsphys, check_nfsphys, NULL);
1234 dprintf("Checking filesys...\n");
1235 hash_step(filesys, check_fs, NULL);
1237 dprintf("Checking filesystem groups...\n");
1241 EXEC SQL DECLARE csr226 CURSOR FOR
1242 SELECT group_id, filsys_id FROM fsgroup;
1243 EXEC SQL OPEN csr226;
1245 EXEC SQL FETCH csr226 INTO :id1, :id2;
1246 if (sqlca.sqlcode != 0) {
1247 ingerr(&sqlca.sqlcode);
1251 if (!(f = (struct filesys *) hash_lookup(filesys, id1)))
1252 sq_save_data(sq1, id1);
1253 if (!hash_lookup(filesys, id2))
1254 sq_save_data(sq3, id2);
1256 EXEC SQL CLOSE csr226;
1257 generic_delete(sq1, show_fsg_missing, "fsgroup", "group_id", 0);
1258 generic_delete(sq3, show_fsg_nomember, "fsgroup", "filsys_id", 1);
1260 dprintf("Checking quotas...\n");
1265 EXEC SQL DECLARE csr227 CURSOR FOR
1266 SELECT entity_id, type, filsys_id, phys_id, quota FROM quota;
1267 EXEC SQL OPEN csr227;
1269 EXEC SQL FETCH csr227 INTO :id1, :type, :id2, :id3, :id4;
1270 if (sqlca.sqlcode != 0) {
1271 ingerr(&sqlca.sqlcode);
1275 if (type[0] == 'U' && id1 != 0 && !hash_lookup(users, id1))
1276 sq_save_data(sq1, id1);
1277 else if (type[0] == 'G' && !hash_lookup(lists, id1))
1278 sq_save_data(sq4, id1);
1279 else if (!(f = (struct filesys *) hash_lookup(filesys, id2)))
1280 sq_save_data(sq2, id2);
1281 else if (id3 != f->phys_id ||
1282 ((n = (struct nfsphys*) hash_lookup(nfsphys, id3)) ==
1283 (struct nfsphys *)NULL))
1284 sq_save_data(sq3, id2);
1288 EXEC SQL CLOSE csr227;
1289 generic_fix(sq1, show_quota_nouser, "Delete", fix_quota_nouser, 1);
1290 generic_fix(sq2, show_quota_nofs, "Delete", fix_quota_nofs, 0);
1291 generic_fix(sq3, show_quota_wrongpid, "Fix", fix_quota_physid, 1);
1292 generic_fix(sq4, show_quota_nolist, "Delete", fix_quota_nolist, 1);
1294 dprintf("Not checking zephyr.\n");
1296 dprintf("Checking hostaccess...\n");
1297 EXEC SQL DECLARE csr228 CURSOR FOR
1298 SELECT mach_id, acl_type, acl_id FROM hostaccess;
1299 EXEC SQL OPEN csr228;
1301 EXEC SQL FETCH csr228 INTO :id1, :type, :id2;
1302 if (sqlca.sqlcode != 0) {
1303 ingerr(&sqlca.sqlcode);
1308 if (!hash_lookup(machines, id1)) {
1309 printf("Hostaccess for non-existant host %d\n", id1);
1310 printf("Not fixing this error\n");
1312 if (!strcmp(type, "USER") && !hash_lookup(users, id2)) {
1313 printf("Hostaccess for %d is non-existant user %d\n", id1, id2);
1314 printf("Not fixing this error\n");
1315 } else if (!strcmp(type, "LIST") && !hash_lookup(lists, id2)) {
1316 printf("Hostaccess for %d is non-existant list %d\n", id1, id2);
1317 printf("Not fixing this error\n");
1320 EXEC SQL CLOSE csr228;
1322 dprintf("Checking palladium...\n");
1324 EXEC SQL DECLARE csr229 CURSOR FOR
1325 SELECT mach_id FROM palladium;
1326 EXEC SQL OPEN csr229;
1328 EXEC SQL FETCH csr229 INTO :id1;
1329 if (sqlca.sqlcode != 0) {
1330 ingerr(&sqlca.sqlcode);
1334 if (!hash_lookup(machines, id1)) {
1335 sq_save_unique_data(sq1, id1);
1338 EXEC SQL CLOSE csr229;
1339 generic_delete(sq1, show_pdm_mach, "palladium", "mach_id", 1);
1341 dprintf("Checking krbmap...\n");
1344 EXEC SQL DECLARE csr230 CURSOR FOR
1345 SELECT users_id, string_id FROM krbmap;
1346 EXEC SQL OPEN csr230;
1348 EXEC SQL FETCH csr230 INTO :id1, :id2;
1349 if (sqlca.sqlcode != 0) {
1350 ingerr(&sqlca.sqlcode);
1354 if (!hash_lookup(users, id1))
1355 sq_save_unique_data(sq1, id1);
1356 if (!string_check(id2))
1357 sq_save_unique_data(sq2, id2);
1359 EXEC SQL CLOSE csr230;
1360 generic_delete(sq1, show_krb_usr, "krbmap", "users_id", 1);
1361 generic_delete(sq2, show_krb_str, "krbmap", "string_id", 1);
1363 dprintf("Checking capacls...\n");
1364 EXEC SQL DECLARE csr231 CURSOR FOR
1365 SELECT list_id, tag FROM capacls;
1366 EXEC SQL OPEN csr231;
1368 EXEC SQL FETCH csr231 INTO :id1, :name;
1369 if (sqlca.sqlcode != 0) {
1370 ingerr(&sqlca.sqlcode);
1374 if (!hash_lookup(lists, id1)) {
1375 printf("Capacl for %s is non-existant list %d\n", name, id1);
1376 printf("Not fixing this error\n");
1379 EXEC SQL CLOSE csr231;