#include <limits.h>
#include "citadel.h"
#include "server.h"
-#include "sysdep_decls.h"
#include "citserver.h"
#include "support.h"
#include "config.h"
-#include "serv_extensions.h"
#include "room_ops.h"
#include "policy.h"
#include "database.h"
#include "tools.h"
+#include "ctdl_module.h"
+
+
struct PurgeList {
struct PurgeList *next;
char name[ROOMNAMELEN]; /* use the larger of username or roomname */
struct ValidRoom *ValidRoomList = NULL;
struct ValidUser *ValidUserList = NULL;
int messages_purged;
+int users_not_purged;
struct ctdlroomref *rr = NULL;
UserPurgeList = pptr;
}
}
+ else {
+ ++users_not_purged;
+ }
}
time_t purge_time;
struct PurgeList *pptr;
- /* stupid recovery routine to re-create missing mailboxen.
- * don't enable this.
- struct ctdlroom qrbuf;
- char mailboxname[ROOMNAMELEN];
- MailboxName(mailboxname, us, MAILROOM);
- create_room(mailboxname, 4, "", 0, 1, 1, VIEW_BBS);
- if (getroom(&qrbuf, mailboxname) != 0) return;
- lprintf(CTDL_DEBUG, "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;
strcpy(pptr->name, us->fullname);
UserPurgeList = pptr;
}
+ else {
+ ++users_not_purged;
+ }
}
char *transcript = NULL;
lprintf(CTDL_DEBUG, "PurgeUsers() called\n");
+ users_not_purged = 0;
if (config.c_auth_mode == 1) {
/* host auth mode */
}
transcript = malloc(SIZ);
- strcpy(transcript, "The following users have been auto-purged:\n");
-
- while (UserPurgeList != NULL) {
- transcript=realloc(transcript, strlen(transcript)+SIZ);
- snprintf(&transcript[strlen(transcript)], SIZ, " %s\n",
- UserPurgeList->name);
- purge_user(UserPurgeList->name);
- pptr = UserPurgeList->next;
- free(UserPurgeList);
- UserPurgeList = pptr;
- ++num_users_purged;
+
+ if (users_not_purged == 0) {
+ strcpy(transcript, "The auto-purger was told to purge every user. It is\n"
+ "refusing to do this because it usually indicates a problem\n"
+ "such as an inability to communicate with a name service.\n"
+ );
+ while (UserPurgeList != NULL) {
+ pptr = UserPurgeList->next;
+ free(UserPurgeList);
+ UserPurgeList = pptr;
+ ++num_users_purged;
+ }
}
- if (num_users_purged > 0) aide_message(transcript,"User Purge Message");
+ else {
+ strcpy(transcript, "The following users have been auto-purged:\n");
+ while (UserPurgeList != NULL) {
+ transcript=realloc(transcript, strlen(transcript)+SIZ);
+ snprintf(&transcript[strlen(transcript)], SIZ, " %s\n",
+ UserPurgeList->name);
+ purge_user(UserPurgeList->name);
+ pptr = UserPurgeList->next;
+ free(UserPurgeList);
+ UserPurgeList = pptr;
+ ++num_users_purged;
+ }
+ }
+
+ if (num_users_purged > 0) aide_message(transcript, "User Purge Message");
free(transcript);
lprintf(CTDL_DEBUG, "Purged %d users.\n", num_users_purged);
/*****************************************************************************/
-char *serv_expire_init(void)
+CTDL_MODULE_INIT(expire)
{
CtdlRegisterSessionHook(purge_databases, EVT_TIMER);
CtdlRegisterProtoHook(cmd_fsck, "FSCK", "Check message ref counts");
+
+ /* return our Subversion id for the Log */
return "$Id$";
}