// File : /cmds/adm/_purge.c
// Creator : Watcher@TMI-2 (5/15/93)
//
// This command is used to instruct the purge daemon to delete
// users who have not been active since the inputted date.
#include <uid.h>
#include <mudlib.h>
#include <daemons.h>
inherit DAEMON;
#define SYNTAX "Syntax: purge [-dtvw] [date integer]\n"
int cmd_purge(string str) {
string qual, tmp1, tmp2;
int flag, date, test, verbose;
// Check to ensure the user has admin permissions.
if(!adminp(geteuid(previous_object()))) return 0;
notify_fail(SYNTAX);
if(!str || str == "") return 0;
// Check to see if the user has requested any flag modifications.
if(sscanf(str, "-%s %d", qual, date) == 2) {
if(sscanf(" " + qual + " ", "%sw%s", tmp1, tmp2) == 2) flag = 1;
if(sscanf(" " + qual + " ", "%sd%s", tmp1, tmp2) == 2) flag = 2;
if(sscanf(" " + qual + " ", "%st%s", tmp1, tmp2) == 2) test = 1;
if(sscanf(" " + qual + " ", "%sv%s", tmp1, tmp2) == 2) verbose = 1;
}
// Otherwise try to parse out the date integer from the string.
else if(sscanf(str, "%d", date) != 1) return 0;
seteuid(getuid(this_object()));
// If the requested date is less than zero, or greater than the
// present time integer, it is obviously invalid.
if(date < 0 || date > time()) {
write("Purge: Invalid date value request.\n");
return 1; }
// Check to see if the purge daemon is presently busy.
if((int)PURGE_D->query_busy()) {
write("Purge: A purge operation is already running.\n");
return 1; }
// Okay ... double check the user's request. Just in case. :)
write("A " + (test ? "flagging" : "purge") + " of all users inactive " +
"since " + bold(extract(ctime(date), 4)) + " has been requested.\n");
if(flag || verbose)
write("Parameters: " + (flag ? "Including all wizards" +
(flag == 2 ? " and their directories" : "") : "") +
(verbose ? (flag ? ", and " : "") + "verbose mode" : "") + "\n");
write("Are you sure you wish to initiate this " +
(test ? "test" : "purge") + "? [y/n] ");
input_to("purge_check", 0, date, test, flag, verbose);
return 1; }
// This function completes the purge depending on the answer to the
// confirmation request ... the user will be informed of any errors.
static int purge_check(string str, int date, int test, int flag, int verbose) {
if(!str || member_array(lower_case(str), ({ "yes", "y" })) == -1) {
write("Purge: Request aborted.\n");
return 1; }
if(catch(PURGE_D->process_users(date, verbose, flag, test)))
write("Purge: Could not conduct process.\n");
return 1; }
string help() {
return(SYNTAX + "\n" +
"This command can be used by Admin to purge out all inactive users in\n" +
"the mud's database. All wizards and their directories are protected\n" +
"by default, unless overridden by the command flags, w and d. The w\n" +
"flag requests that the purge protection on wizards be lifted, and the\n"+
"d flag specifies the deletion of the wizard's directory as well. If\n" +
"the t flag is requested, the users will only be flagged...not purged.\n"+
"The v flag specifies a verbose output where all users are displayed\n" +
"as they are flagged or deleted.\n");
}