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/
// Leto changed a type cast from string to string * 
 
#define MONITOR_TIME 900
#define WHO find_living( "asdfral" )
#define TELL(x) if(WHO) message( "debug", "MSG: " + x+ "\n", WHO );
 
 
#include <uid.h>
#include <mailer.h>
#include <net/macros.h>
 
static void monitor_mesgs();

string  *remain;
string  mesg;
static  int idx1, idx2;
                                                   
 
static
void increment_idx() {
   if( ++idx1 > 9 ) {
	idx1 = 0 ;
	if( ++idx2 > 9 ) idx2 = 0;
    }
}
      
static
void refresh() {
  mesg = 0;
  remain = ({ });
}
                                               
static
int restore_mesg( int id ) {
  string file;
 
  refresh();
  file = mail_mesg_file( id );
  if( !file_exists( file + __SAVE_EXTENSION__ ) ) return 0;
  return restore_object( file );
}
      
int save_mesg( int id ) {
  int ret;
  string file;
 
  if( !id ) return 0;
  if( file = mail_mesg_file( id ) ) {
    if( !sizeof( remain ) )
       rm( file + __SAVE_EXTENSION__ );
    else
       ret = save_object( file );
  }
  return ret;
}
 
int
valid_access( string frm ) {
   string accessor, *owner;
  
   if( geteuid( previous_object() ) == ROOT_UID )
      return 1;
  
   accessor = base_name( previous_object() );
   if( member_array( accessor, TRUSTED_MAILERS ) > -1 )
      return 1;
  
} // valid_access
 
 
 
string
get_mesg( int id ) {
   if( !restore_mesg( id ) )
     printf( "Unable to restore %d.\n", id );
   if( !mesg || mesg == "" ) mesg = "Empty or lost message!\n";
   return mesg;
}
                      
 
int add_mesg( string *local_to, string msg ) {
   int idx;
 
   refresh();
   idx = time();
 
   // We have to have a unique savefile, or else we have problems later.
   while( file_exists( mail_mesg_file( idx ) + __SAVE_EXTENSION__ ) )
      --idx;
 
   remain = uniq_array( local_to );
   mesg = msg;
   save_mesg( idx );
   return idx;
}
 
 
int
delete_mesg( int id, string user ) {
   refresh();
 
   if( !restore_mesg( id ) ) return 0;
   if( !stringp( user ) || !strlen( user ) ) return -1;
 
   if( member_array( user, remain ) < 0 ) return -2;
   remain -= ({ user });
   save_mesg( id );
   return 1;
}
 
void
create() {
   seteuid( ROOT_UID );
   idx1 = 0;
   idx2 = 0;
// Mobydick disarmed the following line, cause I'm not sure it needs to
// be running unless we do a purge, and it does a lot of file access
// (read slow). We should probably put this on a switch of some kind
// so that we can launch it right after we do a purge, or a lot of people
// despoool their mail, or some such.
//  call_out( "monitor_mesgs", 100 );
   refresh();
} // create
 
static
void monitor_mesgs() {
   int i;
   string *mesgs;
         
   increment_idx();                            
   mesgs = get_dir( MESGDIR + idx1 + "/" + idx2 + "/*" __SAVE_EXTENSION__ );
   i = sizeof( mesgs );
 
   while( i-- ) { 
      sscanf( mesgs[i], "%s" __SAVE_EXTENSION__, mesgs[i] );
      call_out( "monitor_mesg2", 5 + (10*i), mesgs[i] );
   }
 
   call_out( "monitor_mesgs", MONITOR_TIME );
   return;
}                                           

static
void monitor_mesg2( string mesg ) {
   int i, j, id;
   string *tmp, *tmp2;
 
   tmp = ({ });
   tmp2 = ({ });
TELL( "Verify: " + mesg );
   restore_mesg( id = to_int( mesg ) );
   remain = uniq_array( remain );
   tmp = (string *) MAILBOX_D -> verify_mbox( copy( remain ), id ); //Leto
 
   j = sizeof( tmp );
   while( j-- )
      if( user_exists( tmp[j] ) ) tmp2 += ({ tmp[j] });
  
   if( sizeof( remain ) == sizeof( tmp2 ) ) return;  
   remain = tmp2;
   save_mesg( id );
}   
 
/* EOF */