[1592] in Moira

home help back first fref pref prev next nref lref last post

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,

home help back first fref pref prev next nref lref last post