HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //lib/python3/dist-packages/twisted/conch/__pycache__/unix.cpython-38.pyc
U

��W[�?�@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-z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 �4/usr/lib/python3/dist-packages/twisted/conch/unix.py�
requestAvatar+szUnixSSHRealm.requestAvatarN)�__name__�
__module__�__qualname__r"r r r r!r)src@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)rcCs�t�|�||_t�|j�|_|jdg}t��D]\}}}}||kr2|�|�q2||_	i|_
|j�t
jtjd��|j�dtji�dS)N�)ssessionsdirect-tcpipssftp)r�__init__r�pwd�getpwnam�pwdData�grpZgetgrall�append�otherGroups�	listenersZ
channelLookup�updaterZ
SSHSessionrZopenConnectForwardingClientZsubsystemLookupr	ZFileTransferServer)rr�lZ	groupnameZpassword�gidZuserlistr r r!r'3s"
���zUnixConchUser.__init__cCs|jdd�S)N���r*�rr r r!�getUserGroupIdEszUnixConchUser.getUserGroupIdcCs|jS�N)r-r5r r r!�getOtherGroupsIszUnixConchUser.getOtherGroupscCs
|jdS)N�r4r5r r r!�
getHomeDirMszUnixConchUser.getHomeDircCs
|jdS)N�r4r5r r r!�getShellQszUnixConchUser.getShellcCs�t�|�\}}ddlm}z*|j|j|t�|j||ftj�|d�}WnYdSX||j	||f<|dkr�|�
�d}dt�d|�fSdSdS)Nr��reactor)Z	interfacer2�z>L)
r�unpackGlobal_tcpip_forward�twisted.internetr>�
_runAsUserZ	listenTCPZSSHListenForwardingFactory�connZ SSHListenServerForwardingChannelr.�getHost�struct�pack)r�data�
hostToBind�
portToBindr>�listenerr r r!�global_tcpip_forwardUs(��
z"UnixConchUser.global_tcpip_forwardcCsDt�|�\}}|j�||fd�}|s(dS|j||f=|�|j�dS)Nrr?)rr@r.�getrB�
stopListening)rrGrHrIrJr r r!�global_cancel_tcpip_forwardksz)UnixConchUser.global_cancel_tcpip_forwardcCs:|j��D]}|�|j�q
t�d|jt|j�f�dS)Nzavatar %s logging out (%i))r.�valuesrBrMr�msgr�len)rrJr r r!rus��zUnixConchUser.logoutc	Ost��}t��}t��}|��\}}t�d�t�d�t�|���t�|�t�|�zt	|�}Wn t
k
r�|||fg}YnXzP|D]F}	|	d}
t|	�dkr�|	dp�d}t|	�dkr�|	dp�i}|
||�}q�W5t�d�t�d�t�|�t�|�t�|�X|S)Nrr?r r2)�os�geteuid�getegid�	getgroupsr6�setegid�seteuid�	setgroupsr8�iter�	TypeErrorrQ)r�f�args�kw�euid�egid�groups�uidr1�i�func�rr r r!rB~s2







zUnixConchUser._runAsUserN)r#r$r%r'r6r8r:r<rKrNrrBr r r r!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.
        Nrr=�PATHz/bin:/usr/bin:/usr/local/bin)rAr>�_reactor�avatar�environ�pty�ptyTuple)rrhr>r r r!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�Lr2r9g��.A���r)!�utmprhrC�	transport�getPeer�hostrEZunpack�socketZ	inet_atonrk�time�intZ	UtmpEntryZUSER_PROCESSZDEAD_PROCESSZut_typerj�pidZut_pidZut_lineZut_idZut_tvrZut_userZ
gethostbyaddrZut_hostZ
ut_addr_v6Z
UtmpRecordZ	UTMP_FILEZ	pututlineZendutentZ	WTMP_FILE)rZloggedInZ	ipAddressZpackedIpZttyName�t�t1�t2�entry�a�br r r!�addUTMPEntry�s0




z'SSHSessionForUnixConchUser.addUTMPEntrycCsF||jd<||_||_t��\}}t�|�}||jd<|||f|_dS)NZTERMZSSH_TTY)ri�winSize�modesrj�openptyrR�ttynamerk)rZtermZ
windowSizer~ZmasterZslaver�r r r!�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�HOMEZSHELL�%s %s %s�
SSH_CLIENTz-%s�ZusePTY�4Hr?)r�)&rkrrPrrhr6r:r<rrirR�path�basenamerCrorprDrq�port�getPtyOwnershiprg�spawnProcessrjr|�fcntl�ioctl�fileno�tty�
TIOCSWINSZrErFr}r~�setModes�write�oldWrite�
_writeHack�
setTcpNoDelay)	r�protorar1�homeDir�shellZ	shellExec�peerrqr r r!�	openShell�sJ




�
��

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-cr�r�rr�r?)rhr6r:r<rirCrorprDrqr�rkr�rgr�rjr|r~r�r�)
rr��cmdrar1r�r�Zcommandr�rqr r r!�execCommand�s:


��z&SSHSessionForUnixConchUser.execCommandc	Cs|t�|jd�d}|j��\}}t��t��}}t�d�t�d�zt�	|jd||�W5t�|�t�|�XdS)Nr2r9r)
rR�statrkrhr6rSrTrVrW�chown)rZttyGidrar1r^r_r r r!r�s


z*SSHSessionForUnixConchUser.getPtyOwnershipc	Cs|j}t�|���}|jD]�\}}|tjkr.qtj|}t|�dkr�|\}}tt|�sXqt	t|�}|rx|||B||<q�|||@||<q|dkr�t	td|f�|tj
<q|dkr�t	td|f�|tj<qtt|�s�qt	t|�}t|�|tj
|<qt�|��tj|�dS)Nr2�OSPEEDzB%s�ISPEED)rjr��	tcgetattrr�r~rZTTYMODESrQ�hasattr�getattrr�r��chrZCCZ	tcsetattrZTCSANOW)	rrj�attr�modeZ	modeValueZttyMode�flagZttyAttrZttyvalr r r!r�s.





z#SSHSessionForUnixConchUser.setModescCs|jr|j��dSr7)rjZ
closeStdinr5r r r!�eofReceived0sz&SSHSessionForUnixConchUser.eofReceivedc	Cs�|jr@tj�|jd�r@t�|jd�d}t�|jdd|�|jr�z|j�d�Wntt	fk
rnYnX|j�
�|�d�t�
d�dS)Nr2r9rZHUPzshell closed)rkrRr��existsr�r�rjZ
signalProcess�OSErrorrZloseConnectionr|rrP)rZttyGIDr r r!�closed5s

z!SSHSessionForUnixConchUser.closedcCs,||_t�|j��tjtjd|j���dS)Nr�)r�)	r}r�r�rjr�r�r�rErF)rr}r r r!�
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&��)rjr�r�r�ZECHOZICANONrhrCroZ
sendIgnorerQr�)rrGr�r r r!r�Js

z%SSHSessionForUnixConchUser._writeHack)N)r?)r#r$r%r'r|r�r�r�r�r�r�r�r�r�r r r r!re�s



rec@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
||_dSr7)rh)rrhr r r!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()
        rar1�permissions�atime�mtimeN)rRr��chmod�utime�rr��attrsr r r!�	_setAttrs\sz$SFTPServerForUnixConchUser._setAttrscCs&|j|j|j|jt|j�t|j�d�S)N)�sizerar1r�r�r�)�st_size�st_uid�st_gid�st_modert�st_atime�st_mtime�r�sr r r!�	_getAttrsis�z$SFTPServerForUnixConchUser._getAttrscCs"|j��}tj�t|j�t|��Sr7)rhr:rRr��joinr)rr��homer r r!�_absPathts
z#SFTPServerForUnixConchUser._absPathcCsiSr7r )rZotherVersion�extDatar r r!�
gotVersionysz%SFTPServerForUnixConchUser.gotVersioncCst||�|�||�Sr7)�UnixSFTPFiler�)r�filename�flagsr�r r r!�openFile}sz#SFTPServerForUnixConchUser.openFilecCs|�|�}|j�tj|�Sr7)r�rhrBrR�remove)rr�r r r!�
removeFile�s
z%SFTPServerForUnixConchUser.removeFilecCs&|�|�}|�|�}|j�tj||�Sr7)r�rhrBrR�rename)rZoldpath�newpathr r r!�
renameFile�s

z%SFTPServerForUnixConchUser.renameFilecCs,|�|�}|j�tj|ff|j||ffg�Sr7)r�rhrBrR�mkdirr�r�r r r!�
makeDirectory�s
�z(SFTPServerForUnixConchUser.makeDirectorycCs|�|�}|j�tj|�dSr7)r�rhrBrR�rmdir�rr�r r r!�removeDirectory�s
z*SFTPServerForUnixConchUser.removeDirectorycCst||�|��Sr7)�UnixSFTPDirectoryr�r�r r r!�
openDirectory�sz(SFTPServerForUnixConchUser.openDirectorycCs:|�|�}|r |j�tj|�}n|j�tj|�}|�|�Sr7)r�rhrBrRr��lstatr�)rr�ZfollowLinksr�r r r!�getAttrs�s

z#SFTPServerForUnixConchUser.getAttrscCs |�|�}|j�|j||�dSr7)r�rhrBr�r�r r r!�setAttrs�s
z#SFTPServerForUnixConchUser.setAttrscCs|�|�}|j�tj|�Sr7)r�rhrBrR�readlinkr�r r r!�readLink�s
z#SFTPServerForUnixConchUser.readLinkcCs&|�|�}|�|�}|j�tj||�Sr7)r�rhrBrR�symlink)rZlinkPathZ
targetPathr r r!�makeLink�s

z#SFTPServerForUnixConchUser.makeLinkcCstj�|�|��Sr7)rRr��realpathr�r�r r r!�realPath�sz#SFTPServerForUnixConchUser.realPathcCst�dSr7��NotImplementedError)rZextNamer�r r r!�extendedRequest�sz*SFTPServerForUnixConchUser.extendedRequestN)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�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
rrR�O_RDONLY�O_WRONLY�O_RDWRr�O_APPENDr
�O_CREATr�O_TRUNCr�O_EXCLrhrB�openr��fd)rr�r�r�r�Z	openFlagsr�r�r r r!r'�s0



zUnixSFTPFile.__init__cCs|jj�tj|j�Sr7)r�rhrBrR�closer�r5r r r!r��szUnixSFTPFile.closecCs,|jj�tj|j|dfftj|j|ffg�Sr)r�rhrBrR�lseekr��read)r�offsetZlengthr r r!�	readChunk�s
��zUnixSFTPFile.readChunkcCs,|jj�tj|j|dfftj|j|ffg�Sr)r�rhrBrRr�r�r�)rr�rGr r r!�
writeChunk�s
��zUnixSFTPFile.writeChunkcCs |jj�tj|j�}|j�|�Sr7)r�rhrBrR�fstatr�r�r�r r r!r��szUnixSFTPFile.getAttrscCst�dSr7r�)rr�r r r!r��szUnixSFTPFile.setAttrsN)	r#r$r%r'r�r�r�r�r�r r r r!r��sr�c@s0eZdZdd�Zdd�Zdd�ZeZdd�Zd	S)
r�cCs"||_|j�tj|�|_||_dSr7)r�rhrBrR�listdir�files�dir)rr�Z	directoryr r r!r'�szUnixSFTPDirectory.__init__cCs|Sr7r r5r r r!�__iter__�szUnixSFTPDirectory.__iter__cCslz|j�d�}Wntk
r(t�Yn@X|jj�tjtj	�
|j|��}t||�}|j�
|�}|||fSdSr)r��pop�
IndexError�
StopIterationr�rhrBrRr�r�r�r�rr�)rr[r�Zlongnamer�r r r!�__next__s
�
zUnixSFTPDirectory.__next__cCs
g|_dSr7)r�r5r r r!r�szUnixSFTPDirectory.closeN)r#r$r%r'r�r��nextr�r r r r!r��s
r�)8�__doc__r�r+rRrjr(rrrErsr�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�rrn�ImportErrorZIRealmrrrer�r�r�ZregisterAdapterr r r r!�<module>s\ 
k:f7��