m "Ec@s}dZdkZdkZdkZdkZdkZdkZdkZdkZei doei edZ ndZ dk l Z dk Z dkZdkZdkZdeifdYZdeifd YZd eifd YZd eifd YZdeifdYZdkZdfdYZdfdYZeidjo-dfdYZdefdYZndfdYZeidjo2ddZedjoeei dnn"dZedjo enhd d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdkZ1d?Z2d@Z3dAZ4dBZ5RS(DNtunknownt0itappetdeletmkdtrmdtrnfrtrntotstortstouicCs||_d|_||_tii|||id|ddf|_ d|_ d|_ d|_ d|_d|_d|_d|_|id|iitfdS(Ntas iits:220 %s FTP server (Medusa Async V%s [experimental]) ready.(tservertselft current_modetaddrtasynchatt async_chatt__init__tconntset_terminatort client_addrtNonet client_dct in_buffertclosingtpassive_acceptortpassive_connectiont filesystemt authorizedtrespondthostnametVERSION(RR RR((t8/data/zmath/zope/lib/python/ZServer/medusa/ftp_server.pyRPs           cCsdS(N((R((R"t handle_exptpscCs7|i||_t|idjo d|_ndS(NiR (RRtdatatlen(RR$((R"tcollect_incoming_datausc Cs:|i} t| pdSnti| d}|djo| | | |dg} n | g} ti| d}ti|ddjo1x.|o"|dti jo|d}qWnd|}|djo%|i dt |idd!n|i d| dd d |_t ||p|i| ddSnt||}|i o|djo|idn|i|p|i|nyt|| f}Wn~|iiiti\\}}} } }}|i oy|i i!WqqXn|id| ||| fnXdS(Nt iiitaborscmd_%stpasss<== %ss R tuserthelptquits$530 Please log in with USER and PASSs+451 Server Error: %s, %s: file: %s line: %s(R*R)shelpsquit("RRtlineR%tstringtfindtsptlowertcommandtletterstfun_nametlogtreprthasattrtcommand_not_understoodtgetattrtfunRRtcheck_command_authorizationtcommand_not_authorizedtapplytresultR ttotal_exceptionst incrementtasyncoretcompact_tracebacktfiletttvttbinfoRtclose( RRFR0R4R2R>RCRER:R-RD((R"tfound_terminator|sH      % ! cCsq|ipcd|_|io|iin|io|iin|iiiti i|ndS(Ni( RtclosedRRGRR tclosed_sessionsR@RR(R((R"RGs    cCs|ii|dS(Ni(RRtcwdR-(RR-((R"RKscCs |iiS(N(RRtcdup(RR-((R"RLscCs|ii||S(N(RRtopentpathtmode(RRNRO((R"RMscCs|ii||S(N(RRtlistdirRNtlong(RRNRQ((R"RPscCsz|d}g}x0|D](}|ddjo|i|qqWt|djo d}n |d}|i||S(Niit-t.( R-targst path_argstargtappendR%tdirRRPRQ(RR-RQRTRXRVRU((R"t get_dir_lists   cCs*||ijo|iodSndSdS(Nii(R2Rtwrite_commandst read_only(RR2((R"R;scCs2|iii|idd|id|fdS(Nis%d %si(RR tloggerR5Rtmessage(RR]((R"R5scCs&|id||i|ddS(Ns==> %ss (RR5tresptpush(RR^((R"RscCs|id|dS(Ns!500 '%s': command not understood.(RRR2(RR2((R"R8scCs|id|dS(Ns6530 You are not authorized to perform the '%s' command(RRR2(RR2((R"R<scCs)|i}|ok|ioQ|ii\}}t||}|i|d|_ |ii d|_qt|}n|i \}}t||i }|ititi|io!|id|iidfny|i||fWn%tij o}|idnX||_dS(NiR s425 Can't build data connection(RRtpatreadyRRt xmit_channeltcdct set_sockett connectedRGRRtiptportt create_sockettsockettAF_INETt SOCK_STREAMtbind_local_minus_onetbindR tconnectterrortwhyRR(RRRcRfRpR`RgR((R"tmake_xmit_channels(       !c Cs|i}|oq|ioQ|i\}}t|||}|i |d|_ |ii d|_qt|d|}nz|i \}}t||i |}|ititiy|i||fWn%tij o}|idnX||_dS(Nis425 Can't build data connection(RRR`RaRRt recv_channeltfdRcRdReRGRRRfRgRhRiRjRkRnRoRpRR( RRsRRcRfRpR`RgR((R"tmake_recv_channel!s$      R tASCIItitBinarytetEBCDICtlRDtbcCsti|d}|dddgjo|iti|nd|djo5t|djo"|ddjo|idn"||_ |id|i |d S( sspecify data transfer typeiR RvRzit8s504 Byte size must be 8s200 Type set to %s.N( R.R1R-RDRR8tjoinR%RRttype_map(RR-RD((R"tcmd_typeLs1 cCs|id|idS(sterminate sessions 221 Goodbye.N(RRtclose_when_done(RR-((R"tcmd_quit[s cCstti|dd}ti|d d}ti|ddti|d}||f|_ |i ddS( sspecify data connection portit,iRSiis200 PORT command successful.N( R.tsplitR-tinfoR}RftatoiRgRRR(RR-RRfRg((R"tcmd_port`s (cCs@|idj o|iid|_nt||_|iS(N(RRRRG(R((R"tnew_passive_acceptorls   cCss|i}|id}|iid}|idt i t i |dd|d|dfd|_ dS(s%prepare for server-to-server transferiis$227 Entering Passive Mode (%s,%d,%d)RSRiN(RRtpcRRgtcontrol_channelt getsocknametip_addrRR.R}RRR(RR-RRRg((R"tcmd_pasvts   :cCsd|jo|idny|i|d}Wn3tij o$}|idt |dSnX|id|i |i |i |i i||i idS(s$give name list of files in directorys-FCis 550 Could not list directory: %sNs1150 Opening %s mode data connection for file list(R-tremoveRRYtdir_list_producertosRoRpRR6R~RRqRtpush_with_producerR(RR-RRp((R"tcmd_nlsts   cCsy|i|d}Wn3tij o$}|idt|dSnX|id|i |i |i |i i ||i idS(sgive list files in a directoryis 550 Could not list directory: %sNs1150 Opening %s mode data connection for file list(RRYR-RRRoRpRR6R~RRqRRR(RR-RRp((R"tcmd_lists  cCs2|i|o|idn|iddS(schange working directorys250 CWD command successful.s550 No such directory.N(RRKR-R(RR-((R"tcmd_cwdscCs2|i|o|idn|iddS(s-change to parent of current working directorys250 CDUP command successful.s550 No such directory.N(RRLR-R(RR-((R"tcmd_cdupscCs|id|iidS(s#print the current working directorys"257 "%s" is the current directory.N(RRRtcurrent_directory(RR-((R"tcmd_pwdsc Cs|d}|ii|p|id|n^ti|ii|ti }|id|d|d|d|d|d|dfd S( s#show last modification time of fileis550 "%s" is not a files213 %4d%02d%02d%02d%02d%02diiiiiN( R-tfilenameRRtisfileRttimetgmtimetstattST_MTIMEtmtime(RR-RR((R"tcmd_mdtms  "cCs|iddS(s do nothings200 NOOP command successful.N(RR(RR-((R"tcmd_noopscCsZ|d}|ii|p|id|n%|id|ii|tidS(sreturn size of fileis550 "%s" is not a files213 %dN(R-RRRRRRtST_SIZE(RR-R((R"tcmd_sizes  cCsYt|djo|iti|n)|d}|ii|p"|i d||i dny*d|i |i }|i||}Wn0tj o$}|i dt|dSnX|i d|i|i |f|i|io+y|i|iWnnXd |_n|iit||i||iidS( sretrieve a fileiis checking %ss550 No such filetrs'553 could not open file for reading: %sNs1150 Opening %s mode data connection for file '%s'i(R%R-RR8R.R}RCRRtlog_infoRt type_mode_mapRRORMRstIOErrorRpR6R~Rqtrestart_positiontseekRRt file_producerR(RR-RsRORCRp((R"tcmd_retrs.  !   twbcCst|djo|iti|n|iod}|iddSn|d}y|i ||}Wn0t j o$}|idt|dSnX|id|i|i|f|i|dS(s store a fileiis%553 restart on STOR not yet supportedNis'553 could not open file for writing: %ss 150 Opening %s connection for %s(R%R-RR8R.R}RRRCRMRORsRRpR6R~RRt(RR-RORsRRCRp((R"tcmd_stors    !cCs,|io|iin|iddS(sabort operations226 ABOR command successful.N(RRRGR(RR-((R"tcmd_abors cCs|i|dS(sappend to a filetabN(RRR-(RR-((R"tcmd_appe%scCst|djo|iti|nk|d}|ii|o<y!|ii ||i dWq|i dqXn|i d|dS(Niis250 DELE command successful.s550 error deleting file.s550 %s: No such file.( R%R-RR8R.R}RCRRtunlinkR(RR-RC((R"tcmd_dele)s cCsvt|djo|iiti|nC|d}y!|ii ||i dWn|i dnXdS(Niis257 MKD command successful.s550 error creating directory.( R%R-RR2tnot_understoodR.R}RNRtmkdirR(RR-RN((R"tcmd_mkd7s cCsvt|djo|iiti|nC|d}y!|ii ||i dWn|i dnXdS(Niis250 RMD command successful.s550 error removing directory.( R%R-RR2RR.R}RNRtrmdirR(RR-RN((R"tcmd_rmdBs cCsKt|djo|d|_|idn|iti|dS(sspecify user nameis331 Password required.N(R%R-RR*RR8R.R}(RR-((R"tcmd_userMs  cCst|djo d}n |d}|iii||i|\}}}|o>|i d|||_ d|_ |idt|n|i d|dS(sspecify passwordiR is230 %ssSuccessful login: Filesystem=%ss530 %sN(R%R-tpwRR t authorizert authorizeR*R>R]tfsRRRRR6(RR-RRR>R]((R"tcmd_passUs  '  cCsayti|d}Wn)tj o|iti|nX||_|i d|dS(srestart incomplete transferisB350 Restarting at %d. Send STORE or RETRIEVE to initiate transfer.N( R.RR-tpost ValueErrorRR8R}RR(RR-R((R"tcmd_restds cCs3|ddjo|idn|iddS(s&obsolete - set file transfer structureitfFs 200 STRU F Oks504 Unimplemented STRU typeN(R-RR(RR-((R"tcmd_struoscCs3|ddjo|idn|iddS(s!obsolete - set file transfer modeitsSs 200 MODE S Oks502 Unimplemented MODE typeN(R-RR(RR-((R"tcmd_modewscCs|iddS(s+show operating system type of server systems215 UNIX Type: L8N(RR(RR-((R"tcmd_systs cCst|i}g}x~|D]v}|d djo_t||}t|t|i jo0|i o"|i d|d|i fqqqqW|o4|i d|i ti||i dn|i ddS(sgive help informationitcmd_s %s %ss+214-The following commands are recognized s214 s214- Help Unavailable 214 N(RXRt __class__tattrst help_linestattrR9txttypetcmd_helpt__doc__RWR_Rt producerstlines_producer(RR-RRRR((R"Rs . (sunknownR(6t__name__t __module__RR[RZRRlRR#R&RHRIRGRKRLRMRPRYR;R5RR8R<RqRtR~RRRRRRRRRRRRRRRRRRRRRRRRRRRR(((R"R>sh   2           ! **           (         t ftp_servercBsitZeZdeZddddeie i dZ dZ dZ dZdZd ZRS( NsFTP Server (V%s)R icCs||_||_||_yti|d|_Wntij o||_nXt|_ t|_ t|_ t|_ t|_ t|_t|_tii||ititi|i|i|i|if|id|p ti}n|oti|||_nti||_|i dt!i"t!i!t#|i|i|ifdS(Niis?FTP server started at %s Authorizer:%s Hostname: %s Port: %d($RfRRgRRit gethostbyaddrR Rotcounterttotal_sessionsRJttotal_files_outttotal_files_inttotal_bytes_outttotal_bytes_inR?RAt dispatcherRRhRjRktset_reuse_addrRmtlistent logger_objecttsyststdouttresolverR\tresolving_loggertunresolving_loggerRRtctimeR6(RRR RfRgRR((R"Rs2             cCsdS(Ni((R((R"twritablescCsdS(N((R((R"t handle_readscCsdS(N((R((R"thandle_connectscCsU|i\}}|ii|id|d|df|i|||dS(NsIncoming connection from %s:%dii(RtacceptRRRR@Rtftp_channel_class(RRR((R"t handle_accepts cCsd}tid|id|id|idd|id|ii|i idd |i d |i d d ||i id ||i id |ig S( NcCstiti|S(N(R.R}tstatus_handlert english_bytestn(R((R"t nice_bytesss

%s

s
Listening on Host: %ssPort: %ds
SessionssTotal: %ssCurrent: %ds
FilessSent: %ssReceived: %ss
Bytess
Exceptions: %s(RRRRt SERVER_IDENTR RgRtas_longRJRRRRR?(RR((R"tstatuss (RRRRR!RRR\t file_loggerRRRRRRRR(((R"Rs $1    RcBs)tZdZdZdZdZRS(NcCsotii|||_|ititi|i |ii ddf|i |_ |i ddS(Nii( RARRRRRhRiRjRkRmRRR(RR((R"R-s   cGsdS(N((Rtignore((R"R5>scCs|i\}}|id|ii}|dj o/|i |||_d|_ d|i_ n||f|_ |i dS(Nii(RRRRt setblockingRRtdcRRdReRRaRG(RRRR((R"RAs      (RRRRaRR5R(((R"R*s  RbcBs_tZdZdZddZdZdZdZdZ dZ d Z d Z RS( Ni@icCs&||_||_tii|dS(N(tchannelRRRRR(RRR((R"RXs  cGsdS(N((RT((R"R5`scCs|i S(N(RRe(R((R"treadablecscCsdS(Ni((R((R"RfscCs)tii||}|i||_|S(N(RRtsendRR$R>t bytes_out(RR$R>((R"RiscCs,|iddy|iWnnXdS(Ns*unexpected disconnect on data xmit channelRo(RRRG(R((R"t handle_errorns cCsdS(N((R((R"R{scCs|i}|i}d|_|ii|i i|i t |i p|i dn|ip|i dn~~|`tii|dS(Ns226 Transfer completes'426 Connection closed; transfer aborted(RRtcR tsRRRR@RRR%t producer_fifoRRIRRRG(RRR((R"RG}s     ( RRtac_out_buffer_sizeRRRR5RRRRRRG(((R"RbOs      RrcBsMtZdZdZdZdZdZdZdZdZ RS( NcCs;||_||_||_tii|t|_dS(N( RRRRsRARRRtbytes_in(RRRRs((R"Rs    cGsdS(N((RR((R"R5scCsdS(N((R((R"RscCsdS(Ni((R((R"RscGs9ttii|}|d}|iit ||S(Ni( R=RARtrecvRTR>RRR@R%(RTRR>((R"Rs i cCs[|i|i}|o>y|ii|WqWtj o|iddqWXndS(Nsgot exception writing block...Ro(RRt buffer_sizetblockRstwriteRR(RR((R"Rs cCs]|ii}|ii|ii|ii|i i |ii d|i dS(Ns226 Transfer complete.( RRR RRR@RRRRsRGR(RR((R"t handle_closes    ( RRRR5RRRRRR(((R"Rrs      tdummy_authorizercBstZddZdZRS(Nt/cCs ||_dS(N(trootR(RR((R"RscCs+d|_d|_ddti|ifS(NiisOk.(ii(RtpersonaR[tfilesyst os_filesystemRR(RRtusernametpassword((R"Rs  (RRRR(((R"Rs tanon_authorizercBstZddZdZRS(NRcCs ||_dS(N(RR(RR((R"RscCsD|djo/d |_d|_ddti|ifSnd SdS( Ntftpt anonymousiisOk.isPassword invalid.(R R (ii(isPassword invalid.N( R RRR[RRRRR(RRR R ((R"Rs    (RRRR(((R"R s tposixtunix_authorizercBstZdZdZRS(Nc Csdk}dk}y|i|}Wntj o d SnX|d}|i||d |joDd|_ t i d|dd|d|df}dd |fSnd SdS( Nis No such user.iiRiRisLogin successful.sPassword invalid.(is No such user.N(isPassword invalid.N(tcrypttpwdtgetpwnamR RtKeyErrorRtmangledR RR[Rtschizophrenic_unix_filesystemR( RRR R RRRRR((R"Rs      cCsdS(Ns((R((R"t__repr__s(RRRR(((R"Rs tunix_authorizer_with_anonymouscBs tZdddZdZRS(NicCs||_||_dS(N(RRt real_users(RRR((R"Rs cCsti|ddgjodk}y|id}titiddjo|id}n|id}d|_ |i djo|d|_ nti|i d}dd |fSWq tj o d Sq Xn)|ioti||||Snd SdS(NR R itlinuxtnobodyiiRsAnonymous Login SuccessfulsAnonymous account not set upsUser logins not allowed(isAnonymous account not set upN(isUser logins not allowedN(R.R1R RRt ftp_user_infoRtunametnobody_user_infoRR[RRRRtunix_filesystemRRRRRR (RRR R RRRR((R"Rs(       (RRRRR(((R"RsRcBs tZdZdZdZRS(Ni@cCs||_d|_dS(Ni(RsRtdone(RR RRs((R"Rs cCsP|iodSn;|ii|i}|p|iid|_n|SdS(NR i(RRRstreadt block_sizeRRG(RR((R"tmores   (RRR!RR"(((R"Rs t8021cCsidk}ttdti|}ytiWn-t j o!t i ddti nXdS(NRgs+FTP server shutting down. (received SIGINT)twarning( RRRR.RRgRRAtlooptKeyboardInterruptRRt close_all(RgRR((R"ttest%s  t__main__icCstt}dS(N(RRR(R((R"R(7sR(sabort previous commandtacctsspecify account (ignored)tallosallocate storage (vacuously)Rsappend to a fileRLs-change to parent of current working directoryRKschange working directoryRs delete a fileR+sgive help informationtlistsgive list files in a directoryRsmake a directorytmdtms#show last modification time of fileROsspecify data transfer modetnlsts$give name list of files in directorytnoops do nothingR)sspecify passwordtpasvs%prepare for server-to-server transferRgsspecify data connection portRs#print the current working directoryR,sterminate sessiontrestsrestart incomplete transfertretrsretrieve a fileRsremove a directoryRsspecify rename-from file nameRsspecify rename-to file nametsites(non-standard commands (see next section)tsizesreturn size of fileRsreturn status of serverR s store a fileR sstore a file with a unique nametstrusspecify data transfer structuretsysts+show operating system type of server systemRsspecify data transfer typeR*sspecify user nametxcups:change to parent of current working directory (deprecated)txcwds%change working directory (deprecated)txmkdsmake a directory (deprecated)txpwds0print the current working directory (deprecated)txrmdsremove a directory (deprecated)cCs&tititdidS(Ns/proc/self/stati(R.RRRMtreadline(((R"t get_vm_sizekscCsdtdGHdS(Nsvm: %8dki(R=(((R"tprint_vmns($tRCS_IDRARRRiRR.RRt startswithRR!RRRR\RRRRRRbRrRRR tnameRRRR(Rtargvtcommand_documentationR=R>(RARRRR=RR RCR?RRrR(R\RRR.RRbR>RR!RRRRiRRRR((R"t?sR             vx%=) %     ]+