struct ValidUser *ValidUserList = NULL;
int messages_purged;
int users_not_purged;
-char *users_corrupt_msg = NULL;
-char *users_zero_msg = NULL;
struct ctdlroomref *rr = NULL;
int force_purge_now = 0; // set to nonzero to force a run right now
int num_rooms_purged = 0;
struct ctdlroom qrbuf;
struct ValidUser *vuptr;
- char *transcript = NULL;
syslog(LOG_DEBUG, "PurgeRooms() called");
ValidUserList = vuptr;
}
- transcript = malloc(SIZ);
- strcpy(transcript, "The following rooms have been auto-purged:\n");
-
while (RoomPurgeList != NULL) {
if (CtdlGetRoom(&qrbuf, RoomPurgeList->name) == 0) {
- transcript=realloc(transcript, strlen(transcript)+SIZ);
- snprintf(&transcript[strlen(transcript)], SIZ, " %s\n", qrbuf.QRname);
CtdlDeleteRoom(&qrbuf);
++num_rooms_purged;
}
RoomPurgeList = pptr;
}
- if (num_rooms_purged > 0) CtdlAideMessage(transcript, "Room Autopurger Message");
- free(transcript);
-
syslog(LOG_DEBUG, "Purged %d rooms.", num_rooms_purged);
return(num_rooms_purged);
}
// This shouldn't happen but does somehow.
if (IsEmptyStr(us.fullname)) {
purge = 0;
-
if (us.usernum > 0L) {
- purge=0;
- if (users_corrupt_msg == NULL) {
- users_corrupt_msg = malloc(SIZ);
- strcpy(users_corrupt_msg,
- "The auto-purger found the following user numbers with no name.\n"
- "The system has no way to purge a user with no name,"
- " and should not be able to create them either.\n"
- "This indicates corruption of the user DB or possibly a bug.\n"
- "It may be a good idea to restore your DB from a backup.\n"
- );
- }
-
- users_corrupt_msg=realloc(users_corrupt_msg, strlen(users_corrupt_msg)+30);
- snprintf(&users_corrupt_msg[strlen(users_corrupt_msg)], 29, " %ld\n", us.usernum);
+ purge = 0;
+ syslog(LOG_INFO, "expire: refusing to purge user %ld who has no name", us.usernum);
}
}
int PurgeUsers(void) {
struct PurgeList *pptr;
int num_users_purged = 0;
- char *transcript = NULL;
syslog(LOG_DEBUG, "PurgeUsers() called");
users_not_purged = 0;
break;
}
- transcript = malloc(SIZ);
-
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"
- );
+ syslog(LOG_INFO, "expire: refusing to purge all users because this usually indicates an error");
while (UserPurgeList != NULL) {
pptr = UserPurgeList->next;
free(UserPurgeList);
++num_users_purged;
}
}
-
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);
}
}
- if (num_users_purged > 0) CtdlAideMessage(transcript, "User Purge Message");
- free(transcript);
-
- if (users_corrupt_msg) {
- CtdlAideMessage(users_corrupt_msg, "User Corruption Message");
- free (users_corrupt_msg);
- users_corrupt_msg = NULL;
- }
-
- if(users_zero_msg) {
- CtdlAideMessage(users_zero_msg, "User Zero Message");
- free (users_zero_msg);
- users_zero_msg = NULL;
- }
-
syslog(LOG_DEBUG, "Purged %d users.", num_users_purged);
return(num_users_purged);
}
void purge_databases(void) {
- int retval;
static time_t last_purge = 0;
time_t now;
struct tm tm;
+ int users_purged, rooms_purged, visits_purged, usete_purged, euidindices_purged = 0;
// Do the auto-purge if the current hour equals the purge hour,
// but not if the operation has already been performed in the
syslog(LOG_INFO, "Auto-purger: starting.");
if (!server_shutting_down) {
- retval = PurgeUsers();
- syslog(LOG_NOTICE, "Purged %d users.", retval);
+ users_purged = PurgeUsers();
+ syslog(LOG_NOTICE, "Purged %d users.", users_purged);
}
if (!server_shutting_down) {
}
if (!server_shutting_down) {
- retval = PurgeRooms();
- syslog(LOG_NOTICE, "Expired %d rooms.", retval);
+ rooms_purged = PurgeRooms();
+ syslog(LOG_NOTICE, "Expired %d rooms.", rooms_purged);
}
if (!server_shutting_down) {
- retval = PurgeVisits();
- syslog(LOG_NOTICE, "Purged %d visits.", retval);
+ visits_purged = PurgeVisits();
+ syslog(LOG_NOTICE, "Purged %d visits.", visits_purged);
}
if (!server_shutting_down) {
StrBuf *ErrMsg;
ErrMsg = NewStrBuf();
- retval = PurgeUseTable(ErrMsg);
- syslog(LOG_NOTICE, "Purged %d entries from the use table.", retval);
+ usete_purged = PurgeUseTable(ErrMsg);
+ syslog(LOG_NOTICE, "Purged %d entries from the use table.", usete_purged);
FreeStrBuf(&ErrMsg);
}
if (!server_shutting_down) {
- retval = PurgeEuidIndexTable();
- syslog(LOG_NOTICE, "Purged %d entries from the EUID index.", retval);
+ euidindices_purged = PurgeEuidIndexTable();
+ syslog(LOG_NOTICE, "Purged %d entries from the EUID index.", euidindices_purged);
+ }
+
+ if (users_purged + messages_purged + rooms_purged + visits_purged + usete_purged + euidindices_purged != 0) {
+ char msg[SIZ];
+ snprintf(msg, sizeof msg,
+ "Citadel Server has deleted %d users, %d messages, %d rooms, %d visit records, %d use table entries, "
+ "and %d EUID indices due to expire policy set on those objects.\n",
+ users_purged, messages_purged, rooms_purged, visits_purged, usete_purged, euidindices_purged
+ );
+ CtdlAideMessage(msg, "Expired Objects Report");
}
//if (!server_shutting_down) {