§ À•¿j¾ãó—ddlmZddlmZddlmZddlZddlZddlZddlZddlm Z ddl m Z ddl m Z dZe d ¦«d zZd Zd Zejd ¦«Zejd ¦«ZdZdZGd„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—eZdZ dd„Zd„Zed„¦«Zd„Zdd„ZdS) Ú InterpreterNc ó" —t¦«|_||_|r8|r6||_||_|j |j¦«||_�n`|�r…d|_||_tjt|j¦«}|  d¦«}d|vr|d›d|dd…›�}||_ tj  |jdd¦«}||| d¦«dz||zg} | D]Š} | | ¦«r!| |_|j | ¦«| | ¦«r| }| dz} | | ¦«r!| |_|j | ¦«Œ‹|js4t%jdtj  |¦«z¦«‚|s|j}||_nØ|r…||_|g|_tj  tj  tj  |¦«tj j¦«¦«|_||_nQt/d¦«d } | j|_| j|_| j|_| j|_| j|_|r||_nd|_|r ||_�nò |jrzt5j¦«sg|j} t9| |jd d g¦«}|d dkrt;d |d¦«‚|d ¦«d|_n¼tj  |j¦«}tj¦«dkrIt5j¦«s6|  tB¦«st%jd|jz¦«‚tEj#|d d gd¬¦«}| ¦«d|_n³#t:tHtDj%f$r”}tL '|j¦«}|r"|  d¦«|_d|_nG|j r|j |_d|_n,t%jd|j›dtQ|¦«›�¦«‚Yd}~nd}~wwxYw|jsC|jr>d |j d¦«dd…¦«|_dSdSdS)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)Úselfrrrr/Ú 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;Ò;ScóΗtj |¦«oFtj |¦« p&tj|¦« d¦«S)z/Check that given path is a file and not symlinkz/opt/alt/python)r$r%ÚisfileÚislinkÚreadlinkr4)r=r%s rJr(zInterpreter._is_real_file�sK€åŒw�~Š~˜dÑ#Ô#Ðu­R¬W¯^ª^¸DÑ-AÔ-AÐ)AÐ)tÅRÄ[ÐQUÑEVÔEV×EaÒEaÐbsÑEtÔEtÐuócó—tj tt¦«}tj |¦«rtj|¦«|kStj |¦«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&Ú WRAPPERS_PATHÚPYTHON_WRAPPERrNrOrM)r%Ú wrapper_paths rJr)zInterpreter._is_link_to_wrapper‘sX€õ”w—|’|¥Mµ>ÑBÔBˆ Ý Œ7�>Š>˜$Ñ Ô ð 5Ý”;˜tÑ$Ô$¨ Ò4Ð 4ÝŒw�~Š~˜dÑ#Ô#Ð#rPc óz—|jj›d|jj›d|j›d|j›d|j›d|j›d� S)Nrz (prefix='z ', version='z ', binary='z', version_full='z'))Ú __class__Ú __module__Ú__name__rrrr/)r=s rJÚ__repr__zInterpreter.__repr__�sM€ð”Ô)Ð)Ð)¨4¬>Ô+BÐ+BÐ+BØ” � � ˜Tœ\˜\˜\¨4¬;¨;¨;¸Ô8IÐ8IÐ8Ið ð rPcój—|j|j|j|jdœ}|r||=t ||¦«|iS|S)N)rrrr/)rrrr/Úgetattr)r=ÚkeyÚis rJÚas_dictzInterpreter.as_dict¥sN€à”kØ”kØ”|Ø Ô-ð  ð ˆð ð +Ø�#�ݘD #Ñ&Ô&¨Ð*Ð *؈rP)NNNNN©N) rXrWÚ __qualname__rKr(Ú staticmethodr)rYr^©rPrJr r #s‡€€€€€à9=Ø04ðfFðfFðfFðfFðPvðvðvðð $ð $ñ„\ð $ðððð ð ð ð ð ð rPr có–‡—tj tt¦«}d}g}t j|›|dz›�¦«t j|›|dz›�¦«zD]D} t |¦«}n#tj$rYŒ$wxYw|j �|  |¦«ŒE‰rtˆfd„|D¦«¦«S|S)Nz[0-9]réc3ó<•K—|]}t|‰¦«|fV—ŒdSr_)r[©Ú.0r]r\s €rJú zinterpreters..Äs0øèè€Ð:Ð:¨Q•W˜Q ‘_”_ aÐ(Ð:Ð:Ð:Ð:Ð:Ð:rP) r$r%r&ÚALT_PATHÚINT_BASEÚglobr rr*r/rÚdict)r\Ú search_pathÚdigitÚinterpsr%rDs` rJr.r.²sðø€Ý”'—,’,�x­Ñ2Ô2€KØ €EØ€GÝ” ˜[Ð5¨%°!©)Ð5Ð5Ñ6Ô6½¼ÀkÐC^ÐSXÐ[\ÑS\ÐC^ÐC^Ñ9_Ô9_Ñ_ð (ð (ˆð å% dÑ+Ô+ˆKˆKøÝÔ.ð ð ð Ø ˆHð øøøð Ô #Ð /Ø �NŠN˜;Ñ 'Ô 'Ð 'øØ ðÝÐ:Ð:Ð:Ð:°'Ð:Ñ:Ô:Ñ:Ô:Ð:àˆsÁ*A:Á:B  B cóR‡—tˆfd„t¦«D¦«¦«S)Nc3óŒ•K—|]>}t| ‰¦« ¦«¦«dV—Œ?dS)rN)rr^Úitemsrfs €rJrhz$interpreters_dict..ÊsFøèè€ÐHÐH°A•�Q—Y’Y˜s‘^”^×)Ò)Ñ+Ô+Ñ,Ô,¨QÔ/ÐHÐHÐHÐHÐHÐHrP)rlr.)r\s`rJÚinterpreters_dictrsÉs*ø€Ý ÐHÐHÐHÐH½¹¼ÐHÑHÔHÑ HÔ HÐHrPr_)Ú __future__rrrrkr$rr6ÚclcommonrÚclselect.clselectexceptrÚclselect.utilsrriÚrstripr5rjÚINT_VERSÚcompiler!r:rRrSÚobjectr r.rsrbrPrJúr|sXðð&Ð%Ð%Ð%Ð%Ð%ØÐÐÐÐÐØ&Ð&Ð&Ð&Ð&Ð&Ø € € € Ø € € € Ø € € € ØÐÐÐàÐÐÐÐÐØ2Ð2Ð2Ð2Ð2Ð2Ø0Ð0Ð0Ð0Ð0Ð0ð €ð'Ÿošo¨cÑ2Ô2°SÑ8ÐØ €Ø €Ø#˜œÐ$=Ñ>Ô>ÐØ�"”*ÐBÑCÔC€à0€ Ø!€ðLðLðLðLðL�&ñLôLðLð^ðððð.IðIðIðIðIrP