From ad47bcbe5a2aaf291fb04f9e97396d91618037dd Mon Sep 17 00:00:00 2001 From: zacheiss Date: Tue, 15 Aug 2000 00:07:20 +0000 Subject: [PATCH] Check list memacls. --- dbck/dbck.h | 2 ++ dbck/phase1.pc | 11 ++++++++--- dbck/phase2.pc | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 3 deletions(-) diff --git a/dbck/dbck.h b/dbck/dbck.h index 07c4414b..51eb68ac 100644 --- a/dbck/dbck.h +++ b/dbck/dbck.h @@ -69,8 +69,10 @@ struct cluster { struct list { char name[LIST_NAME_SIZE]; char acl_type; + char memacl_type; int list_id; int acl_id; + int memacl_id; int modby; int members; }; diff --git a/dbck/phase1.pc b/dbck/phase1.pc index c15eb815..6eb3881c 100644 --- a/dbck/phase1.pc +++ b/dbck/phase1.pc @@ -703,17 +703,20 @@ void phase1(void) out_of_mem("loading lists"); EXEC SQL DECLARE csr108 CURSOR FOR - SELECT list_id, name, acl_id, acl_type, modby FROM list + SELECT list_id, name, acl_id, acl_type, memacl_id, memacl_type, modby + FROM list ORDER BY list_id; EXEC SQL OPEN csr108; while (1) { EXEC SQL BEGIN DECLARE SECTION; - int list_id, acl_id, modby; + int list_id, acl_id, memacl_id, modby; char name[LIST_NAME_SIZE], acl_type[LIST_ACL_TYPE_SIZE]; + char memacl_type[LIST_ACL_TYPE_SIZE]; EXEC SQL END DECLARE SECTION; - EXEC SQL FETCH csr108 INTO :list_id, :name, :acl_id, :acl_type, :modby; + EXEC SQL FETCH csr108 INTO :list_id, :name, :acl_id, :acl_type, + :memacl_id, :memacl_type, :modby; if (sqlca.sqlcode) break; l = malloc(sizeof(struct list)); @@ -722,6 +725,8 @@ void phase1(void) strcpy(l->name, strtrim(name)); l->acl_type = acl_type[0]; l->acl_id = acl_id; + l->memacl_type = memacl_type[0]; + l->memacl_id = memacl_id; l->list_id = list_id; l->modby = modby; l->members = 0; diff --git a/dbck/phase2.pc b/dbck/phase2.pc index 1ebcc4a5..39ae1524 100644 --- a/dbck/phase2.pc +++ b/dbck/phase2.pc @@ -49,6 +49,7 @@ void cluster_check(int id, void *cluster, void *hint); int show_svc(void *id); void list_check(int id, void *list, void *hint); void fix_list_acl(int id); +void fix_list_memacl(int id); int show_member_list(void *id); int show_mem_user(void *id); int show_mem_list(void *id); @@ -870,6 +871,37 @@ void list_check(int id, void *list, void *hint) } break; } + + switch (l->memacl_type) + { + case 'L': + if (!hash_lookup(lists, l->memacl_id)) + { + printf("List %s has bad LIST memacl %d\n", l->name, l->memacl_id); + if (single_fix("Patch", 1)) + fix_list_memacl(l->list_id); + } + break; + case 'U': + if (!hash_lookup(users, l->memacl_id)) + { + printf("List %s has bad USER acl %d\n", l->name, l->memacl_id); + if (single_fix("Patch", 1)) + fix_list_memacl(l->list_id); + } + break; + case 'K': + l->memacl_id = maybe_fixup_unref_string(l->memacl_id, id, l->name, + "list", "memacl_id", "list_id"); + if (!l->memacl_id) + { + printf("List %s has bad KERBEROS acl %d\n", l->name, + l->memacl_id); + if (single_fix("Patch", 1)) + fix_list_memacl(l->list_id); + } + break; + } } void fix_list_acl(int id) @@ -888,6 +920,22 @@ void fix_list_acl(int id) modified("list"); } +void fix_list_memacl(int id) +{ + EXEC SQL BEGIN DECLARE SECTION; + int rowcount, iid = (int)id; + EXEC SQL END DECLARE SECTION; + + EXEC SQL UPDATE list SET memacl_id = 0, memacl_type = 'NONE' + WHERE list_id = :iid; + rowcount = sqlca.sqlerrd[2]; + if (rowcount > 0) + printf("%d entr%s fixed\n", rowcount, rowcount == 1 ? "y" : "ies"); + else + printf("Not fixed\n"); + modified("list"); +} + int show_member_list(void *id) { EXEC SQL BEGIN DECLARE SECTION; -- 2.45.2