Hacked By AnonymousFox

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

�

m4�fLg��P�ddlmZddlmZddlmZddlZddlZddlZddlZddlZddl	m
Zddlm
Z
mZmZmZddlmZddlZdd	lmZdd
lmZddlmZmZddlmZdd
lmZddlm Z 	ddl!m"Z"ddl#m$Z$ddl%m&Z&m'Z'm(Z(ddl)m*Z*ddl+m,Z,n#e-$rYnwxYwGd�de��Z.dS)�)�print_function)�absolute_import)�divisionN)�configparser)�S_IRUSR�S_IWUSR�S_IRGRP�S_IROTH)�	iteritems�)�ClSelect)�ClSelectExcept)�ClPwd�	clcaptain)�clprint)�utils)�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�Zd-d�Zd�Zd�Zd�Zd�Zd.d�Zd.d�Zd-d�Zd�Zd�Zd�Zd�Zd�Zd*d�Zd/d�Zee��Zd�Zd�Zd�Z d �Z!d!�Z"d"�Z#ee#��Z#d#�Z$d$�Z%ee%��Z%d0d%�Z&d&�Z'd'�Z(ee(��Z(d(�Z)d)�Z*dS)1�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_images-s9���� � �	�����8Y�)Z�)Z�	��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)�versionr/�
exit_on_errorr9�conf�default_php�errors       r2�switch_symlink_for_alt_phpz'ClUserSelect.switch_symlink_for_alt_phpFsM���w�}�}�W�%�%�	�e�o�.?�.?�	��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)rBr9)�without_cagefsr;r<r=r r@�get_user_version_maprr#r$rrF)r,�users_vers_dictr.rAr/s     r2�apply_symlinks_rulesz!ClUserSelect.apply_symlinks_rulesks�����	��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,�itemrSs   r2rPzClUserSelect.__init__xsP����$��%�%�%��g�g���!�e�e����	'�$4�D�!�!�!�$&�D�!�!�!rLFc	�������|����|��}��|��}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 ���r2�<lambda>z*ClUserSelect.get_version.<locals>.<lambda>�s���<��?�6�2�4�:�>���rLrrArW)�_check_user_in_cagefs�_compose_user_alt_path�_compose_native_infor r!r:�get_all_alternatives_datar%rX�islink�readlinkrH�_native_contents�_load_native_contents�dirname�
SELECTOR_PATH�list�filter�keys�
IndexErrorr?)	r,r.�show_native_version�alt_path�native�	full_pathrArZr[s	`      @@r2�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�|��wxYwdSrO)r r!r:r'r�mkdirr)rrr*rr+)r,r!r.r0r1s     r2�
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'rr�_create_symlinkr+)r,r.�homedir�path_in_home�cur_users     r2�create_selector_symlinksz%ClUserSelect.create_selector_symlinks�s����+�)�)�$�/�/���w�|�|�G�T�-?�@�@���#�#�D�)�)������d�+�+�+����\�<��+>�PT��U�U�U����X�|�J�'>�PT��U�U�U����(�#�#�#�#�#rLc���tj�tj��rD	|j�d|j��S#tj	ttf$rYdSwxYwdS)N�versionsrm)r r!r"r
�
DEFAULTS_PATH�_dh�getrX�ConfigParser�Error�IOErrorr?)r,s r2�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.cfgr}z*Error while restoring settings from backupr)r r!r%r#rur"�set_versionr��_get_default_config_handlerr�rXr�r�r�r?r;�strr<r=)r,r.�user_backup_path�dhr1s     r2�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	��tj|j|j�|j�|����tj||||��}|r|SdS)zz
        Sets alternative version for a users with the same uid
        @param user: string
        @return: None
        N)r�apply_for_at_least_one_user�_set_versionr#�	get_names�get_uidr�NoUserSelector)r,r.rA�return_summaryrkrBrWs       r2r�zClUserSelect.set_version�sh���0����K�!�!�$�+�"5�"5�d�";�";�<�<��)��^�%8�-�	
�
���	��K�	�	rLc�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
        rm�/zphp.iniFz.etcz%s.etcT�.inirW�rBN)!rHr'r]r^r r!r:rrrr�r`�NoSuchAlternativeVersion�_remove_alternatives_linksr#r$rcrdrXrrwr%�NATIVE_PATH�existsrf�listdir�endswithrr+rF�_switch_php_da_isp�_reload_processes�_backup_settings�get_summary)r,r.rAr�rkrBr0rlrZr/rT�native_path�ini�new_ini_created�new_ini_path�src�dst�filenamer!s                   r2r�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�*=�>�>�>�	?�	?rLc�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
        rmTF)�enabledr6�selectedr�stater�r6r�r})r]r`r_�sortedri�appendror�
has_optionrXr�r��NoSectionError�
NoOptionErrorr?rr��pop�remove�range�len�tuple)r,r.rkrZ�native_info�summary�alt_versions�selected_versionrA�default_version�idx�vs            r2r�zClUserSelect.get_summarys{��	
�"�"�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)�status�messageN)�
list_usersr��	Exceptionr�
print_diagr�r3)r,�new_version�current_versionr-r.r1s      r2�change_to_versionzClUserSelect.change_to_versionEs�������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,rArWs   r2r�zClUserSelect.list_usersTs-���(�(�*�*���d�?�?���=� ��	rLc��|jrddlm}|��gSt|����|�������S)zF
        Returns all valid system users
        @return: list
        r)�get_cpanel_user)rH�clselectctlphpr�rg�_get_system_users�
difference�_get_user_excludes)r,r�s  r2�list_all_userszClUserSelect.list_all_users]sq��
��	'�7�7�7�7�7�7�#�O�%�%�&�&��D�*�*�,�,�7�7��#�#�%�%�'�'�(�(�	(rLc��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/cagefsr5r�etcz/cl.selectorz	/cl.php.d)�dictr<r!r��	cagefsctl�ImportErrorr;r=r r%rrr��cpetc_for_user)r,r.�config�LIBDIRr��cagefs_etc_paths      r2�cagefs_copy_etczClUserSelect.cagefs_copy_etchs��������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�ror�
NotCageFSUser)r,�actual_usersrWr.s    r2rIz!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�ror�rr�)r,�
user_namesr�rWr.rAs      r2r�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!rarb�unlinkr�remove_file_or_dirr�symlinkr�r�UnableToSetAlternative�SelectorException)r�r�r.rArtr1s      r2rwzClUserSelect._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�*�|���SrO)�strip)�xs r2r\z1ClUserSelect._get_user_excludes.<locals>.<lambda>�s��1�7�7�9�9�rL)
rRr r!r:�CAGEFS_EXCLUDErQr�r%�update�mapr�read_file_as_string�
splitlines)r,rT�full_item_paths   r2r�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��"�"rLc��|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�rr5rz;ERROR: CageFS version is unsupported. Please update CageFS.)rHrrr<r!r�r�r�r;r=�is_user_enabledrr��AttributeError)r,r.r�r�s    r2r]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�rXr!r%rar�)r,r!r�rns    r2r�z'ClUserSelect._remove_alternatives_links�sx���
�4�(�(�	!�	!�H��z��)�)������T�8�4�4�I��7�>�>�)�,�,�
���I�i� � � � �
	!�	!rLc�&�|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)rHr#rur�r�rrr r!r%�CAGEFS_PATH)r,r.rx�uids    r2r^z#ClUserSelect._compose_user_alt_path�s�����	-��k�-�-�d�3�3�G��_�,�,��$�+�%�%�d�+�+�,�,���� � �
Q����G�L�L��)�3�r�s�s�8�T�5�-�P�P�	
rLc�v�|j���}t|�����S)zB
        Returns set of system users
        @return: set
        )r#�
get_user_dictrQri)r,�
users_dicts  r2r�zClUserSelect._get_system_users�s/��
�[�.�.�0�0�
��:�?�?�$�$�%�%�%rLc��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!rar�r)rr*)�	file_paths r2�_delete_if_symlinkzClUserSelect._delete_if_symlinksu���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 r@�getegid�setegid�seteuid�secureio�set_capabilityr)r�UnableToChangeToAnotherUser)r,r.�entry�new_uid�new_gid�cur_euid�cur_egidr1s        r2r'zClUserSelect._change_uids�����*�*�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 r@rrr	r
r)rr
r�)�uid_and_gidr1s  r2r+zClUserSelect._restore_uid&s����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'rer��uuid�uuid4r%rr(rrr	r
�rename�chmodr)r�rr�rr+rr*)r,r.�
file_contentsr�creater0�file_directoryre�	temp_path�maskr1s           r2�_write_to_filezClUserSelect._write_to_file5s����	�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��parentrSr��pid�
NoSuchProcessrr��NoSuchUserException�process_iter�uids�real�	effective�name�findrXr �kill�signal�SIGHUPr)r�)r,r.�next_parentrYr��procr(s       r2r�zClUserSelect._reload_processesXs���		� �.�*�*�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---)�openr>�rfindr��closer)r�)r!�
extensionsr��line�exts     r2�_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 = rrz
 = native
z/alt_php�.�r�zalt-phpzalt_php.ini�[z]
modules = �,)r]r^r r!r%rer`r#rur:r'rrqr)rrr+rr*rXror�r�rirH�replacer>r!)r,r.�backup_contents�
user_alt_path�
user_ext_pathrZr�r0r1�user_backup_filerA�alt�
curr_ext_pathr;s              r2r�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||��dSrO)rHrr)r,r.rAs   r2r�zClUserSelect._switch_php_da_isp�s8����	��F��t�W�-�-�-�&�t�W�5�5�5�5�5rLrO)TT)rMN)F)FFT)NNF)T)+�__name__�
__module__�__qualname__r�rfrrr�r�rvr3�staticmethodrFrKrProrrr{r�r�r�r�r�r�r�r�r�rIr�rwr�r]r�r^r�rr'r+r!r�r>r�r��rLr2rr%s��������K�#�M�#2�5�?�#4�#4�c�-�-�:c�K�*�N�0�M�B�B�B�B�2�"�"�"��\�"�Hp�p�p�'�'�'�'� � � � �F>�>�>�
$�
$�
$����
�
�
����� 8?�8?�8?�8?�t(#�(#�(#�(#�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�6rLr)/�
__future__rrrr r<rr2r�future.movesrr��statrrr	r
�future.utilsrr%�clselectr
�clselectexceptr�clcommonrr�
clselectprintrrAr�clcommon.utilsr�clcagefslib.constr�clcagefslib.fsr�clcagefslib.selector.configurerrr�clcagefslib.selector.panel.dar�clcagefslib.selector.panel.isprr�rrPrLr2�<module>r_s���&�%�%�%�%�%�&�&�&�&�&�&�������	�	�	�	�
�
�
�
�����
�
�
�
�����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�	����V
6�V
6�V
6�V
6�V
6�8�V
6�V
6�V
6�V
6�V
6s�*"B
�
B�B

Hacked By AnonymousFox1.0, Coded By AnonymousFox