/* Do not remove the headers from this file! see /USAGE for more info. */ #define MAX_IDLE_TIME 600 // This is really x+60 seconds. LWI. #define NEEDS_ARG() if(!arg){ info->cmdPipe->send("500 command not understood.\n"); return; } #define FTPLOG(x) LOG_D->log(LOG_FTP, x) #define FTP_WELCOME "/data/config/FTPWELCOME" #ifdef ALLOW_ANON_FTP #define ANON_PREFIX "/ftp/pub" #define ANON_USER() (member_array(info->user, anon_logins) != -1) #define ANON_CHECK(x) if(ANON_USER() && x[0..(strlen(ANON_PREFIX)-1)] != ANON_PREFIX) { info->cmdPipe->send("550 Pemission denied.\n"); if(info->dataPipe) destruct(info->dataPipe); return; } #else #define ANON_CHECK(x) #endif #define FTP_BLOCK_SIZE 1024 class ftp_session { int connected; string user; mixed priv; string pwd; object dataPipe; object cmdPipe; int idleTime; int binary; string targetFile; string command; int filepos; string renamefrom; } private void FTP_CMD_user(class ftp_session, string); private void FTP_CMD_pass(class ftp_session, string); private void FTP_CMD_retr(class ftp_session, string); private void FTP_CMD_stor(class ftp_session, string); private void FTP_CMD_nlst(class ftp_session, string); private void FTP_CMD_list(class ftp_session, string); private void FTP_CMD_pwd(class ftp_session, string); private void FTP_CMD_cdup(class ftp_session, string); private void FTP_CMD_cwd(class ftp_session, string); private void FTP_CMD_quit(class ftp_session, string); private void FTP_CMD_type(class ftp_session, string); private void FTP_CMD_mkd(class ftp_session, string); private void FTP_CMD_port(class ftp_session, string); private void FTP_CMD_noop(class ftp_session, string); private void FTP_CMD_dele(class ftp_session, string); private void FTP_CMD_syst(class ftp_session, string); private void FTP_CMD_pasv(class ftp_session, string); string FTP_CMD_retr_callback(object);