tmi2_fluffos_v2/
tmi2_fluffos_v2/bin/
tmi2_fluffos_v2/etc/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/ChangeLog.old/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/Win32/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/compat/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/compat/simuls/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/include/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/clone/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/command/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/data/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/etc/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/include/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/inherit/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/inherit/master/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/log/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/compiler/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/efuns/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/operators/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/u/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/tmp/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/windows/
tmi2_fluffos_v2/lib/
tmi2_fluffos_v2/lib/adm/
tmi2_fluffos_v2/lib/adm/daemons/languages/
tmi2_fluffos_v2/lib/adm/daemons/network/I3/
tmi2_fluffos_v2/lib/adm/daemons/virtual/
tmi2_fluffos_v2/lib/adm/daemons/virtual/template/
tmi2_fluffos_v2/lib/adm/news/
tmi2_fluffos_v2/lib/adm/obj/
tmi2_fluffos_v2/lib/adm/obj/master/
tmi2_fluffos_v2/lib/adm/priv/
tmi2_fluffos_v2/lib/adm/shell/
tmi2_fluffos_v2/lib/adm/tmp/
tmi2_fluffos_v2/lib/cmds/
tmi2_fluffos_v2/lib/d/
tmi2_fluffos_v2/lib/d/Conf/
tmi2_fluffos_v2/lib/d/Conf/adm/
tmi2_fluffos_v2/lib/d/Conf/boards/
tmi2_fluffos_v2/lib/d/Conf/cmds/
tmi2_fluffos_v2/lib/d/Conf/data/
tmi2_fluffos_v2/lib/d/Conf/logs/
tmi2_fluffos_v2/lib/d/Conf/obj/
tmi2_fluffos_v2/lib/d/Conf/text/help/
tmi2_fluffos_v2/lib/d/Fooland/adm/
tmi2_fluffos_v2/lib/d/Fooland/data/
tmi2_fluffos_v2/lib/d/Fooland/data/attic/
tmi2_fluffos_v2/lib/d/Fooland/items/
tmi2_fluffos_v2/lib/d/TMI/
tmi2_fluffos_v2/lib/d/TMI/adm/
tmi2_fluffos_v2/lib/d/TMI/boards/
tmi2_fluffos_v2/lib/d/TMI/data/
tmi2_fluffos_v2/lib/d/TMI/rooms/
tmi2_fluffos_v2/lib/d/grid/
tmi2_fluffos_v2/lib/d/grid/adm/
tmi2_fluffos_v2/lib/d/grid/data/
tmi2_fluffos_v2/lib/d/std/
tmi2_fluffos_v2/lib/d/std/adm/
tmi2_fluffos_v2/lib/data/adm/
tmi2_fluffos_v2/lib/data/adm/daemons/
tmi2_fluffos_v2/lib/data/adm/daemons/doc_d/
tmi2_fluffos_v2/lib/data/adm/daemons/emoted/
tmi2_fluffos_v2/lib/data/adm/daemons/network/http/
tmi2_fluffos_v2/lib/data/adm/daemons/network/services/mail_q/
tmi2_fluffos_v2/lib/data/adm/daemons/network/smtp/
tmi2_fluffos_v2/lib/data/adm/daemons/news/archives/
tmi2_fluffos_v2/lib/data/attic/connection/
tmi2_fluffos_v2/lib/data/attic/user/
tmi2_fluffos_v2/lib/data/std/connection/b/
tmi2_fluffos_v2/lib/data/std/connection/l/
tmi2_fluffos_v2/lib/data/std/user/a/
tmi2_fluffos_v2/lib/data/std/user/b/
tmi2_fluffos_v2/lib/data/std/user/d/
tmi2_fluffos_v2/lib/data/std/user/f/
tmi2_fluffos_v2/lib/data/std/user/l/
tmi2_fluffos_v2/lib/data/std/user/x/
tmi2_fluffos_v2/lib/data/u/d/dm/working/doc_d/
tmi2_fluffos_v2/lib/data/u/l/leto/doc_d/
tmi2_fluffos_v2/lib/data/u/l/leto/smtp/
tmi2_fluffos_v2/lib/doc/
tmi2_fluffos_v2/lib/doc/driverdoc/applies/
tmi2_fluffos_v2/lib/doc/driverdoc/applies/interactive/
tmi2_fluffos_v2/lib/doc/driverdoc/concepts/
tmi2_fluffos_v2/lib/doc/driverdoc/driver/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/arrays/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/buffers/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/compile/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/ed/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/filesystem/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/floats/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/functions/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/general/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/mappings/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/numbers/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/parsing/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/constructs/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/preprocessor/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/types/
tmi2_fluffos_v2/lib/doc/driverdoc/platforms/
tmi2_fluffos_v2/lib/doc/mudlib/
tmi2_fluffos_v2/lib/ftp/
tmi2_fluffos_v2/lib/include/driver/
tmi2_fluffos_v2/lib/log/
tmi2_fluffos_v2/lib/log/driver/
tmi2_fluffos_v2/lib/obj/net/
tmi2_fluffos_v2/lib/obj/shells/
tmi2_fluffos_v2/lib/obj/tools/
tmi2_fluffos_v2/lib/std/adt/
tmi2_fluffos_v2/lib/std/board/
tmi2_fluffos_v2/lib/std/body/
tmi2_fluffos_v2/lib/std/fun/
tmi2_fluffos_v2/lib/std/living/
tmi2_fluffos_v2/lib/std/object/
tmi2_fluffos_v2/lib/std/shop/
tmi2_fluffos_v2/lib/std/socket/
tmi2_fluffos_v2/lib/std/user/
tmi2_fluffos_v2/lib/std/virtual/
tmi2_fluffos_v2/lib/student/
tmi2_fluffos_v2/lib/student/kalypso/
tmi2_fluffos_v2/lib/student/kalypso/armor/
tmi2_fluffos_v2/lib/student/kalypso/rooms/
tmi2_fluffos_v2/lib/student/kalypso/weapons/
tmi2_fluffos_v2/lib/u/l/leto/
tmi2_fluffos_v2/lib/u/l/leto/cmds/
tmi2_fluffos_v2/lib/www/errors/
tmi2_fluffos_v2/lib/www/gateways/
tmi2_fluffos_v2/lib/www/images/
tmi2_fluffos_v2/old/
tmi2_fluffos_v2/win32/
//	File	:  /cmds/adm/_nuke.c
//	Creator	:  Watcher@TMI  (02/24/93)
//	Edited  :  Karathan  (07/13/93) to incorporate new banish daemon
//
//	This command allows an admin to remove all reference to 
//	a selected user. The user's data files will be saved in
//	the ARCHIVE_DIR tree unless it is undefined.

// 93-07-30 Grendel@tmi-2 Kludged to handle mail boxes
// 95-05-06 Leto added -D for deleting wiz including homedir
 
#include <config.h>
#include <login.h>
#include <daemons.h>
#include <mudlib.h>
#include <logs.h>
 
inherit DAEMON ;
 
#define SYNTAX 	"Syntax: nuke [-abdD] [user]\n"
 
int cmd_nuke(string str) {
   string flags, tmp1, tmp2;
   int banish, delete, archive;
 
   if(!adminp(geteuid(previous_object())))  return 0;
 
   notify_fail( SYNTAX );

   if(!str || str == "")  return 0;
 
 
   if(sscanf(str, "-%s %s",flags, str) == 2) {
	if(sscanf(" " + flags + " ", "%sb%s", tmp1, tmp2) == 2)
	   banish = 1;
	if(sscanf(" " + flags + " ", "%sd%s", tmp1, tmp2) == 2)
	   delete = 1;
       if(sscanf(" " + flags + " ", "%sD%s", tmp1, tmp2) == 2)
          delete = 2;
	if(sscanf(" " + flags + " ", "%sa%s", tmp1, tmp2) == 2)
	   archive = 1;
   }
 
   if(archive && delete) {
   write("Nuke: You cannot both delete and archive a user.n");
   return 1; }
 
   if(ARCHIVE_DIR && !delete)  archive = 1;
 
   if(!user_exists(str)) {
   write("Nuke: No such user exists.\n");
   return 1; }
 
   write("Are you sure you wish to nuke poor " + capitalize(str) + "? [y/n] ");
   input_to("confirm_deletion", 0, str, banish, delete, archive);
 
return 1; }
 
static int confirm_deletion(string str, string name, int banish,
			    int delete, int archive) {
 
   if(!str || member_array(lower_case(str), ({ "yes", "y" })) == -1) {
   write("Nuke: Character deletion aborted.\n");
   return 1; }
 
   if (banish)
       BANISH_D->banish_name(name);
 
   if(find_player(name)) {
 
   tell_object(find_player(name),
      "\nA bolt of lightning descends from the heavens, and all goes dark.\n");
   tell_room(environment(find_player(name)),
      "A bolt of lightning suddenly descends from the heavens. It strikes\n" +
      capitalize(name) + " in the chest, leaving only a pile of ashes where " +
      subjective((string)this_player()->query("gender")) + " once stood.\n",
      ({ find_player(name) }));
 
   find_player(name)->save_data();
 
   find_player(name)->remove(); }
 
   //	Either move data files to ARCHIVE_DIR dir, or completely delete
 
   if(archive) {
 
   if(!directory_exists(ARCHIVE_DIR + "user/")) {
mkdir( ARCHIVE_DIR[0..<2] );
     mkdir( ARCHIVE_DIR + "user" );
     mkdir( ARCHIVE_DIR + "connection" );
     mkdir( ARCHIVE_DIR + "mail" );
   }
 
   if(file_exists(DATA_DIR+"/std/user/"+name[0..0]+"/"+name+ __SAVE_EXTENSION__))
   rename(DATA_DIR+"/std/user/" + name[0..0] + "/" + name + __SAVE_EXTENSION__,
	  ARCHIVE_DIR + "user/" + name + __SAVE_EXTENSION__);
   rename(PDATA_DIR+name[0..0]+ "/" + name + __SAVE_EXTENSION__, ARCHIVE_DIR +
	  "connection/" + name + __SAVE_EXTENSION__);
   if(file_size("/data/mail/"+name+"-mbox.o") >= 0)
	   rename("/data/mail/"+name+"-mbox.o",
		  ARCHIVE_DIR+"mail/"+name+"-mbox.o");
   write("Nuke: Character archived and deleted.\n");
   }
 
   else {
   if(file_exists(DATA_DIR+"/std/user/"+name[0..0]+"/"+name+__SAVE_EXTENSION__))
   rm(DATA_DIR + "/std/user/" + name[0..0] + "/" + name + __SAVE_EXTENSION__);
    rm (PDATA_DIR + name[0..0] + "/" + name + __SAVE_EXTENSION__ );
   if(file_size("/data/mail/"+name+"-mbox.o") >= 0)
	   rm( "/data/mail/"+name+"-mbox.o" );
   write("Nuke: Character deleted.\n");
   if(delete==2) {
  if(directory_exists(user_path(name))) {
    CLEAN_D->clean_dir(user_path(name));
   write("Nuke: Home directory removed.\n");
   }
   }
 
  }
   log_file(DEMOTE_LOG,getuid(this_player())+" nuked "+name+" at "+ctime(time())+"\n");
return 1; }
 
string help() {
 
   return( SYNTAX + "\n" +
     "This command completely removes the the data files of the inputted\n" +
     "user, as well as nicely removing them if they are presently online.\n" +
     "If the 'b' flag is given, it will automatically add the user's name\n" +
     "to the mudlib's banish file. If the 'a' flag is selected, then the\n" +
     "user's data files will be archived before character removal, and if\n" +
     "the 'd' flag is set, it will override any archive default sets, and\n" +
   "delete the data files without archiving. Using 'D' will delete the user\n"+
  "and remove the entire home directory as well.\n");
 
   if(ARCHIVE_DIR)
   return("All character deletions are automatically archived unless the\n" +
	 "delete flag is requested.\n");
 
}