EXEC SQL END DECLARE SECTION;
char *targv[2];
int members;
- struct save_queue *sq;
/* true/false flag indicates whether to display only direct members. */
if (flag)
direct = -1;
list_id = *(int *)argv[0];
- members = 0;
- sq = sq_create();
-
- EXEC SQL DECLARE csr118 CURSOR FOR
- SELECT member_type, member_id FROM imembers
- WHERE list_id = :list_id AND direct > :direct;
- if (dbms_errno)
- return(mr_errcode);
- EXEC SQL OPEN csr118;
- if (dbms_errno)
- return(mr_errcode);
- while(1) {
- EXEC SQL FETCH csr118 INTO :member_type, :member_id;
- if (sqlca.sqlcode != 0) break;
- if (members++ > 49)
- break;
- sq_save_data(sq, (char *)(((int)member_type[0] << 24) |
- (member_id & 0xffffff)));
- }
- EXEC SQL CLOSE csr118;
-
- if (members <= 49) {
- targv[1] = malloc(0);
- while (sq_remove_data(sq, &member_id)) {
- switch (member_id >> 24) {
- case 'U':
- targv[0] = "USER";
- id_to_name(member_id & 0xffffff, USERS_TABLE, &targv[1]);
- (*action)(2, targv, actarg);
- break;
- case 'L':
- targv[0] = "LIST";
- id_to_name(member_id & 0xffffff, LIST_TABLE, &targv[1]);
- (*action)(2, targv, actarg);
- break;
- case 'S':
- targv[0] = "STRING";
- id_to_name(member_id & 0xffffff, STRINGS_TABLE, &targv[1]);
- (*action)(2, targv, actarg);
- break;
- case 'K':
- targv[0] = "KERBEROS";
- id_to_name(member_id & 0xffffff, STRINGS_TABLE, &targv[1]);
- (*action)(2, targv, actarg);
- break;
- default:
- sq_destroy(sq);
- return(MR_INTERNAL);
- }
- }
- free(targv[1]);
- sq_destroy(sq);
- return(MR_SUCCESS);
- }
- sq_destroy(sq);
targv[1] = member_name;
targv[0] = "USER";