MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | // MorgenGrauen MUDlib |
| 2 | // |
| 3 | // master/ftpimp.c -- FTP Avatar |
| 4 | // |
| 5 | // $Id: ftpimp.c 6440 2007-08-18 23:00:49Z Zesstra $ |
| 6 | // |
| 7 | // siehe /secure/ftpd |
| 8 | |
| 9 | #pragma strong_types |
| 10 | |
| 11 | #include "/secure/master.h" |
| 12 | #define FTPD "/secure/ftpd" |
| 13 | |
| 14 | //private inherit "/std/shells/filesys/filesys"; |
| 15 | private inherit "/secure/misc/filesys/filesys"; |
| 16 | |
| 17 | static string user; // Name des zugehoerigen Users |
| 18 | |
| 19 | nomask private int secure_impcall() { |
| 20 | return |
| 21 | getuid(previous_object()) == ROOTID && |
| 22 | geteuid(previous_object()) == ROOTID; |
| 23 | |
| 24 | } |
| 25 | |
| 26 | // Nach dem Aufruf von SetUser wird der Filename geaednert, sodass |
| 27 | // das normale clonep in get_dir nicht mehr geht. Hier ein ersatz. |
| 28 | private nomask int my_is_clone() { |
| 29 | return member(object_name(this_object()),':')>=0; |
| 30 | } |
| 31 | |
| 32 | nomask void create() { |
| 33 | if( !clonep(this_object()) ) { |
| 34 | set_next_reset( -1 ); // blueprint soll nicht sterben |
| 35 | return; |
| 36 | } |
| 37 | //if( secure_impcall() ) ::create(); |
| 38 | } |
| 39 | |
| 40 | nomask int SetUser( string name ) { |
| 41 | if( !secure_impcall() || !clonep(this_object()) ) return -2; |
| 42 | if( stringp(user) && user != "" ) { |
| 43 | //write( "User="+user+"\n" ); |
| 44 | return -1; // schon ein name da! |
| 45 | } |
| 46 | user = lower_case(name); |
| 47 | seteuid( user ); |
| 48 | set_next_reset( 1800 ); |
| 49 | } |
| 50 | |
| 51 | // Gibt einen negativen Wert zurück, wenn die Datei nicht gelesen werden |
| 52 | // kann oder einen string, der die gesamten Daten des Verzeichnisses |
| 53 | // enthält. |
| 54 | nomask mixed GetDir(string dir) |
| 55 | { |
| 56 | mixed ret; ret = ""; |
| 57 | if( !secure_impcall() || !my_is_clone()) return -2; |
| 58 | if( !stringp(user) || user=="" ) return -1; |
| 59 | _ls_output( dir, &ret, user, 0x83 ); |
| 60 | set_next_reset( 1800 ); |
| 61 | return ret; |
| 62 | } |
| 63 | |
| 64 | nomask void reset() { |
| 65 | destruct(this_object()); |
| 66 | } |
| 67 | |
| 68 | varargs mixed move() { |
| 69 | return -1; |
| 70 | } |
| 71 | |
| 72 | // Fuer die Meldung auf FTP |
| 73 | nomask string name() { |
| 74 | return capitalize(user); |
| 75 | } |