§
À•¿j¾ ã ó — d dl mZ d dl mZ d dl mZ d dlZd dlZd dlZd dlZd dlm Z d dl
mZ d dlm
Z
dZe d ¦ « d z Zd
ZdZ ej d¦ « Z ej d
¦ « ZdZdZ G d„ de¦ « Zdd„Zd„ ZdS )é )Úprint_function)Údivision)Úabsolute_importN)Úclcagefs)ÚClSelectExcept)Úrun_process_in_cagefsz/opt/altú/Úpythonz??z(?P\d\.?\d+)$z"(^|.*/)python(?P\d\.\d+)$z/usr/share/l.v.e-manager/utilsÚpython_wrapperc óD — e Zd Z dd„Zd„ Zed„ ¦ « Zd„ Zdd„ZdS ) ÚInterpreterNc ó"
— t ¦ « | _ || _ |r8|r6|| _ || _ | j | j ¦ « || _ �n`|�r…d | _ || _ t j t | j ¦ « }|
d¦ « }d|vr|d › d|dd … › �}|| _ t j
| j dd¦ « }||| d¦ « d z ||z g} | D ]Š}
| |
¦ « r!|
| _ | j |
¦ « | |
¦ « r|
}|
dz }| |¦ « r!|| _ | j |¦ « Œ‹| j s4t% j dt j
|¦ « z ¦ « ‚|s| j }|| _ nØ|r…|| _ |g| _ t j
t j
t j
|¦ « t j
j ¦ « ¦ « | _ || _ nQt/ d¦ « d }|j | _ |j | _ |j | _ |j | _ |j | _ |r|| _ nd | _ |r || _ �nò | j rzt5 j ¦ « sg| j }
t9 |
| j d
dg¦ « }|d dk rt; d
|d ¦ « ‚|d ¦ « d | _ n¼t j
| j ¦ « }t j ¦ « dk rIt5 j ¦ « s6| tB ¦ « st% j d| j z ¦ « ‚tE j# |d
dgd¬¦ « }| ¦ « d | _ n³# t: tH tD j% f$ r”}tL ' | j ¦ « }|r"|
d¦ « | _ d | _ nG| j r| j | _ d | _ n,t% j d| j ›dtQ |¦ « ›�¦ « ‚Y d }~nd }~ww xY w| j sC| j r>d | j d¦ « d d… ¦ « | _ d S d S d S )NÚversionú.r é Úbinr
Ú_binz-Can not find python binary in directory: "%s"z2.7z-czimport sys; print(sys.version)Ú
returncodezUnable to get python version %sÚoutputzXRefusing to exec untrusted interpreter '%s' as root outside CageFS without a target userT)Útextz$Error detect python binary version "z"; é ))ÚlistÚbinary_listÚuserÚprefixÚbinaryÚappendÚ
python_binÚreÚsearchÚDIGITS_VERSION_PATTERNÚgroupÚversion_from_suffixÚosÚpathÚjoinÚsplitÚ
_is_real_fileÚ_is_link_to_wrapperr ÚInterpreterErrorÚdirnameÚabspathÚpardirÚinterpretersr Úversion_fullr Ú in_cagefsr ÚOSErrorÚrealpathÚgeteuidÚ
startswithÚ_TRUSTED_INTERPRETER_PREFIXÚ
subprocessÚcheck_outputÚ
IndexErrorÚCalledProcessErrorÚVERSION_PATTERNÚmatchÚstr)Úselfr r r r/ Útarget_userr; ÚsuffixÚpython_realbinÚbinaries_to_checkÚbin_fileÚreal_binaryÚinterpreterr ÚresultÚ
canonical_binÚversion_rawÚeÚver_s ú_/opt/cloudlinux/venv/lib64/python3.11/site-packages/clselect/clselectpythonuser/interpreters.pyÚ__init__zInterpreter.__init__% s> € å™6œ6ˆÔ؈Œ Øð 8 1�fð 8 1Ø ˆDŒKØ ˆDŒKØÔ×#Ò# D¤KÑ0Ô0Ð0Ø$ˆDŒO‰OØ
ñ 3 1Ø"ˆDŒOØ ˆDŒKÝ”IÕ4°d´kÑBÔBˆEØ—[’[ Ñ+Ô+ˆFؘ&Ð Ð Ø" 1œIÐ4Ð4¨¨q¨r¨r¬
Ð4Ð4�Ø'-ˆDÔ$åœWŸ\š\¨$¬+°u¸hÑGÔGˆNàØ §¢¨cÑ!2Ô!2°1Ô!5Ñ5Ø Ñ'ð!Ðð
.ð
9ð
9�Ø×%Ò% hÑ/Ô/ð 6Ø&.�D”OØÔ$×+Ò+¨HÑ5Ô5Ð5Ø×+Ò+¨HÑ5Ô5ð &Ø%�Fà&¨Ñ/�Ø×%Ò% kÑ2Ô2ð 9Ø&1�D”OØÔ$×+Ò+¨KÑ8Ô8Ð8øð
”?ð
gÝ$Ô5ØCÅbÄgÇoÂoÐVdÑFeÔFeÑeñgô gð gð ð
)Øœ�Ø ˆDŒKˆKà
ð 1Ø ˆDŒKØ &˜xˆDÔÝœ'Ÿ/š/"¬'¯,ª,Ý”—’ Ñ'Ô'¬¬ñ+9ô +9ñ :ô :ˆDŒKà$ˆDŒOˆOå& yÑ1Ô1°%Ô8ˆKØ%Ô,ˆDŒKØ%Ô,ˆDŒKØ&Ô.ˆDŒLØ +Ô 8ˆDÔØ)Ô0ˆDŒOàð Ø"ˆDŒLˆLàˆDŒLàð _Ø ,ˆDÔÑð
_Ø”9ð ?¥XÔ%7Ñ%9Ô%9ð ?Øœ9�DÝ2°4¸¼Ø48Ð:ZÐ3[ñ]ô ]�Fà˜lÔ+¨qÒ0Ð0Ý%Ð&GÈÐPXÔIYÑZÔZÐZØ(.¨xÔ(8×(>Ò(>Ñ(@Ô(@ÀÔ(C�DÔ%Ð%õ %'¤G×$4Ò$4°T´_Ñ$EÔ$E�MÝ”z‘|”| qÒ(Ð(µÔ1CÑ1EÔ1EÐ(Ø$1×$<Ò$<Õ=XÑ$YÔ$Yð )å,Ô=ð;Ø=A¼_ñMñNô Nð Nõ #-Ô"9Ø&¨Ð.NÐOÐVZð#\ñ #\ô #\�Kà(3×(9Ò(9Ñ(;Ô(;¸AÔ(>�DÔ%øøÝ�ZÔ)FÐGð
_ð
_ð
_Ý&×,Ò,¨T¬[Ñ9Ô9�Øð _Ø#'§:¢:¨iÑ#8Ô#8�D”LØ(,�DÔ%Ð%ØÔ-ð _Ø#'Ô#;�D”LØ(,�DÔ%Ð%å(Ô9Ð9ØIMÌÈÈÕVYÐZ[ÑV\ÔV\ÐV\Ð]ñ_ô _ð _øøøøøøøøøð
_øøøð Œ|ð F Ô 1ð FØŸ8š8 DÔ$5×$;Ò$;¸CÑ$@Ô$@ÀÀ!ÀÔ$DÑEÔEˆDŒLˆLˆLð Fð Fð Fð Fs ËD=P ÐS Ð,B
R;Ò;S c óÎ — t j |¦ « oFt j |¦ « p&t j |¦ « d¦ « S )z/Check that given path is a file and not symlinkz/opt/alt/python)r$ r% ÚisfileÚislinkÚreadlinkr4 )r= r% s rJ r( zInterpreter._is_real_file� sK € åŒw�~Š~˜dÑ#Ô#ÐuR¬W¯^ª^¸DÑ-AÔ-AÐ)AÐ)tÅRÄ[ÐQUÑEVÔEV×EaÒEaÐbsÑEtÔEtÐuó c ó — t j t t ¦ « }t j | ¦ « rt j | ¦ « |k S t j | ¦ « S )zÍ
Since we have python wrapper, all python files are symlinks now
So real binary - path which must be written to .htaccess
is considered symlink that links to python wrapper
)r$ r% r&