o ~_*'@sddlmZeddlZddlZddlZddlZddlZddl Zzddl m Z Wne y9ddlm Z YnwddlZddlmZddlmZddlmZddlmZGdd d ejjZejd eejd eejd eejd eejdeejdeejdeejdeejdeejdeejdeejdeejdeejjgddS))standard_libraryN)quote)config)log)tempdir)utilc@s8eZdZdZddZddZddZdd Zd d Zd S) LFTPBackendz4Connect to remote store using File Transfer Protocolc Cstjj||ztd}|}|}Wn ty Ynw|s+t dt j j | dd dd d}t d|||_tj|jd|_td d |j|_|jd |j|_|jro|jd |j7_td d|j|_t|jdkrd|_|jddkr|jd7_d|_|jjr|jj|_||_d|j|jf|_tj dkrd|_!nd|_!tj"|_#|jdkrtj$sgd}|j#s|D]}tj%|}tj&|r||_#nqt'()\|_*|_+t,|j*d|_-|j-.dtj$rdndd|j#r|j-.dt/|j#dtj0r"|j-.dt/tj0d|jjdkr<|j-.d|j-.d|j-.d n |jjd!krV|j-.d"|j-.d#|j-.d$n|j-.d%|j-.d&|j-.d'tj1|j-.d(tj2|j-.d)|j!t 3t j4kr|j-.d*|jjd!kr|j-.d+|j|j5d!d,fn |j-.d+|j|jf|j-t 3t j4krt6|j+d-}t 7d.|dSdS)/Nzlftp --versionz%LFTP not found: Please install LFTP. rz | zLFTP version is %slftpz^webdavhttpz://z:%sz^//z -u '%s,%s'regularoffonhttps)z~/.duplicity/cacert.pemz~/duplicity_cacert.pemz/etc/duplicity/cacert.pemwzset ssl:verify-certificate falsetruezset ssl:ca-file zset ssl:ca-path ftpszset ftp:ssl-allow true zset ftp:ssl-protect-data true zset ftp:ssl-protect-list true ftpeszset ftp:ssl-force on zset ftp:ssl-protect-data on zset ftp:ssl-protect-list on zset ftp:ssl-allow false zset http:use-propfind true zset net:timeout %s zset net:max-retries %s zset ftp:passive-mode %s zdebug z open %s %s ftprz SETTINGS: %s)8 duplicitybackendBackend__init__ospopenreadclose Exceptionr FatalError ErrorCodeftps_lftp_missingsplitNotice parsed_url strip_prefixschemelowerresubhostname url_stringportpath remote_pathlenauthflagusername get_passwordpasswordrftp_connectionconn_optssl_cacert_file cacert_filessl_no_check_certificate expanduserisfilerdefaultmkstemptempfdtempnamefdopentempfilewrite cmd_quotessl_cacert_pathtimeout num_retries getverbosityDEBUGreplaceopenDebug) selfr)pfoutretversioncacert_candidatesr2frW@/usr/lib/python3/dist-packages/duplicity/backends/lftpbackend.pyr2s                 "   zLFTPBackend.__init__cCst|djr t|}d|jt|jt|jt|jt|f}t d|| |\}}}t d|t d|t d|dS)Nz.lftp -c "source %s; mkdir -p %s; put %s -o %s"CMD: %sz STATUS: %s STDERR: %s STDOUT: %s) isinstance __class__rfsdecoderCrGr3uc_namerrOsubprocess_popen)rP source_pathremote_filename commandlineslerWrWrX_puts"   zLFTPBackend._putcCsxt|djr t|}dt|jt|j|t|jf}t d|| |\}}}t d|t d|dS)NrYz!lftp -c "source %s; get %s -o %s"rZr[r\) r]r^rr_rGrCr3r`rrOra)rPrc local_pathrd_rfrgrWrWrX_gets    zLFTPBackend._getcCs~tj|jj}t|j}dt|j|||f}t d|| |\}}}t d|t d|dd| dDS)NzFlftp -c "source %s; ( cd %s && ls ) || ( mkdir -p %s && cd %s && ls )"rZr[r\cSs"g|] }|rt|dqS)r)rfsencoder').0xrWrWrX s"z%LFTPBackend._list..r ) urllibparseunquoter)r2rGr3rCrrOrar')rP remote_dir quoted_pathrdrjrfrgrWrWrX_lists zLFTPBackend._listcCsbdt|jt|jtt|f}td|||\}}}td|td|dS)Nz!lftp -c "source %s; cd %s; rm %s"rZr[r\)rGrCr3rr_rrOra)rPfilenamerdrjrfrgrWrWrX_deletes  zLFTPBackend._deleteN) __name__ __module__ __qualname____doc__rrhrkrurwrWrWrWrXr0sb rrrfishrlftp+ftp lftp+ftps lftp+fish lftp+ftpes lftp+sftp lftp+webdav lftp+webdavs lftp+http lftp+https) rrr|rr}r~rrrrrrr)futurerinstall_aliasesros.pathr-urllib.requestrp urllib.parse urllib.errorshlexrrG ImportErrorpipesduplicity.backendrrrrrrrrregister_backend uses_netlocextendrWrWrWrXsD      (