
    7g$L                     j   d Z ddlZddlZddlZddlmZmZ ddlmZ ddl	m
Z
mZmZmZmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddl	mZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> eedZ? G d de
e          Z@ddlAmBZB dS )z
Server-mode SFTP support.
    N)md5sha1)util)BaseSFTPMessageSFTP_FAILURESFTP_PERMISSION_DENIEDSFTP_NO_SUCH_FILEint64)SFTPServerInterface)SFTPAttributes)DEBUG)SubsystemHandler)b)%
CMD_HANDLE	SFTP_DESC
CMD_STATUSSFTP_EOFCMD_NAMESFTP_BAD_MESSAGECMD_EXTENDED_REPLYSFTP_FLAG_READSFTP_FLAG_WRITESFTP_FLAG_APPENDSFTP_FLAG_CREATESFTP_FLAG_TRUNCSFTP_FLAG_EXCL	CMD_NAMESCMD_OPEN	CMD_CLOSESFTP_OKCMD_READCMD_DATA	CMD_WRITE
CMD_REMOVE
CMD_RENAME	CMD_MKDIR	CMD_RMDIRCMD_OPENDIRCMD_READDIRCMD_STAT	CMD_ATTRS	CMD_LSTAT	CMD_FSTATCMD_SETSTATCMD_FSETSTATCMD_READLINKCMD_SYMLINKCMD_REALPATHCMD_EXTENDEDSFTP_OP_UNSUPPORTED)r   r   c                        e Zd ZdZefdZ fdZd Z fdZe	d             Z
e	d             Zd Zdd
ZddZd Zd Zd Zd Zd Z xZS )
SFTPServerz
    Server-side SFTP subsystem support.  Since this is a `.SubsystemHandler`,
    it can be (and is meant to be) set as the handler for ``"sftp"`` requests.
    Use `.Transport.set_subsystem_handler` to activate this class.
    c                 ^   t          j        |            t          j        | |||           |                                }t	          j        |                                dz             | _        |                                | _	        d| _
        i | _        i | _         ||g|R i || _        dS )a  
        The constructor for SFTPServer is meant to be called from within the
        `.Transport` as a subsystem handler.  ``server`` and any additional
        parameters or keyword parameters are passed from the original call to
        `.Transport.set_subsystem_handler`.

        :param .Channel channel: channel passed from the `.Transport`.
        :param str name: name of the requested subsystem.
        :param .ServerInterface server:
            the server object associated with this channel and subsystem
        :param sftp_si:
            a subclass of `.SFTPServerInterface` to use for handling individual
            requests.
        z.sftp   N)r   __init__r   get_transportr   
get_loggerget_log_channelloggerget_hexdumpultra_debugnext_handle
file_tablefolder_tableserver)selfchannelnamerD   sftp_siargskwargs	transports           N/var/www/html/syslog/venv/lib/python3.11/site-packages/paramiko/sftp_server.pyr:   zSFTPServer.__init___   s    . 	$!$v>>>))++	oi&?&?&A&AG&KLL$0022gf6t666v66    c                 b   t          t          |          t                    rI|D ]D}t                                          |d| j                                        z   dz   |z              Ed S t                                          |d| j                                        z   dz   |z              d S )Nz[chan z] )
issubclasstypelistsuper_logsockget_name)rE   levelmsgm	__class__s       rL   rS   zSFTPServer._log   s    d3ii&& 	N P PUHty/A/A/C/C$Cd$JQ$NOOOOP P GGLL49+=+=+?+? ?$ F LMMMMMrM   c                    || _         |                     t          d                    |                     |                                  | j                                         	 	 |                                 \  }}n# t          $ r |                     t          d           Y d S t          $ rb}|                     t          dt          |          z              |                     t          t          j                               Y d }~d S d }~ww xY wt          |          }|                                }	 |                     |||           n# t          $ r}|                     t          dt          |          z              |                     t          t          j                               	 |                     |t"                     n#  Y nxY wY d }~nd }~ww xY w)Nz#Started sftp server on channel {!r}TzEOF -- end of sessionzException on channel: z Exception in server processing: )rT   rS   r   format_send_server_versionrD   session_started_read_packetEOFError	Exceptionstrr   
tb_stringsr   get_int_process_send_statusr   )	rE   rG   rK   rF   tdataerW   request_numbers	            rL   start_subsystemzSFTPServer.start_subsystem   s   			%>EEgNNOOO!!#####%%%	++--44   		%!8999   		%!9CFF!BCCC		%!2!2333 $--C [[]]N	a5555   		%!Cc!ff!LMMM		%!2!2333%%nlCCCCD	sP   %A= =%D%	D.ADD7E 
GAG1GGGGGc                 V   | j                                          t                                                       | j                                        D ]}|                                 | j                                        D ]}|                                 i | _        i | _        d S N)rD   session_endedrR   finish_subsystemrB   valuescloserC   )rE   frY   s     rL   rn   zSFTPServer.finish_subsystem   s    !!###  """ '')) 	 	AGGIIII"))++ 	 	AGGIIIIrM   c                     | t           j        k    rt          S | t           j        k    s| t           j        k    rt
          S t          S )au  
        Convert an errno value (as from an ``OSError`` or ``IOError``) into a
        standard SFTP result code.  This is a convenience function for trapping
        exceptions in server code and returning an appropriate result.

        :param int e: an errno code, as from ``OSError.errno``.
        :return: an `int` SFTP error code like ``SFTP_NO_SUCH_FILE``.
        )errnoEACCESr	   ENOENTENOTDIRr
   r   )rh   s    rL   convert_errnozSFTPServer.convert_errno   s<     ))5<Q%-%7%7$$rM   c                    t           j        dk    rX|j        |j        z  rt	          j        | |j                   |j        |j        z  r t	          j        | |j	        |j
                   |j        |j        z  r!t	          j        | |j        |j        f           |j        |j        z  rEt!          | d          5 }|                    |j                   ddd           dS # 1 swxY w Y   dS dS )a:  
        Change a file's attributes on the local filesystem.  The contents of
        ``attr`` are used to change the permissions, owner, group ownership,
        and/or modification & access time of the file, depending on which
        attributes are present in ``attr``.

        This is meant to be a handy helper function for translating SFTP file
        requests into local file operations.

        :param str filename:
            name of the file to alter (should usually be an absolute path).
        :param .SFTPAttributes attr: attributes to change.
        win32zw+N)sysplatform_flagsFLAG_PERMISSIONSoschmodst_modeFLAG_UIDGIDchownst_uidst_gidFLAG_AMTIMEutimest_atimest_mtime	FLAG_SIZEopentruncatest_size)filenameattrrq   s      rL   set_file_attrzSFTPServer.set_file_attr   s.    <7""{T22 14<000{T-- =4;<<<;)) 	?HXt}=>>>;' 	)h%% )

4<((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )	) 	)s   8C  C$'C$c           	      H   t                      }|                    |           |D ]}t          |t                    r|                    |           -t          |t
                    r|                    |           Xt          |t          t          f          r|                    |           t          |          t          u r|                    |           t          d                    |t          |                              |                     ||           d S )Nzunknown type for {!r} type {!r})r   add_int
isinstancer   	add_int64intra   bytes
add_stringrP   r   _packr`   r[   _send_packet)rE   ri   rf   rI   rW   items         rL   	_responsezSFTPServer._response   s   iiN### 	 	D$&& d####D#&& 	D!!!!D3,// t$$$$d~--

35<<T4::NN   	!S!!!!!rM   Fc                    t          t          |          t                    s|                     ||           d S |                    t          d                    | j                                       | xj        dz  c_        |r|| j        |	                                <   n|| j
        |	                                <   |                     |t          |	                                           d S )Nzhx{:d}r9   )rO   rP   
SFTPHandlere   	_set_namer   r[   rA   rC   	_get_namerB   r   r   )rE   ri   handlefolders       rL   _send_handle_responsez SFTPServer._send_handle_response   s    $v,,
33 	nf555F8??4+;<<==>>>A 	94:Df..001128DOF,,../~z63C3C3E3EFFFFFrM   Nc                     |!	 t           |         }n# t          $ r d}Y nw xY w|                     |t          ||d           d S )NUnknown )r   
IndexErrorr   r   )rE   ri   codedescs       rL   re   zSFTPServer._send_status   s]    <!  ! ! ! ! 	~z4rBBBBBs    !!c                 "   | j                             |          }t          t          |          t                    r<t                      }|                    |           |                     ||d           d S |                     ||           d S )NT)	rD   list_folderrO   rP   rQ   r   
_set_filesr   re   )rE   ri   pathrespr   s        rL   _open_folderzSFTPServer._open_folder
  s    {&&t,,d4jj$'' 	\\Fd###&&~vtDDDF.$/////rM   c                    |                                 }t          |          dk    r|                     |t                     d S t	                      }|                    |           |                    t          |                     |D ]F}|                    |j                   |                    |           |                    |           G| 	                    t          |           d S )Nr   )_get_next_fileslenre   r   r   r   r   r   r   r   r   )rE   ri   r   flistrW   r   s         rL   _read_folderzSFTPServer._read_folder  s    &&((u::??nh777FiiN###CJJ 	 	DNN4=)))NN4   JJsOOOO(C(((((rM   c                    |                                 }|                                }|                                }|                                }|                                }|| j        vr|                     |t          d           d S | j        |         }|D ]}	|	t          v r|	}
t          |	         } n|                     |t          d           d S |dk    rY|	                                }t          t          |          t                    s|                     ||d           d S |j        |z
  }|dk    r|}|dk     r|                     |t          d           d S t                      }|}|||z   k     rt          |||z   |z
            }t          |d          }d} |            }||k     rv|                    ||          }t#          |t                    s|                     ||d           d S |                    |           |t'          |          z  }||z  }||k     v||                                z  }|||z   k     t+                      }|                    |           |                    d	           |                    |
           |                    |           |                     t4          |           d S )
NInvalid handlezNo supported hash types foundr   zUnable to stat file   zBlock size too smalli   zUnable to hash file
check-file)
get_binaryget_list	get_int64rc   rB   re   r   _hash_classr   statrO   rP   r   r   r   minreadr   updater   digestr   r   r   	add_bytesr   r   )rE   ri   rW   r   alg_liststartlength
block_sizerq   xalgnamealgstsum_outoffsetblocklenchunklencounthash_objrg   s                       rL   _check_filezSFTPServer._check_file#  s   
 !!<<>>[[]]
(( 02B   FOF# 		 		AK!!n  
 .M   FQ;;Bd2hh77 !!."6KLLLZ%'F??J.D   F''uv~%%:uv~'>??H8U++HEsuuH(""vvfh//!$.. %%&.C   F%%%T"% ("" x(((G! uv~%%$ iiN###|$$$wg,c22222rM   c                 V   |t           z  r|t          z  rt          j        }n#|t          z  rt          j        }nt          j        }|t          z  r|t          j        z  }|t          z  r|t          j	        z  }|t          z  r|t          j        z  }|t          z  r|t          j        z  }|S )z;convert SFTP-style open() flags to Python's os.open() flags)r   r   r~   O_RDWRO_WRONLYO_RDONLYr   O_APPENDr   O_CREATr   O_TRUNCr   O_EXCL)rE   pflagsflagss      rL   _convert_pflagszSFTPServer._convert_pflagsf  s    ^# 	 &?*B 	 IEEo% 	 KEEKE$$ 	!R[ E$$ 	 RZEO# 	 RZEN" 	RYErM   c           	         |                      t          d                    t          |                              |t          k    r|                                }|                     |                                          }t          j	        |          }| 
                    || j                            |||                     d S |t          k    r|                                }|| j        v r%| j        |= |                     |t"                     d S || j        v rD| j        |                                          | j        |= |                     |t"                     d S |                     |t(          d           d S |t*          k    r|                                }|                                }|                                }	|| j        vr|                     |t(          d           d S | j        |                             ||	          }
t1          |
t2          t4          f          rNt7          |
          dk    r|                     |t8                     d S |                     |t<          |
           d S |                     ||
           d S |t>          k    r|                                }|                                }|                                }
|| j        vr|                     |t(          d           d S |                     || j        |                              ||
                     d S |tB          k    rD|                                }|                     || j        "                    |                     d S |tF          k    rY|                                }|                                }|                     || j        $                    ||                     d S |tJ          k    rY|                                }t          j	        |          }|                     || j        &                    ||                     d S |tN          k    rD|                                }|                     || j        (                    |                     d S |tR          k    r,|                                }| *                    ||           d S |tV          k    r`|                                }|| j        vr|                     |t(          d           d S | j        |         }| ,                    ||           d S |tZ          k    r|                                }| j        .                    |          }t_          ta          |          t                    r|                     |tb          |           d S |                     ||           d S |td          k    r|                                }| j        3                    |          }t_          ta          |          t                    r|                     |tb          |           d S |                     ||           d S |th          k    r|                                }|| j        vr|                     |t(          d           d S | j        |         .                                }t_          ta          |          t                    r|                     |tb          |           d S |                     ||           d S |tj          k    rY|                                }t          j	        |          }|                     || j        6                    ||                     d S |tn          k    r|                                }t          j	        |          }|| j        vr|                     |t(          d           d S |                     || j        |         6                    |                     d S |tp          k    r|                                }| j        9                    |          }t1          |t2          t4          f          r-|                     |tt          d|dt                                 d S |                     ||           d S |tv          k    rY|                                }|                                }|                     || j        <                    ||                     d S |tz          k    r[|                                }| j        >                    |          }|                     |tt          d|dt                                 d S |t~          k    r|                                }|dk    r| @                    ||           d S |dk    rY|                                }|                                }|                     || j        A                    ||                     d S |                     |t                     d S |                     |t                     d S )NzRequest: {}r   r   r9   r   r   zposix-rename@openssh.com)CrS   r   r[   r   r   get_textr   rc   r   	_from_msgr   rD   r   r    r   rC   re   r!   rB   rp   r   r"   r   r   r   r   ra   r   r   r   r#   r$   writer%   remover&   renamer'   mkdirr(   rmdirr)   r   r*   r   r+   r   rO   rP   r,   r-   lstatr.   r/   chattrr0   r1   readlinkr   r2   symlinkr3   canonicalizer4   r   posix_renamer5   )rE   rf   ri   rW   r   r   r   r   r   r   rg   oldpathnewpathr   r   target_pathrpathtags                     rL   rd   zSFTPServer._processx  s	   		%--il;;<<<==<<>>D((77E!+C00D&& 0 0ud C C     )^^^^%%F***%f-!!.':::(('--///OF+!!.'::: 02B     (]]^^%%F]]__F[[]]FT_,,!!"$46F   ?6*//??D$-- 8t99>>%%nh?????NN>8TBBBBB!!.$77777)^^^^%%F]]__F>>##DT_,,!!"$46F    7 = =fd K K     *__<<>>Dndk.@.@.F.FGGGGG*__llnnGllnnG 2 27G D D     )^^<<>>D!+C00Dndk.?.?d.K.KLLLLL)^^<<>>Dndk.?.?.E.EFFFFF+<<>>Dnd333F+^^%%FT...!!"$46F   &v.Fnf55555(]]<<>>D;##D))D$t**n55 8~y$?????!!.$77777)^^<<>>D;$$T**D$t**n55 8~y$?????!!.$77777)^^^^%%FT_,,!!"$46F   ?6*//11D$t**n55 8~y$?????!!.$77777+<<>>D!+C00Dndk.@.@t.L.LMMMMM,^^%%F!+C00DT_,,"$46F    7 > >t D D     ,<<>>D;''--D$-- 8"Har>;K;K     !!.$77777+ ,,..K<<>>D 3 3K F F     ,<<>>DK,,T22ENN!UB8H8H     ,,,..Cl""  55555222,,..,,..!!"DK$<$<Wg$N$N     !!.2EFFFFFn.ABBBBBrM   )Frl   )__name__
__module____qualname____doc__r   r:   rS   rj   rn   staticmethodrw   r   r   r   re   r   r   r   r   rd   __classcell__)rY   s   @rL   r7   r7   X   s[         $ 7  7  7  7DN N N N N  8
 
 
 
 
     \ $ ) ) \)8" " "&G G G GC C C C	0 	0 	0) ) )A3 A3 A3F  $^C ^C ^C ^C ^C ^C ^CrM   r7   )r   )Cr   r~   rs   rz   hashlibr   r   paramikor   paramiko.sftpr   r   r   r	   r
   r   paramiko.sftp_sir   paramiko.sftp_attrr   paramiko.commonr   paramiko.serverr   paramiko.utilr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r   r7   paramiko.sftp_handler    rM   rL   <module>r      s  &  
			  



                              1 0 0 0 0 0 - - - - - - ! ! ! ! ! ! , , , , , ,      & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &P C((~C ~C ~C ~C ~C+ ~C ~C ~CB , + + + + + + +rM   