/*
- * serv_expire.c
+ * $Id$
*
* This module handles the expiry of old messages and the purging of old users.
*
- * $Id$
*/
time(&now);
GetExpirePolicy(&epbuf, qrbuf);
-
+
/* If the room is set to never expire messages ... do nothing */
if (epbuf.expire_mode == EXPIRE_NEXTLEVEL) return;
if (epbuf.expire_mode == EXPIRE_MANUAL) return;
num_msgs = cdbfr->len / sizeof(long);
cdb_free(cdbfr);
}
-
+
/* Nothing to do if there aren't any messages */
if (num_msgs == 0) {
end_critical_section(S_QUICKROOM);
if (num_msgs > 0) {
num_msgs = sort_msglist(msglist, num_msgs);
}
-
+
cdb_store(CDB_MSGLISTS, &qrbuf->QRnumber, sizeof(long),
msglist, (num_msgs * sizeof(long)) );
* it. Bypass any other rules.
*/
if (qrbuf->QRflags & QR_MAILBOX) {
+ /* if user not found, do_purge will be 1 */
+ do_purge = 1;
for (vuptr=ValidUserList; vuptr!=NULL; vuptr=vuptr->next) {
if (vuptr->vu_usernum == atol(qrbuf->QRname)) {
do_purge = 0;
- goto BYPASS;
}
}
- /* user not found */
- do_purge = 1;
- goto BYPASS;
}
-
- /* Any of these attributes render a room non-purgable */
- if (qrbuf->QRflags & QR_PERMANENT) return;
- if (qrbuf->QRflags & QR_DIRECTORY) return;
- if (qrbuf->QRflags & QR_NETWORK) return;
- if (is_noneditable(qrbuf)) return;
-
- /* If we don't know the modification date, be safe and don't purge */
- if (qrbuf->QRmtime <= (time_t)0) return;
-
- /* If no room purge time is set, be safe and don't purge */
- if (config.c_roompurge < 0) return;
-
- /* Otherwise, check the date of last modification */
- age = time(NULL) - (qrbuf->QRmtime);
- purge_secs = (time_t)config.c_roompurge * (time_t)86400;
- if (purge_secs <= (time_t)0) return;
- lprintf(9, "<%s> is <%ld> seconds old\n", qrbuf->QRname, age);
- if (age > purge_secs) do_purge = 1;
-
-BYPASS: if (do_purge) {
+ else {
+ /* Any of these attributes render a room non-purgable */
+ if (qrbuf->QRflags & QR_PERMANENT) return;
+ if (qrbuf->QRflags & QR_DIRECTORY) return;
+ if (qrbuf->QRflags & QR_NETWORK) return;
+ if (!strcasecmp(qrbuf->QRname, SYSCONFIGROOM)) return;
+ if (is_noneditable(qrbuf)) return;
+
+ /* If we don't know the modification date, be safe and don't purge */
+ if (qrbuf->QRmtime <= (time_t)0) return;
+
+ /* If no room purge time is set, be safe and don't purge */
+ if (config.c_roompurge < 0) return;
+
+ /* Otherwise, check the date of last modification */
+ age = time(NULL) - (qrbuf->QRmtime);
+ purge_secs = (time_t)config.c_roompurge * (time_t)86400;
+ if (purge_secs <= (time_t)0) return;
+ lprintf(9, "<%s> is <%ld> seconds old\n", qrbuf->QRname, age);
+ if (age > purge_secs) do_purge = 1;
+ } /* !QR_MAILBOX */
+
+ if (do_purge) {
pptr = (struct PurgeList *) mallok(sizeof(struct PurgeList));
pptr->next = RoomPurgeList;
strcpy(pptr->name, qrbuf->QRname);
}
}
-
+
int PurgeRooms(void) {
}
- transcript = mallok(256);
+ transcript = mallok(SIZ);
strcpy(transcript, "The following rooms have been auto-purged:\n");
while (RoomPurgeList != NULL) {
if (getroom(&qrbuf, RoomPurgeList->name) == 0) {
- transcript=reallok(transcript, strlen(transcript)+256);
+ transcript=reallok(transcript, strlen(transcript)+SIZ);
sprintf(&transcript[strlen(transcript)], " %s\n",
qrbuf.QRname);
delete_room(&qrbuf);
time_t purge_time;
struct PurgeList *pptr;
+ /* stupid recovery routine to re-create missing mailboxen.
+ * don't enable this.
+ struct quickroom qrbuf;
+ char mailboxname[ROOMNAMELEN];
+ MailboxName(mailboxname, us, MAILROOM);
+ create_room(mailboxname, 4, "", 0);
+ if (getroom(&qrbuf, mailboxname) != 0) return;
+ lprintf(9, "Got %s\n", qrbuf.QRname);
+ */
+
+
/* Set purge time; if the user overrides the system default, use it */
if (us->USuserpurge > 0) {
purge_time = ((time_t)us->USuserpurge) * 86400L;
ForEachUser(do_user_purge, NULL);
}
- transcript = mallok(256);
+ transcript = mallok(SIZ);
strcpy(transcript, "The following users have been auto-purged:\n");
while (UserPurgeList != NULL) {
- transcript=reallok(transcript, strlen(transcript)+256);
+ transcript=reallok(transcript, strlen(transcript)+SIZ);
sprintf(&transcript[strlen(transcript)], " %s\n",
UserPurgeList->name);
purge_user(UserPurgeList->name);
VisitPurgeList = vptr;
++purged;
}
-
+
return(purged);
}
void cmd_expi(char *argbuf) {
- char cmd[256];
+ char cmd[SIZ];
int retval;
-
- if ((!(CC->logged_in))&&(!(CC->internal_pgm))) {
- cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
- return;
- }
-
- if ((!is_room_aide()) && (!(CC->internal_pgm)) ) {
- cprintf("%d Higher access required.\n",
- ERROR+HIGHER_ACCESS_REQUIRED);
- return;
- }
+ if (CtdlAccessCheck(ac_aide)) return;
extract(cmd, argbuf, 0);
if (!strcasecmp(cmd, "users")) {
/*****************************************************************************/
-void do_fsck_msg(long msgnum) {
+void do_fsck_msg(long msgnum, void *userdata) {
struct roomref *ptr;
ptr = (struct roomref *)mallok(sizeof(struct roomref));
void do_fsck_room(struct quickroom *qrbuf, void *data)
{
getroom(&CC->quickroom, qrbuf->QRname);
- CtdlForEachMessage(MSGS_ALL, 0L, NULL, NULL, do_fsck_msg);
+ CtdlForEachMessage(MSGS_ALL, 0L, (-127), NULL, NULL,
+ do_fsck_msg, NULL);
}
/*
struct roomref *ptr;
int realcount;
- if ( (!CC->logged_in) || (CC->usersupp.axlevel < 6) ) {
- cprintf("%d Higher access required\n",
- ERROR+HIGHER_ACCESS_REQUIRED);
- return;
- }
+ if (CtdlAccessCheck(ac_aide)) return;
/* Lame way of checking whether anyone else is doing this now */
if (rr != NULL) {