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));
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;
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);
}
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)
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;