blob: daee34c9b00c4142878b5b33ddf4fbf741dfef1e [file] [log] [blame]
// MorgenGrauen MUDlib
//
// master/ftpimp.c -- FTP Avatar
//
// $Id: ftpimp.c 6440 2007-08-18 23:00:49Z Zesstra $
//
// siehe /secure/ftpd
#pragma strong_types
#include "/secure/master.h"
#define FTPD "/secure/ftpd"
//private inherit "/std/shells/filesys/filesys";
private inherit "/secure/misc/filesys/filesys";
static string user; // Name des zugehoerigen Users
nomask private int secure_impcall() {
return
getuid(previous_object()) == ROOTID &&
geteuid(previous_object()) == ROOTID;
}
// Nach dem Aufruf von SetUser wird der Filename geaednert, sodass
// das normale clonep in get_dir nicht mehr geht. Hier ein ersatz.
private nomask int my_is_clone() {
return member(object_name(this_object()),':')>=0;
}
nomask void create() {
if( !clonep(this_object()) ) {
set_next_reset( -1 ); // blueprint soll nicht sterben
return;
}
//if( secure_impcall() ) ::create();
}
nomask int SetUser( string name ) {
if( !secure_impcall() || !clonep(this_object()) ) return -2;
if( stringp(user) && user != "" ) {
//write( "User="+user+"\n" );
return -1; // schon ein name da!
}
user = lower_case(name);
seteuid( user );
set_next_reset( 1800 );
}
// Gibt einen negativen Wert zurück, wenn die Datei nicht gelesen werden
// kann oder einen string, der die gesamten Daten des Verzeichnisses
// enthält.
nomask mixed GetDir(string dir)
{
mixed ret; ret = "";
if( !secure_impcall() || !my_is_clone()) return -2;
if( !stringp(user) || user=="" ) return -1;
_ls_output( dir, &ret, user, 0x83 );
set_next_reset( 1800 );
return ret;
}
nomask void reset() {
destruct(this_object());
}
varargs mixed move() {
return -1;
}
// Fuer die Meldung auf FTP
nomask string name() {
return capitalize(user);
}