[1419] in Moira

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

reworked evil moirad patch

daemon@ATHENA.MIT.EDU (Garry Zacheiss)
Sat Mar 11 00:00:12 2000

Message-Id: <200003110500.AAA03775@x15-cruise-basselope.mit.edu>
To: moiradev@MIT.EDU
Date: Sat, 11 Mar 2000 00:00:04 -0500
From: Garry Zacheiss <zacheiss@MIT.EDU>

	Consider this to supercede the previous patch.  I'm a bit more
confident of this than the previous one.  Bleed on me.

Garry

Index: qsupport.pc
===================================================================
RCS file: /afs/athena.mit.edu/astaff/project/moiradev/repository//moira/server/qsupport.pc,v
retrieving revision 2.19
diff -c -w -r2.19 qsupport.pc
*** qsupport.pc	2000/01/28 00:31:58	2.19
--- qsupport.pc	2000/03/11 04:56:30
***************
*** 1196,1201 ****
--- 1196,1202 ----
    int who, rowcount, mid, uid, users_id;
    int ostatus, nstatus, fsidval, popid;
    int npid, tmp;
+   int po_exists = 0;
    static int m_id, def_quota, def_imap_quota, list_id;
    EXEC SQL END DECLARE SECTION;
    char buffer[256], *aargv[3];
***************
*** 1250,1260 ****
    if (rowcount > 0)
      return MR_IN_USE;
    EXEC SQL SELECT COUNT(label) INTO :rowcount FROM filesys
!     WHERE label = :login OR label = :login || '.po';
    if (dbms_errno)
      return mr_errcode;
    if (rowcount > 0)
      return MR_IN_USE;
    EXEC SQL SELECT COUNT(name) INTO :rowcount FROM alias
      WHERE ( name = :login OR name = :login || '.po' )
      AND type = 'FILESYS';
--- 1251,1280 ----
    if (rowcount > 0)
      return MR_IN_USE;
    EXEC SQL SELECT COUNT(label) INTO :rowcount FROM filesys
!     WHERE label = :login;
    if (dbms_errno)
      return mr_errcode;
    if (rowcount > 0)
      return MR_IN_USE;
+   EXEC SQL SELECT COUNT(label) INTO :rowcount  
+     FROM filesys WHERE label = :login || '.po';
+   if (dbms_errno)
+     return mr_errcode;
+   if (rowcount > 0)
+     {
+       EXEC SQL SELECT owner INTO :tmp FROM filesys 
+ 	WHERE label = :login || '.po';
+       if (dbms_errno)
+ 	return mr_errcode;
+       if ((ostatus == 0) || (tmp != users_id))
+ 	return MR_IN_USE;
+       EXEC SQL SELECT count(potype) INTO :rowcount FROM users WHERE
+ 	login = :login AND potype = 'IMAP';
+       if (dbms_errno)
+ 	return mr_errcode;
+       if (rowcount > 0)
+ 	po_exists = 1;
+     }
    EXEC SQL SELECT COUNT(name) INTO :rowcount FROM alias
      WHERE ( name = :login OR name = :login || '.po' )
      AND type = 'FILESYS';
***************
*** 1264,1270 ****
--- 1284,1299 ----
      return MR_IN_USE;
    com_err(whoami, 0, "login name OK");
  
+   EXEC SQL SELECT COUNT(potype) INTO :rowcount FROM users WHERE
+     login = :login AND potype = 'POP';
+   if (dbms_errno)
+     return mr_errcode;
+   if (rowcount > 0)
+     po_exists = 1;
+ 
    /* choose type and location for pobox */
+   if (!po_exists)
+     {
        if (!strcmp(potype, "IMAP"))
  	{
        /* Select all IMAP nfsphys entries in order of increasing
***************
*** 1382,1387 ****
--- 1411,1417 ----
  	    WHERE users_id = :users_id;
  	  com_err(whoami, 0, "pobox set to POP:%s", strtrim(machname));
  	}
+     }
    
    /* change login name, set pobox */
    sprintf(buffer, "u.users_id = %d", users_id);
***************
*** 1398,1404 ****
--- 1428,1438 ----
      return mr_errcode;
    if (sqlca.sqlerrd[2] != 1)
      return MR_INTERNAL;
+   
+   /* Only update usage count if we created a pobox */
+   if (!po_exists)
      set_pop_usage(mid, 1);
+   
    com_err(whoami, 0, "set login name to %s", login);
    incremental_after(USERS_TABLE, buffer, 0);
  
***************
*** 1461,1468 ****
      return mr_errcode;
    return MR_SUCCESS;
  }
- 
- 
  
  /** set_pop_usage - incr/decr usage count for pop server in serverhosts talbe
   **
--- 1495,1500 ----

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