Your IP : 216.73.216.213


Current Path : /opt/alt/python37/lib64/python3.7/site-packages/twisted/conch/__pycache__/
Upload File :
Current File : //opt/alt/python37/lib64/python3.7/site-packages/twisted/conch/__pycache__/unix.cpython-37.pyc

B

:��]�?�@s�dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZddlm
Z
ddlmZddlmZddlmZddlmZmZmZdd	lmZmZmZmZmZmZdd
lm Z m!Z!m"Z"ddl#m$Z$ddl%m&Z&dd
l'm(Z(m)Z)ddl*m+Z,m-Z-yddl.Z.Wne/k
�r.dZ.YnXee$j0�Gdd�d��Z1Gdd�de�Z2ee �Gdd�d��Z3ee!�Gdd�d��Z4ee"�Gdd�d��Z5Gdd�d�Z6e(�7e4e2ej!�e(�7e3e2ej �dS)z
A UNIX SSH server.
�N)�implementer)�ttymodes)�	ConchUser)�
ConchError)�lsLine)�session�
forwarding�filetransfer)�FXF_READ�	FXF_WRITE�
FXF_APPEND�	FXF_CREAT�	FXF_TRUNC�FXF_EXCL)�ISession�ISFTPServer�	ISFTPFile)�portal)�ProcessExitedAlready)�
components�log)�	_bytesChr�nativeStringc@seZdZdd�ZdS)�UnixSSHRealmcGst|�}|d||jfS)Nr)�
UnixConchUser�logout)�self�usernameZmindZ
interfaces�user�r�E/opt/alt/python37/lib64/python3.7/site-packages/twisted/conch/unix.py�
requestAvatar+szUnixSSHRealm.requestAvatarN)�__name__�
__module__�__qualname__r!rrrr r)src@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)rcCs�t�|�||_t�|j�|_|jdg}x*t��D]\}}}}||kr4|�|�q4W||_	i|_
|j�t
jtjd��|j�dtji�dS)N�)ssessionsdirect-tcpipssftp)r�__init__r�pwd�getpwnam�pwdData�grp�getgrall�append�otherGroups�	listenersZ
channelLookup�updaterZ
SSHSessionrZopenConnectForwardingClientZsubsystemLookupr	ZFileTransferServer)rr�lZ	groupname�password�gidZuserlistrrr r&3s
zUnixConchUser.__init__cCs|jdd�S)N��)r))rrrr �getUserGroupIdEszUnixConchUser.getUserGroupIdcCs|jS)N)r-)rrrr �getOtherGroupsIszUnixConchUser.getOtherGroupscCs
|jdS)N�)r))rrrr �
getHomeDirMszUnixConchUser.getHomeDircCs
|jdS)N�)r))rrrr �getShellQszUnixConchUser.getShellcCs�t�|�\}}ddlm}y*|j|j|t�|j||ftj�|d�}Wn
dS||j	||f<|dkr�|�
�d}dt�d|�fSdSdS)Nr)�reactor)Z	interfacer3�z>L)
r�unpackGlobal_tcpip_forward�twisted.internetr;�
_runAsUserZ	listenTCPZSSHListenForwardingFactory�connZ SSHListenServerForwardingChannelr.�getHost�struct�pack)r�data�
hostToBind�
portToBindr;�listenerrrr �global_tcpip_forwardUs"z"UnixConchUser.global_tcpip_forwardcCsDt�|�\}}|j�||fd�}|s(dS|j||f=|�|j�dS)Nrr<)rr=r.�getr?�
stopListening)rrDrErFrGrrr �global_cancel_tcpip_forwardksz)UnixConchUser.global_cancel_tcpip_forwardcCs>x|j��D]}|�|j�qWt�d|jt|j�f�dS)Nzavatar %s logging out (%i))r.�valuesr?rJr�msgr�len)rrGrrr rus
zUnixConchUser.logoutc	Ost��}t��}t��}|��\}}t�d�t�d�t�|���t�|�t�|�yt	|�}Wn t
k
r�|||fg}YnXzTxN|D]F}	|	d}
t|	�dkr�|	dp�d}t|	�dkr�|	dp�i}|
||�}q�WWdt�d�t�d�t�|�t�|�t�|�X|S)Nrr<rr3)�os�geteuid�getegid�	getgroupsr5�setegid�seteuid�	setgroupsr6�iter�	TypeErrorrN)r�f�args�kw�euid�egid�groups�uidr2�i�func�rrrr r?~s2








zUnixConchUser._runAsUserN)r"r#r$r&r5r6r8r:rHrKrr?rrrr r1s
	rc@sheZdZddd�Zddd�Zdd�Zd	d
�Zdd�Zd
d�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dS)�SSHSessionForUnixConchUserNcCs:|dkrddlm}||_||_ddi|_d|_d|_dS)a
        Construct an C{SSHSessionForUnixConchUser}.

        @param avatar: The L{UnixConchUser} for whom this is an SSH session.
        @param reactor: An L{IReactorProcess} used to handle shell and exec
            requests. Uses the default reactor if None.
        Nr)r;�PATHz/bin:/usr/bin:/usr/local/bin)r>r;�_reactor�avatar�environ�pty�ptyTuple)rrer;rrr r&�s
z#SSHSessionForUnixConchUser.__init__r<cCstsdS|jjjj��j}t�dt�	|��\}|j
ddd�}t��}t|�}t||d�}t�
�}|rrtjpvtj|_|jj|_||_|dd�|_||f|_|r�|jj|_t�|�d|_|dddf|_t�tj�}	|	�|�|	��t�tj �}
|
�|�|
��dS)N�Lr3r7g��.A���r)!�utmprer@�	transport�getPeer�hostrB�unpack�socket�	inet_atonrh�time�intZ	UtmpEntryZUSER_PROCESSZDEAD_PROCESSZut_typerg�pidZut_pidZut_lineZut_idZut_tvrZut_user�
gethostbyaddrZut_hostZ
ut_addr_v6Z
UtmpRecordZ	UTMP_FILEZ	pututlineZendutentZ	WTMP_FILE)rZloggedInZ	ipAddressZpackedIpZttyName�t�t1�t2�entry�a�brrr �addUTMPEntry�s0




z'SSHSessionForUnixConchUser.addUTMPEntrycCsF||jd<||_||_t��\}}t�|�}||jd<|||f|_dS)NZTERMZSSH_TTY)rf�winSize�modesrg�openptyrO�ttynamerh)rZtermZ
windowSizer~ZmasterZslaver�rrr �getPty�s


z!SSHSessionForUnixConchUser.getPtyc	
Cs8|jst�d�td��|j��\}}|j��}|j��}|jj|j	d<||j	d<||j	d<t
j�|�}|jj
jj��}|jj
jj��}d|j|j|jf|j	d<|��|jj||d|fg|j	||||jd	�|_|��t�|j��tjtjd|j���|j �r|�!�|jj"|_#|j$|j_"|jj
jj�%d�dS)
Nz'tried to get shell without pty, failingzno ptyZUSER�HOME�SHELLz%s %s %s�
SSH_CLIENTz-%s)�usePTY�4Hr<)r�)&rhrrMrrer5r8r:rrfrO�path�basenamer@rlrmrArn�port�getPtyOwnershiprd�spawnProcessrgr|�fcntl�ioctl�fileno�tty�
TIOCSWINSZrBrCr}r~�setModes�write�oldWrite�
_writeHack�
setTcpNoDelay)	r�protor^r2�homeDir�shellZ	shellExec�peerrnrrr �	openShell�s4






z$SSHSessionForUnixConchUser.openShellc

Cs�|j��\}}|j��}|j��p$d}||jd<|d|f}|jjjj��}|jjjj��}	d|j	|j
|	j
f|jd<|jr�|��|j
j||||j||||jp�dd�|_|jr�|��|jr�|��|jjjj�d�dS)	Nz/bin/shr�z-cz%s %s %sr�r)r�r<)rer5r8r:rfr@rlrmrArnr�rhr�rdr�rgr|r~r�r�)
rr��cmdr^r2r�r��commandr�rnrrr �execCommand�s&


z&SSHSessionForUnixConchUser.execCommandc	Cs|t�|jd�d}|j��\}}t��t��}}t�d�t�d�zt�	|jd||�Wdt�|�t�|�XdS)Nr3r7r)
rO�statrhrer5rPrQrSrT�chown)rZttyGidr^r2r[r\rrr r�s


z*SSHSessionForUnixConchUser.getPtyOwnershipc	Cs|j}t�|���}x�|jD]�\}}|tjkr0qtj|}t|�dkr�|\}}tt|�sZqt	t|�}|rz|||B||<q�|||@||<q|dkr�t	td|f�|tj
<q|dkr�t	td|f�|tj<qtt|�s�qt	t|�}t|�|tj
|<qWt�|��tj|�dS)Nr3�OSPEEDzB%s�ISPEED)rgr��	tcgetattrr�r~rZTTYMODESrN�hasattr�getattrr�r��chr�CCZ	tcsetattrZTCSANOW)	rrg�attr�modeZ	modeValueZttyMode�flagZttyAttrZttyvalrrr r�s.





z#SSHSessionForUnixConchUser.setModescCs|jr|j��dS)N)rgZ
closeStdin)rrrr �eofReceived0sz&SSHSessionForUnixConchUser.eofReceivedc	Cs�|jr@tj�|jd�r@t�|jd�d}t�|jdd|�|jr�y|j�d�Wntt	fk
rnYnX|j�
�|�d�t�
d�dS)Nr3r7rZHUPzshell closed)rhrOr��existsr�r�rgZ
signalProcess�OSErrorrZloseConnectionr|rrM)rZttyGIDrrr �closed5s

z!SSHSessionForUnixConchUser.closedcCs,||_t�|j��tjtjd|j���dS)Nr�)r�)	r}r�r�rgr�r�r�rBrC)rr}rrr �
windowChangedCsz(SSHSessionForUnixConchUser.windowChangedcCs\|jdk	rNt�|j���d}|tj@sN|tj@rN|jjj�	ddt
|��|�|�dS)zF
        Hack to send ignore messages when we aren't echoing.
        Nr%��)rgr�r�r�ZECHOZICANONrer@rlZ
sendIgnorerNr�)rrDr�rrr r�Js

z%SSHSessionForUnixConchUser._writeHack)N)r<)r"r#r$r&r|r�r�r�r�r�r�r�r�r�rrrr rb�s



rbc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#S)$�SFTPServerForUnixConchUsercCs
||_dS)N)re)rrerrr r&Xsz#SFTPServerForUnixConchUser.__init__cCsjd|kr&d|kr&t�||d|d�d|kr>t�||d�d|krfd|krft�||d|df�dS)zl
        NOTE: this function assumes it runs as the logged-in user:
        i.e. under _runAsUser()
        r^r2�permissions�atime�mtimeN)rOr��chmod�utime)rr��attrsrrr �	_setAttrs\sz$SFTPServerForUnixConchUser._setAttrscCs&|j|j|j|jt|j�t|j�d�S)N)�sizer^r2r�r�r�)�st_size�st_uid�st_gid�st_moders�st_atime�st_mtime)r�srrr �	_getAttrsisz$SFTPServerForUnixConchUser._getAttrscCs"|j��}tj�t|j�t|��S)N)rer8rOr��joinr)rr��homerrr �_absPathts
z#SFTPServerForUnixConchUser._absPathcCsiS)Nr)rZotherVersion�extDatarrr �
gotVersionysz%SFTPServerForUnixConchUser.gotVersioncCst||�|�||�S)N)�UnixSFTPFiler�)r�filename�flagsr�rrr �openFile}sz#SFTPServerForUnixConchUser.openFilecCs|�|�}|j�tj|�S)N)r�rer?rO�remove)rr�rrr �
removeFile�s
z%SFTPServerForUnixConchUser.removeFilecCs&|�|�}|�|�}|j�tj||�S)N)r�rer?rO�rename)rZoldpath�newpathrrr �
renameFile�s

z%SFTPServerForUnixConchUser.renameFilecCs,|�|�}|j�tj|ff|j||ffg�S)N)r�rer?rO�mkdirr�)rr�r�rrr �
makeDirectory�s
z(SFTPServerForUnixConchUser.makeDirectorycCs|�|�}|j�tj|�dS)N)r�rer?rO�rmdir)rr�rrr �removeDirectory�s
z*SFTPServerForUnixConchUser.removeDirectorycCst||�|��S)N)�UnixSFTPDirectoryr�)rr�rrr �
openDirectory�sz(SFTPServerForUnixConchUser.openDirectorycCs:|�|�}|r |j�tj|�}n|j�tj|�}|�|�S)N)r�rer?rOr��lstatr�)rr�ZfollowLinksr�rrr �getAttrs�s

z#SFTPServerForUnixConchUser.getAttrscCs |�|�}|j�|j||�dS)N)r�rer?r�)rr�r�rrr �setAttrs�s
z#SFTPServerForUnixConchUser.setAttrscCs|�|�}|j�tj|�S)N)r�rer?rO�readlink)rr�rrr �readLink�s
z#SFTPServerForUnixConchUser.readLinkcCs&|�|�}|�|�}|j�tj||�S)N)r�rer?rO�symlink)rZlinkPathZ
targetPathrrr �makeLink�s

z#SFTPServerForUnixConchUser.makeLinkcCstj�|�|��S)N)rOr��realpathr�)rr�rrr �realPath�sz#SFTPServerForUnixConchUser.realPathcCst�dS)N)�NotImplementedError)rZextNamer�rrr �extendedRequest�sz*SFTPServerForUnixConchUser.extendedRequestN)r"r#r$r&r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr r�Vs"
	r�c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)r�cCs||_d}|t@tkr(|t@dkr(tj}|t@tkrF|t@dkrFtj}|t@tkrd|t@tkrdtj}|t@tkrz|tjO}|t	@t	kr�|tj
O}|t@tkr�|tjO}|t
@t
kr�|tjO}d|kr�|d}|d=nd}|j�tj|||�}|�r|j�|j||�||_dS)Nrr�i�)�serverr
rrO�O_RDONLY�O_WRONLY�O_RDWRr�O_APPENDr
�O_CREATr�O_TRUNCr�O_EXCLrer?�openr��fd)rr�r�r�r�Z	openFlagsr�r�rrr r&�s0



zUnixSFTPFile.__init__cCs|jj�tj|j�S)N)r�rer?rO�closer�)rrrr r��szUnixSFTPFile.closecCs,|jj�tj|j|dfftj|j|ffg�S)Nr)r�rer?rO�lseekr��read)r�offset�lengthrrr �	readChunk�szUnixSFTPFile.readChunkcCs,|jj�tj|j|dfftj|j|ffg�S)Nr)r�rer?rOr�r�r�)rr�rDrrr �
writeChunk�szUnixSFTPFile.writeChunkcCs |jj�tj|j�}|j�|�S)N)r�rer?rO�fstatr�r�)rr�rrr r��szUnixSFTPFile.getAttrscCst�dS)N)r�)rr�rrr r��szUnixSFTPFile.setAttrsN)	r"r#r$r&r�r�r�r�r�rrrr r��sr�c@s0eZdZdd�Zdd�Zdd�ZeZdd�Zd	S)
r�cCs"||_|j�tj|�|_||_dS)N)r�rer?rO�listdir�files�dir)rr��	directoryrrr r&�szUnixSFTPDirectory.__init__cCs|S)Nr)rrrr �__iter__�szUnixSFTPDirectory.__iter__cCsly|j�d�}Wntk
r(t�Yn@X|jj�tjtj	�
|j|��}t||�}|j�
|�}|||fSdS)Nr)r��pop�
IndexError�
StopIterationr�rer?rOr�r�r�r�rr�)rrXr�Zlongnamer�rrr �__next__s

zUnixSFTPDirectory.__next__cCs
g|_dS)N)r�)rrrr r�szUnixSFTPDirectory.closeN)r"r#r$r&r�r��nextr�rrrr r��s
r�)8�__doc__r�r*rOrgr'rprBrrr�Zzope.interfacerZ
twisted.conchrZtwisted.conch.avatarrZtwisted.conch.errorrZtwisted.conch.lsrZtwisted.conch.sshrrr	Ztwisted.conch.ssh.filetransferr
rrr
rrZtwisted.conch.interfacesrrrZtwisted.credrZtwisted.internet.errorrZtwisted.pythonrrZtwisted.python.compatrr�rrk�ImportErrorZIRealmrrrbr�r�r�ZregisterAdapterrrrr �<module>sH 
k;g8