Spamworldpro Mini Shell
Spamworldpro


Server : Apache/2.4.62 (Unix) OpenSSL/1.0.2k-fips
System : Linux server1.richineiserver.com 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User : fdshops ( 1003)
PHP Version : 8.2.21
Disable Function : NONE
Directory :  /usr/share/jailkit/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //usr/share/jailkit/jk_lib.pyc
�
�gfac	@sddlmZddlZddlZddlZddlZddlZddlZddl	Z	dZ
iZd�Zdd�Z
dd�Zd�Zd	�Zd
�Zd�Zd�Zd
�Zddd�Zddd�Zdddd�Zd�Zddddd�Zd�Zd�Zd�Zddddd�Zdd�Zdd�Zddddd�Z ddd�Z!ddddddgd�Z"dddddddgd�Z#d�Z$d d!�Z%d"�Z&d#�Z'd$�Z(dd%�Z)d&�Z*d'�Z+dS((i����(tprint_functionNi�cCs<tj|d�}|dkr8tj|�t|<}n|S(N(t	statcachetgettNonetostlstat(tpathtret((s/usr/share/jailkit/jk_lib.pytcachedlstat0sicCs�yt|�}Wn9tk
rK|dkrGtjjd|d�ndSXtjddkr�|tjdks�|tjt	j
d�jkr�tjjd|d	�dSnB|tjdks�|tjdkr�tjjd|d
�dS|tjtj
@s|tjtj@rMtj|tj�rMtjjd|d�dStj|tj�s�tj|tj�r�tj|�}tt|�t|��|d
 dkr�tjjd|d�dSq�tjjd|d�dSndS(NisERROR: cannot lstat() s
i����i����tbsdtwheelsERROR: s is not owned by root:wheel!
s is not owned by root:root!
s  is writable by group or others!i����isusr/s2 is a symlink, please point to the real directory
i����s is not a directory!
i(RtOSErrortsyststderrtwritetplatformtstattST_UIDtST_GIDtgrptgetgrnamtgr_gidtST_MODEtS_IWOTHtS_IWGRPtS_ISLNKtS_ISDIRRtreadlinktprinttstr(Rt	failquiettstatbufttarget((s/usr/share/jailkit/jk_lib.pytpath_is_safeBs4
2&?cCs�tjj|�}t||�}|dkr1|Sx5d
D]-}t|d
|d�}|dkr8|Sq8Wtjj|�}xA|d
kr�t|d�}|dkr�|Stjj|�}q~WdS(s]tests if path is a safe jail, not writable, no writable /etc/ and /lib, return 1 if all is OKi����tetctusrtvartbintdevtproctsbinRt/ii(R"R#svarsbinR&R'R(ssys(RRtabspathR!tdirname(RRtretvaltsubdtnpath((s/usr/share/jailkit/jk_lib.pytchroot_is_safebs
cCs/t|�}|tjtjtjB@r+dSdS(sAreturns 1 if the file is setuid or setgid, returns 0 if it is notii(RRRtS_ISUIDtS_ISGID(RR((s/usr/share/jailkit/jk_lib.pyttest_suid_sgidvsc
CsMtjd dkrIt|dddddddd�tjd|�ndS(	Nitlinuxs/etcitcopy_permissionst
allow_suidtcopy_ownershipsldconfig -r (RRtcreate_parent_pathRtsystem(tjail((s/usr/share/jailkit/jk_lib.pytgen_library_cache}s"cCs�g}tjd|dtdtjdtjdtjdt�}|jj�}tjdkr�t|t	�r�|j
d	d
�}nxt|�dkr�|j�}t|�dkr8|ddkr�|dd
kr�|S|ddkr
|ddkr
|ddkr
|S|ddks5|ddkr0qJt|�dkre|ddkre|ddkreqJt|�dkr�t
jj|d�r�||dg7}q5td|dd|�qJt|�dkr#|dddkr#t
jj|d�r||dg7}q5td|d�qJtd|d �ntd|d �|jj�}tjdkr�t|t	�r�|j
d	d
�}q�q�W|S(s;returns a list of libraries that the executable depends on sldd tshelltstdintstdoutR
t	close_fdsiisutf-8treplacet
staticallyitlinkedtnotitdynamict
executableslinux-gate.so.1slinux-vdso.so.1itfounds!ldd returns non existing library s for R)s$WARNING: failed to parse ldd output i����(ii(ii(t
subprocesstPopentTruetPIPER=treadlineRtversion_infot
isinstancetbytestdecodetlentsplitRRtexistsR(RDR,tptlinetsubl((s/usr/share/jailkit/jk_lib.pytlddlist_libraries_linux�s<: 0 2&cCs6g}d}tjd|dtdtjdtjdtjdt�}|jj�}tjdkr�t|t	�r�|j
d	d
�}nx�t|�dkr1|j�}t|�dkr�|d|dkr�q�|ddkrt|�d
kr�|ddkr�d}q�q�t|�dkr�|dkrmt
jj|d�rX||dg7}q�td|d�q�|dkr�t
jj|d�r�||dg7}q�td|d�q�td�q�td|d �ntd|d �|jj�}tjdkr�t|t	�r�|j
d	d
�}q�q�W|S(s;returns a list of libraries that the executable depends on isldd R;R<R=R
R>isutf-8R?t:tStartiitNameiis!ldd returns non existing library s1unknown mode, please report this bug in jk_lib.pys$WARNING: failed to parse ldd output i����(ii(ii(RFRGRHRIR=RJRRKRLRMRNRORPRRRQR(RDR,tmodeRRRSRT((s/usr/share/jailkit/jk_lib.pytlddlist_libraries_openbsd�s>:"	
cCs
g}tjd|dtdtjdtjdtjdt�}|jj�}tjdkr�t|t	�r�|j
d	d
�}nx�t|�dkr|j�}t|�dkr�t|�dkr�|dt|�d |dkr�q�t|�d
kr"|ddkr"|ddkr"|St|�dkrst
jj|d�r^||dg7}q�td|d�q�td|d d�n7|t|�d |dkr�ntd|d d�|jj�}tjdkr�t|t	�r�|j
d	d
�}q�q�W|S(s;returns a list of libraries that the executable depends on sldd R;R<R=R
R>iisutf-8R?iRViiRBiRCs!ldd returns non existing library s%WARNING: failed to parse ldd output "i����t"(ii(ii(RFRGRHRIR=RJRRKRLRMRNRORPRRRQR(RDR,RRRSRT((s/usr/share/jailkit/jk_lib.pytlddlist_libraries_freebsd�s0:42cCs�tjd dkrt|�Stjd dkr:t|�Stjd dkrWt|�Stjd dkr�t|�}|dg7}|St|�}|dd	d
g7}|SdS(NiR3itopenbsdtfreebsdtsunoss/lib/ld.so.1s/usr/libexec/ld.sos/usr/libexec/ld-elf.so.1s/libexec/ld-elf.so.1(RRRURZR\(RDR,((s/usr/share/jailkit/jk_lib.pytlddlist_libraries�s



tcCsi|dkrdSt|�}d}|s?|d}|d }nd}d}x|D]}tjj||�}t|�}tj|j�rR|d7}tj|�}	|	ddkr�tjj	||	�}qRtjj	tjjtjj
|�|	��}
t|�dkrI|
t|� |krItj
jd|
d�td��n|
}qRqRWtjj||�S(	NR)Rai����iisERROR: symlink s points outside jail, ABORT
sSymlink points outside jail(t
split_pathRRtjoinRRRtst_modeRtnormpathR+RORR
Rt	Exception(Rtchroottinclude_filetspathtbasenameRt
doscountertentrytsbtrealpathttmp((s/usr/share/jailkit/jk_lib.pytresolve_realpaths.



-(
c
Cs�t|�}|r!d}|}n$tjj|�}tjj|�}d}x8|dkr�|dkr�t|�}tj|j�rP|d7}tj	|�}|ddkr�||}|ddkrM|d }qMq|tjj
tjjtjj|�|��}	|dkrG|	| |krGtj
jd|	d�td	��n|	}n,tjj|�d|}tjj|�}d
}qNWd|S(sNwill return the same path that contains not a single symlink directory elementRaiR)idii����sERROR: symlink s points outside jail, ABORT
sSymlink points outside jailN(RORRRjR+RRRRdRReRcRR
RRfR(
RRgRht	chrootlentdonepathttodopathRkRmRnRo((s/usr/share/jailkit/jk_lib.pytOLDresolve_realpath&s2	

-	
cCs�tj|�}tj|tj�}|si|tjtjB@ritd|�|tj@tj@}qintj||tj|tj	f�|r�tj
||tj|tj�ntj
||�dS(Ns,removing setuid and setgid permissions from (RRtS_IMODERR0R1RtutimetST_ATIMEtST_MTIMEtchownRRtchmod(tsrctdstt
be_verboseR5R6tsbufRY((s/usr/share/jailkit/jk_lib.pytcopy_time_and_permissionsFs$$cCsO|}xBtjj|�rJ|dkp1|dkrJtjj|�}q	W|S(ssThis function tests if a directory exists, if not tries the parent etc. etc. until it finds a directory that existsR)Ra(RRRQR+(RRo((s/usr/share/jailkit/jk_lib.pyt!OLDreturn_existing_base_directory[s/icCs�|}|ddkr#|d }ny-t|||�}tjj|�rOdSWntk
rcnXt||�}t|�t|�}	|jd|	d�}
|
dkr�t|�}
nx�|
dkr�|	d|
kr�|
}	n\yt||
 �}WnGtk
r@}|j	\}
}t
jjd||
 d|d�PnXt
j|j�rntj||
 �}t|||
 |�}|r�td|d	|�nytj||�WnQtk
r}|j	\}}
|d
kr�qt
jjd|||
 d�nX|ddkr0t||||||�q9tj||
 d�}t|||d |||||�n�t
j|j�r9t|||
 |�}|r�td
|�ntj|t�|r9yt||
 ||||�Wq6tk
r2}|j	\}
}t
jjd||
 d	|d|d�q6Xq9n|
}	|
t|�krZd}
q�|jd|	d�}
|
dkr�t|�}
q�q�WdS(sucreates the directory and all its parents id needed. copy_ownership can only be used if copy permissions is also usedi����R)NisERROR: failed to lstat(s):s
sCreating symlink s to is ERROR: failed to create symlink isCreating directory s2ERROR: failed to copy time/permissions/owner from s: (RpRRRQRtreturn_existing_base_directoryROtfindRtargsRR
RRRRdRRtsymlinkR7tstringtrfindRtmkdirtdir_modeR(RgRR}R4R5R6t	directorytchrootdirectoryRotoldindxtindxRmtet_tstrerrortrealfilet
chrootnameterrnotindx2((s/usr/share/jailkit/jk_lib.pytOLD_create_parent_pathbsp

	$$(6	cCsad}d}xN|D]F}|dks1|dkr>||7}n|dkrSd}qd}qW|S(NRaiR)i((tinstringt	outstringtslashti((s/usr/share/jailkit/jk_lib.pytfix_double_slashes�s

	
cCscg}ttjj|��}x>|dkr^|jdtjj|��tjj|�}q!W|S(NR)i(R�RRRetinsertRjR+(RRtnext((s/usr/share/jailkit/jk_lib.pyRb�scCs?t|�dkrdSd}x|D]}|d|7}q#W|S(NiR)Ra(RO(RiRRl((s/usr/share/jailkit/jk_lib.pyt	join_path�s
cCs#t|�}|}d}x}|t|�kr�tjj|||�}	tjj|	�s\Pnt|	|d�}
tjj|
�s�Pn|
}|d7}qWx�|t|�krt|d|d!�}tjj|||�}yt|�}
WnCt	k
r2}|j
\}}tjj
d|d|d�dSXtj|
j�r�|r\td|�ntj|t�|ryt|||||�Wq�t	k
r�}|j
\}}tjj
dtt dtd	|d�q�Xqn(tj|
j�rtj|�}|r#td
|d|�ntj||�|ddkrat||||||�}qtjjtjjtjj|�|��}
t|�dkr�|
t|� |kr�tjj
d|
d
�td��n|
t|�}t||||||�}n|}|d7}q�W|S(NiisERROR: failed to lstat(s):s
sCreate directory s2ERROR: failed to copy time/permissions/owner from s to s: sCreating symlink R)sERROR: symlink s points outside jail, ABORT
sSymlink points outside jail( RbRORRRcRQRpR�RRR�RR
RRRRRdRR�R�RR�R�R�RRR�R7ReR+Rf(RgRR}R4R5R6Rit	existpathR�ttmp1RotorigpathtjailpathRmR�R�R�R�((s/usr/share/jailkit/jk_lib.pyR7�s^ 6-(c

Cs�yD|rtd|�ntj|�t|||dddd�WnQttfk
r�}|j\}}tjj	d|d|d|d	�dSXxEtj
|�D]4\}}}x�|D]�}	|r�td
|d|	d|d|	�nyPtj|d|	|d|	�t|d|	|d|	|dddd�Wq�ttfk
r�}|j\}}tjj	d|d|	d|d|	d|d	�dSXq�Wx.|D]&}	t
|d|	|d|	|�q�Wq�WdS(
NsCreating directoryR5iR6is)ERROR: copying directory and permissions s to s: s
sCopying R)s$ERROR: copying file and permissions (RRR�RtIOErrorRR�RR
Rtwalktshutiltcopyfilet#move_dir_with_permissions_and_owner(
tsrcdirtdstdirR}R�R�R�troottdirstfilestname((s/usr/share/jailkit/jk_lib.pyt#copy_dir_with_permissions_and_owners.
 (
) 08	
(cCs�t|||�}|dkr�|dkr;td|�nytj|�Wq�ttfk
r�}|j\}}tjj	d|d|d�q�Xntd|d|�dS(Nis!Removing original home directory sERROR: failed to remove s: s
sNot everything was copied to s, keeping the old directory (
R�RR�trmtreeRR�R�RR
R(R�R�R}R,R�R�R�((s/usr/share/jailkit/jk_lib.pyR�s'c
Cs�d}|dkrSytj||�d}WqStd|d|d�qSXn|dkr�y0tj||�t|||d|d|�Wq�ttfk
r�}|j\}}	t	j
jd|d|d	|	d
�q�XndS(sXcopies/links the file and the permissions (and possibly ownership and setuid/setgid bitsiisLinking s to s failed, will revert to copyingR5R6s$ERROR: copying file and permissions s: s
N(RtlinkRR�R�RR�RR�RR
R(
R{R|R}ttry_hardlinkR5tretain_ownertdo_normal_copyR�R�R�((s/usr/share/jailkit/jk_lib.pytcopy_with_permissions)s
 c

Cs(t|tjj|�|dddddd�t|||�}tjj|�ritd|d�dStj|�}ybtj	d d	kr�|j
d
}|j
d
}nrtj	dkrtjdkr�|j
d
}|j
d
}q|j
d}|j
d}n|j
d
}|j
d
}tj|j
�r8d}n1tj|j
�rSd}ntd|d�dS|dkr�td||�ntjtjdd|t|�t|�t|��}	t||ddd|�WnGtd|d�td|d�td|d�td�nXdS(NR4iR5iR6sDevice s does exist alreadyiR3itsunos5i���itctbs	WARNING, s# is not a character or block devicesCreating device tmknodsFailed to create device s(, this is a know problem with python 2.1suse "ls -l s6" to find out the mode, major and minor for the devicesuse "mknod s' mode major minor" to create the devices<use chmod and chown to set the permissions as found by ls -l(R7RRR+RpRQRRRRtst_rdevtmaxinttS_ISCHRRdtS_ISBLKtspawnlptP_WAITRR(
RgRR}R�t
chrootpathRmtmajortminorRYR((s/usr/share/jailkit/jk_lib.pytcopy_device;sB.




		6c	Cs d	}	x�tj|�D]�}
tjj||
�}y�t|�}tj|j�r�t||d|ddd|d|�t	|||||||||�	}n|	tjj||
�f7}	Wqt
k
r�}
tjj
d|d|
jd�qXqWt||	|||||||�	}|S(
sbcopies a directory and the permissions recursively, possibly with ownership and setuid/setgid bitsR}R4iR5R6s)ERROR: failed to investigate source file s: s
((RtlistdirRRcRRRRdR7tcopy_dir_recursiveRRR
RR�tcopy_binaries_and_libs(Rgtdirtforce_overwriteR}t
check_libsR�R5R�thandledfilestfiles2RlRoR~R�((s/usr/share/jailkit/jk_lib.pyR�cs%' +$c
Cs.|ddkr|d }nx
|D]}
|
|	kr<q$nyt|
�}Wn�tk
r2}|jdkr	|dkr�tj|
�}
t|
�dkr�t||
|||d|d|ddd	|	�}	q|rtd
|
d�qq,|r,td|
d
�q,q$tjj	d|
d|j
d�q$nXt|tj
j|
�|ddd|d|�ttj
j|d|
�|�}yt|�}d}WnRtk
r�}|jdkr�d}q�tjj	d||
d|j
d�nX|dkr2|r2tj|j�r2|r&td|d�q&q$|r |r�tj|j�r�|rktd|d�nytj|�Wq�tk
r�}tjj	d|d|j
d|d�q�Xqtj|j�rtd|d�qq tj|j�r�q |r$td|d�q$q$nt|tj
j|
�|ddd|d|�tj|j�r�tj|
�}|r�|r�td|d�nytj|�Wq�tk
r�}tjj	d|d|j
d|d�q�Xny*td|d|�tj||�Wntk
r"nX|	j|
�|ddkrptj
jtj
jtj
j|
�|��}nt||g|||||||	�	}	n�tj|j�r�t||
|||||||	�	}	n�tj|j�rC|rtd |
d|�ntd!|
d|�t|
|||||�|	j|
�nRtj|j�sgtj|j�r}t||
||�ntjj	d"|
d#�tj |tj!�}|r$|
j"d$�dks�|
j"d%�dks�|tj#tj$Btj%B@r$t&|
�}t||||d|d	|	�}	q$q$W|	S(&s>copies a list of executables and their libraries to the chrooti����R)iiiR�R�ttry_glob_matchingR�sSource file(s) s
 do not existsSource file s does not exists)ERROR: failed to investigate source file s: s
R4R5R6s.ERROR: failed to investigate destination file Ras" already exists, will not touch itsDestination file s$ exists, will delete to force updatesERROR: failed to delete s
cannot force update sDestination dir s existssDestination symlink sCreating symlink s to sTrying to link sCopying sFailed to find how to copy s= into a chroot jail, please report to the Jailkit developers
tlibs.so('RRR�tglobROR�RRR
RR�R7RRR+RpReRRRdtS_ISREGtunlinkRRR�tappendRcR�R�R�R�R�RuRR�tS_IXUSRtS_IXGRPtS_IXOTHR`(RgtbinarieslistR�R}R�R�R5R�R�R�tfileRmR�Rtchrootrfiletchrootsbtchrootfile_existsR�RYtlibs((s/usr/share/jailkit/jk_lib.pyR��s�

3#.#
	+%2.2

0*'$K(cCs^g}|j||�rZ|j||�}x-|jd�D]}||j�g7}q:Wn|S(s�retrieves a comma separated option from the configparser and splits it into a list, returning an empty list if it does not existt,(t
has_optionRRPtstrip(t	cfgparsertsectionnamet
optionnameR,tinputstrRo((s/usr/share/jailkit/jk_lib.pytconfig_get_option_as_list�stERRORcCs4td�t|d|�|�tj|�dS(NRas: (RRtexit(texitnotmessaget	usagefuncttype((s/usr/share/jailkit/jk_lib.pyt
clean_exit�s
cCs�yt|d�}WndSX|j�}tjdkr]t|t�r]|jdd�}nx�t|�dkr�|jd�}t|�|kr�|||kr�|j	�dS|j�}tjd	kr`t|t�r`|jdd�}q`q`WdS(
Ntriisutf-8R?RVi(ii(ii(
topenRJRRKRLRMRNRORPtclose(titemtnumtfilenametfdRStpwstruct((s/usr/share/jailkit/jk_lib.pyttest_numitem_exist�s "
cCst|d|�S(Ni(R�(tusert
passwdfile((s/usr/share/jailkit/jk_lib.pyttest_user_existscCst|d|�S(Ni(R�(tgroupt	groupfile((s/usr/share/jailkit/jk_lib.pyttest_group_existsc	
Cs�|ddkr|d }nt|d|dddddd�tjdd	!d
kr�t|dd�j�t|d
d�j�t|dd�j�t|dd�j�ntjj|d�s�t|dd�}nzt|dd�}|j�}tj	dkr2t
|t�r2|jdd�}nxt
|�dkrI|jd�}t
|�dkr|d|ks�|d|kr|r�td|dd|d�ny|j|d�Wntk
r�nXy|j|d�Wqtk
rqXqn|j�}tj	d kr5t
|t�r5|jdd�}q5q5W|jdd�t
|�dkr�tdd�}|j�}tj	d!kr�t
|t�r�|jdd�}nx�t
|�dkr�|jd�}t
|�dkrn|d|ks|d|krn|j|�|rDtd|dd|d�n|d|krk||dg7}qkqnn|j�}tj	d"kr�t
|t�r�|jdd�}q�q�W|j�n|j�tjj|d�s�t|dd�}nzt|dd�}|j�}tj	d#krFt
|t�rF|jdd�}nxt
|�dkr]|jd�}t
|�dkr|d|ks�|d|kr|r�td|dd|d�ny|j|d�Wntk
r�nXy|j|d�Wqtk
rqXqn|j�}tj	d$krIt
|t�rI|jdd�}qIqIW|jdd�t
|�dkr�tdd�}|j�}tj	d%kr�t
|t�r�|jdd�}nx�t
|�dkr�|jd�}t
|�dkr^|d|ks$|d|kr^|j|�|r[td|dd|d�q[q^n|j�}tj	d&kr�t
|t�r�|jdd�}q�q�W|j�n|j�dS('Ni����R)s/etc/R4iR5R6iiR	s/etc/passwdtas/etc/spwd.dbs/etc/pwd.dbs/etc/master.passwdtwsr+isutf-8R?RVisuser s exists in R�s
writing user s to s
/etc/groupsgroup swriting group (ii(ii(ii(ii(ii(ii(ii(ii(R7RRR�R�RRtisfileRJRKRLRMRNRORPRtremovet
ValueErrortseekR(	RgtuserstgroupsR}tfd2RSR�R�tgroupstruct((s/usr/share/jailkit/jk_lib.pytinit_passwd_and_groups�
" !


 
!

 !


 
'
cCsjtjd�}|jd�}xE|D]=}tjj||�}tjj|�r%tjj|�Sq%WdS(NtPATHRV(RtgetenvRPRRcRQR*R(R�tsearch_pathtpathsRtjoined((s/usr/share/jailkit/jk_lib.pytfind_file_in_pathxs
cCs]g}xP|D]H}|ddkr3|j|�q
t|�}|r
|j|�q
q
W|S(NiR)(R�R(Rtpaths2Rottmp2((s/usr/share/jailkit/jk_lib.pytfind_files_in_path�s
(,t
__future__Rtos.pathRR�RRR�R�RFR�RRR!R/R2R:RURZR\R`RpRtRR�R�R�RbR�R7R�R�R�R�R�R�R�R�R�R�R�RRR	(((s/usr/share/jailkit/jk_lib.pyt<module> sR	 			*	*	!	 	D			>(!!h					c		

Spamworldpro Mini