[1419] in Moira
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 ----