[1592] in Moira
fix the tmol bug
daemon@ATHENA.MIT.EDU (Garry Zacheiss)
Mon Jun 26 17:03:13 2000
Message-Id: <200006262103.RAA19824@sweet-transvestite.mit.edu>
To: moiradev@MIT.EDU
Date: Mon, 26 Jun 2000 17:03:08 -0400
From: Garry Zacheiss <zacheiss@MIT.EDU>
This fixes the tmol bug by adding a function to qsupport.pc to
do the work of updating the tag. The function still calls
incremental_after() but it won't do anything stupid now. I left the
call in in case we ever, say, want an incremental acl dcm.
Garry
Index: mr_server.h
===================================================================
RCS file: /afs/athena.mit.edu/astaff/project/moiradev/repository/moira/server/mr_server.h,v
retrieving revision 1.51
diff -c -r1.51 mr_server.h
*** mr_server.h 2000/03/30 22:01:55 1.51
--- mr_server.h 2000/06/26 19:40:00
***************
*** 232,237 ****
--- 232,238 ----
int set_pobox_pop(struct query *q, char *argv[], client *cl);
int add_member_to_list(struct query *q, char *argv[], client *cl);
int delete_member_from_list(struct query *q, char *argv[], client *cl);
+ int tag_member_of_list(struct query *q, char *argv[], client *cl);
int register_user(struct query *q, char *argv[], client *cl);
int do_user_reservation(struct query *q, char *argv[], client *cl);
Index: qsupport.pc
===================================================================
RCS file: /afs/athena.mit.edu/astaff/project/moiradev/repository/moira/server/qsupport.pc,v
retrieving revision 2.24
diff -c -r2.24 qsupport.pc
*** qsupport.pc 2000/06/01 21:51:02 2.24
--- qsupport.pc 2000/06/26 20:30:16
***************
*** 508,513 ****
--- 508,547 ----
return MR_SUCCESS;
}
+ int tag_member_of_list(struct query *q, char **argv, client *cl)
+ {
+ EXEC SQL BEGIN DECLARE SECTION;
+ int lid, mid, cnt, tag;
+ char *mtype;
+ EXEC SQL END DECLARE SECTION;
+ char *iargv[3];
+
+ lid = *(int *)argv[0];
+ mtype = argv[1];
+ mid = *(int *)argv[2];
+ tag = *(int *)argv[3];
+
+ EXEC SQL SELECT COUNT(member_id) INTO :cnt FROM imembers
+ WHERE member_id = :mid AND member_type = :mtype AND
+ list_id = :lid;
+ if (dbms_errno)
+ return mr_errcode;
+ if (cnt == 0)
+ return MR_NO_MATCH;
+
+ incremental_clear_before();
+ EXEC SQL UPDATE imembers SET tag = :tag WHERE list_id = :lid
+ AND member_type = :mtype AND member_id = :mid;
+ if (dbms_errno)
+ return mr_errcode;
+
+ iargv[0] = (char *)lid;
+ iargv[1] = mtype;
+ iargv[2] = (char *)mid;
+ incremental_after(IMEMBERS_TABLE, 0, iargv);
+
+ return MR_SUCCESS;
+ }
/* Don't allow someone to add someone to a list which is the acl of a
* query unless they're on the list acl, even if they're on the amtl
Index: queries2.c
===================================================================
RCS file: /afs/athena.mit.edu/astaff/project/moiradev/repository/moira/server/queries2.c,v
retrieving revision 2.72
diff -c -r2.72 queries2.c
*** queries2.c 2000/04/25 01:51:06 2.72
--- queries2.c 2000/06/26 20:21:21
***************
*** 1393,1405 ****
{
amtl_valobj,
4,
- "tag",
- "list_id = %d AND member_type = '%s' AND member_id = %d",
- 3,
0,
- access_list,
0,
0,
};
static struct validate dmfl_validate =
--- 1393,1405 ----
{
amtl_valobj,
4,
0,
0,
0,
+ 0,
+ access_list,
+ 0,
+ tag_member_of_list,
};
static struct validate dmfl_validate =
***************
*** 4313,4324 ****
"tmol",
2,
UPDATE,
! "im",
IMEMBERS_TABLE,
! "imembers SET tag = %d",
atml_fields,
1,
! "list_id = %d AND member_type = '%s' and member_id = %d",
3,
NULL,
&tmol_validate,
--- 4313,4324 ----
"tmol",
2,
UPDATE,
! 0,
IMEMBERS_TABLE,
! 0,
atml_fields,
1,
! 0,
3,
NULL,
&tmol_validate,