403Webshell
Server IP : 198.54.126.161  /  Your IP : 216.73.216.232
Web Server : LiteSpeed
System : Linux premium12.web-hosting.com 4.18.0-553.94.1.lve.el8.x86_64 #1 SMP Thu Jan 22 12:37:22 UTC 2026 x86_64
User : amerfigf ( 898)
PHP Version : 8.2.31
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
�

�j�z����ddlmZddlmZddlmZddlZddlZddlZddlZddlZddl	Z	ddl
mZddl
mZmZmZmZddlmZddlmZddlZd	d
lmZd	dlmZddlmZmZd	d
lmZd	dl m!Z!ddlm"Z"ddl#m$Z$ddl%m&Z&m'Z'm(Z(ddl)m*Z*m+Z+	ddl,m-Z-ddl.m/Z/ddl0m1Z1m2Z2m3Z3ddl4m5Z5n#e6$rYnwxYw	ddl7m8Z8ddl9m:Z:n#e6$rd�Z8dZ:YnwxYwGd�de��Z;dS)�)�print_function)�absolute_import)�divisionN)�configparser)�S_IRUSR�S_IWUSR�S_IRGRP�S_IROTH)�	iteritems)�Path�)�ClSelect)�ClSelectExcept)�ClPwd�	clcaptain)�clprint)�utils)�clcagefs)�ExternalProgramFailed)�docroot�domain_owner�userdomains)�NoDomain�NoPanelUser)�BASEDIR)�get_user_prefix)�is_ea4_enabled�read_cpanel_ea4_php_conf�configure_alt_php)�da_change_user_php_ini)�get_website_id)�load_user_configc��dS�N�)�_s �L/opt/cloudlinux/venv/lib64/python3.11/site-packages/clselect/cluserselect.py�<lambda>r(-s��t��c��eZdZdZdZej��rendZdZdZ	d.d�Z
ed/d	���Zd
�Z
d0d�Zd1d�Zd�Zd�Zd�Zd�Zd�Z	d2d�Zd2d�Zdedefd�Zd3d�Zd�Zd�Zd�Zd�Zd�Zd4d�Zd5d �Z ee ��Z d!�Z!d"�Z"d#�Z#d.d$�Z$d%�Z%d&�Z&ee&��Z&d'�Z'd(�Z(ee(��Z(d6d)�Z)d*�Z*d+�Z+ee+��Z+d,�Z,d-�Z-dS)7�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�pwr0�previous_user_data�es       r'�clean_crui_imageszClUserSelect.clean_crui_images8s:���!�#�#�	�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	�R�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�t��t!t|j��j��}	t'|j��}	n#t($rg}	YnwxYw|	D]4\}
}|
|vr�
t|||dtj��dk|�	���5|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/r0�isdirrrr.�print�sys�exitrr�
startswith�KeyErrorr�geteuidr"�set�pw_name�enabled_websitesrr)�versionr>�
document_root�
exit_on_errorrG�conf�default_php�error�isolated_domains�target_domains�domain�domain_docroots            r'�switch_symlink_for_alt_phpz'ClUserSelect.switch_symlink_for_alt_phpPs���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�����"������z�|�|�q�(�1�	
�
�
���	�]�	��H�Q�K�K�K��	�!1�!=�"�#3�B�J�#?�#?�#P�Q�Q��
$�!,�R�Z�!8�!8�����
$�
$�
$�!#����
$����+9�	
�	
�&����!1�1�1��!����#�!�z�|�|�q�0�'9�	������s%�AC�
C�C�	E�E-�,E-c��|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)rTrG)�without_cagefsrIrJrKr/rN�get_user_version_maprr2r3r+r\)r;�users_vers_dictr=rRr>s     r'�apply_symlinks_rulesz!ClUserSelect.apply_symlinks_rules�s�����	��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�	pr)�phpc��tj||��t��|_t	��|_|r	||_dSg|_dSr$)r�__init__rr2rO�_user_excludes�exclude_pid_list)r;�itemrfs   r'rdzClUserSelect.__init__�sP����$��%�%�%��g�g���!�e�e����	'�$4�D�!�!�!�$&�D�!�!�!r)Fc	�L��	�
���|����|��}|r_t|��d}��||��}tj�|��s��|��}��|��}tj�|��s|S�����	tj�|�j	��}tj�
|��s|Stj|���
�jr9�j
s���j	���
�j
�j	kr|Stj��
���jkr|S	t#t%�	�
�fd�t#�	���������d}|�	|d�	|d�j	fS#t(t*f$r|cYSwxYw)zl
        Returns alternative version for a user
        @param user: string
        @return: string
        rc�>���|d�j�kS)N�data)�_item)�i�alternatives�link_dstr;s ���r'r(z*ClUserSelect.get_version.<locals>.<lambda>�s���,�q�/�&�"9�$�*�"E��"Q�r)rRrj)�_check_user_in_cagefs�_compose_user_alt_pathrr/r0rH�_compose_native_info�get_all_alternatives_datar4rk�islink�readlinkr^�_native_contents�_load_native_contents�dirname�
SELECTOR_PATH�list�filter�keys�
IndexErrorrM)r;r=rZ�show_native_version�alt_pathrS�native�	full_pathrRrmrns`        @@r'�get_versionzClUserSelect.get_version�s�����	
�"�"�4�(�(�(��.�.�t�4�4���	=�#�F�O�O�A�.�M��2�2�4��G�G�H��7�=�=��*�*�
=��6�6�t�<�<���*�*�+>�?�?���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�	���Q�Q�Q�Q�Q�Q�TX�Ye�Yj�Yj�Yl�Yl�Tm�Tm�n�n�����G��\�'�2�9�=�|�G�?T�U[�?\�]a�]g�?h�i�i���H�%�	�	�	��M�M�M�	���s�A.H
�
H#�"H#c�n�tj�|��s�|�|��}	t	j|��n.#ttf$r}tj	||���d}~wwxYw	t�|��dS#t�|��wxYwdSr$)r/r0rHr6r�mkdirr8rrr9r+r:)r;r0r=r?r@s     r'�
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)
r2�get_homedirr/r0r4�
SELECTOR2_DIRr6r��_create_symlinkr:)r;r=�homedir�path_in_home�cur_users     r'�create_selector_symlinksz%ClUserSelect.create_selector_symlinks�s����+�)�)�$�/�/���w�|�|�G�T�-?�@�@���#�#�D�)�)������d�+�+�+����\�<�&�+@�RV��W�W�W����X�|�j�'@�RV��W�W�W����(�#�#�#�#�#r)c���tj�tj��rD	|j�d|j��S#tj	ttf$rYdSwxYwdS)N�versionsr)r/r0r1r�
DEFAULTS_PATH�_dh�getrk�ConfigParser�Error�IOErrorrM)r;s r'�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/r0r4r2r�r1�set_versionr��_get_default_config_handlerr�rkr�r�r�rMrI�strrJrK)r;r=�user_backup_path�dhr@s     r'�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�R�|j�|j�|��d��sdSdS)aL"
        Checks if version is enabled,
        a version is considered "enabled" if there is no "state" option in the config.
        The presence of the "state" option always means it is disabled, regardless of its value.

        @param version: string
        @return: bool - True if version is enabled, False otherwise
        �stateTF)r��
has_optionrk)r;rRs  r'�_version_enabledzClUserSelect._version_enabled�s3���x�"�"�T�Z�Z���#A�7�K�K�	��4��5r)c
�(�tj��dkr+|�|��x}rtj|���|�|��stjd|z���|rC	t
|��}n#t$rd}YnwxYw||krtjd|�d|�����tj
|j|j�
|j�|����tj|||||��}	|r|	SdS)zz
        Sets alternative version for a users with the same uid
        @param user: string
        @return: None
        rz'Version %s is disabled by administratorNzDomain z does not belong to user )r/rN�"get_version_selection_disabled_msgr�VersionModificationBlockedr�rr�SelectorExceptionr�apply_for_at_least_one_user�_set_versionr2�	get_names�get_uid�NoUserSelector)
r;r=rRrZ�return_summaryr}rT�message�ownerrjs
          r'r�zClUserSelect.set_versionsG���:�<�<�1���T�-T�-T�UY�-Z�-Z�"Z�'�� �;�G�D�D�D��$�$�W�-�-�	q� �;�<e�ho�<o�p�p�p��	p�
�$�V�,�,�����
�
�
�����
������}�}�$�6�6�ag�ag�ag�im�im�7n�o�o�o��0����K�!�!�$�+�"5�"5�d�";�";�<�<��)������	
�	
���	��K�	�	s�2B�B�Bc�p�|jr|�|��}|�|��d}|rt|��d}|�||��}	t
j�|	��s4|js|r|�|	|��ntj
|���|���}
||
vr|dkrtj|���|�
|	��|j�|��}|dk�r�|jr[|js|�|j��t'|j��D]#\}}
|�|
|	dz|z||���$�n�d}d}t
j�|j�d�|��}t
j�|��rbt
j�d|jz|��}t
j�|	|��}|�||||��d	}tj|j��D]�}|j|vr�|�d
��r|r�$t
j�|	|��}t
j�|j|��}|�||||����nWt'|
|d��D];\}}|�|t
j�|	|��||���<|jrt6�|��n4t6�||||���|�||��|�|��|� |��|r|�!||��Sd
S)zg
        Sets alternative version for a user
        @param user: string
        @return: None
        �rr�/zphp.iniFz.etcz%s.etcT�.inirj)rSrTN)"r^r6rorrpr/r0rHr�rr�rr�NoSuchAlternativeVersion�_remove_alternatives_linksr2r3rurvrkrr�r4�NATIVE_PATH�existsrx�listdir�endswithr+r:r\�_switch_php_da_isp�_reload_processes�_backup_settings�get_summary)r;r=rRrZr�r}rTr?rSr~rmr>rg�native_path�ini�new_ini_created�new_ini_path�src�dst�filenamer0s                     r'r�zClUserSelect._set_version*s�����	8�!%�!1�!1�$�!7�!7���"�"�4�(�(�(��
��	/�#�F�O�O�A�.�M��.�.�t�]�C�C���w�}�}�X�&�&�	:��"�
:�f�
:�����$�/�/�/�/�$�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�\�\�%�D�+��(�(��h��n�t�6K�T�SZ�[�[�[�[�\� ��"'��!�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�BO�BO�
4�
Q�
Q�
Q�
�#�#�D�'�2�2�2����t�$�$�$����d�#�#�#��	?��#�#�D�*=�>�>�>�	?�	?r)�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.jsonr�zutf-8)�encoding�version_selection_disabled_msgN)
r2r�rr��open�json�loadr�r8�
ValueError)r;r��uid�config_file�f�config_datas      r'r�z/ClUserSelect.get_version_selection_disabled_msgis#���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��|�|��|���}|�|��}ddddd�i}t|�����}|�d��|�|��d}|D]?}||vri||<|�|��||d<d||d<d||d<�@	|j�	d	|j
��}	n##tjtj
f$rd}	YnwxYw	d||	d<d||d<n"#t$rtj|	���wxYw|�d��||d<|�d��|�|d��g}
t'|��D]z\}}t)||d||d||df��s�<|
�|||d||d||dff���{t+|
��S)
a'
        Returns a summary of available alternative versions for the given user.

        Only versions that are enabled, default, or selected are included.
        The label for the "native" version is replaced if show_native_version is True.

        @param user: str - Username inside CageFS.
        @param show_native_version: bool - Whether to replace the 'native' version label.
        @return: tuple of (str, (bool, bool, bool)) - Each entry contains the version name and a tuple with flags:
            (enabled, default, selected).
        rTF)�enabledrD�selectedrr�rDr�r�)rorrrq�sortedr{�appendr�r�r�r�rkr��NoSectionError�
NoOptionErrorrMrr��pop�remove�	enumerate�any�tuple)
r;r=r}rm�native_info�summary�alt_versions�selected_versionrR�default_version�result�idx�vs
             r'r�zClUserSelect.get_summary�s���	
�"�"�4�(�(�(��5�5�7�7���/�/�0C�D�D����%�U�S�S�T���l�/�/�1�1�2�2�����H�%�%�%��+�+�D�1�1�!�4��#�	1�	1�G��g�%�%�#%��� �*.�*?�*?��*H�*H�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�+�+�+�����-�-�	g�	g�F�C�����
�9�-�w�q�z�)�/D�g�a�j�Q[�F\�]�^�^�
���M�M�1�w�q�z�)�4�g�a�j��6K�W�UV�Z�Xb�Mc�d�e�f�f�f�f��V�}�}�s� C<�<D�D� D7�7Ec	��|�|��}|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
        F)rT�text�ERROR)�statusr�N)�
list_usersr��	Exceptionr�
print_diagr�rA)r;�new_version�current_versionr<r=r@s      r'�change_to_versionzClUserSelect.change_to_version�s�������0�0���	�	�D�
�� � ��{�%� �H�H�H�H���
�
�
��"�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;rRrjs   r'r�zClUserSelect.list_users�s-���(�(�*�*���d�?�?���=� ��	r)c��|jrddlm}|��gSt|����|�������S)zF
        Returns all valid system users
        @return: list
        r
)�get_cpanel_user)r^�clselectctlphpr�ry�_get_system_users�
difference�_get_user_excludes)r;r�s  r'�list_all_userszClUserSelect.list_all_users�sf��
��	'�7�7�7�7�7�7�#�O�%�%�&�&��D�*�*�,�,�7�7��8O�8O�8Q�8Q�R�R�S�S�Sr)c��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/cagefsrCr
�etcz/cl.selectorz	/cl.php.d)�dictrJr0r��	cagefsctl�ImportErrorrIrKr/r4rrr��cpetc_for_user)r;r=�config�LIBDIRr�cagefs_etc_paths      r'�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�r�w�~�~�Ve�hs�Vs�Gt�Gt�	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�r�r�
NotCageFSUser)r;�actual_usersrjr=s    r'r_z!ClUserSelect.get_user_version_map�sv��
�*�*�,�,���� �	�	�D�
�!�-�-�d�E�:�:�1�=��T�
�
��!�/�
�
�
���
�����s�<�A�
Ac���|p|���}i}|D]Y}	|�||d��d}||vrg||<||�|���E#tj$rY�VwxYw|S)zH
        Returns users grouped by version
        @return: dict
        Fr)r�r�r�rr)r;�
user_namesrZr	rjr=rRs       r'r�z!ClUserSelect.get_version_user_map�s���
"�:�T�%8�%8�%:�%:���� �	�	�D�
��*�*�4���?�?��B���$���$&�D��M��W�
�$�$�T�*�*�*�*��!�/�
�
�
���
�����s�AA � A2�1A2c
��	|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/r0rsrt�unlinkr�remove_file_or_dirr�symlinkr�r�UnableToSetAlternativer�)r�r�r=rRr�r@s      r'r�zClUserSelect._create_symlinks���
	o��
2��7�>�>�#�&�&�2��{�3�'�'�3�.�.��	�#��������,�S�1�1�1���c�3�'�'�'�'�'���	o�	o�	o���G�$7�$�;�D�'�1�M�M�M� �2�2�ad�ad�ad�fi�fi�fi�kl�kl�kl�3m�n�n�n�����	o���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�*�|���Sr$)�strip)�xs r'r(z1ClUserSelect._get_user_excludes.<locals>.<lambda>.s��1�7�7�9�9�r))
rer/r0rH�CAGEFS_EXCLUDErOr�r4�update�mapr�read_file_as_string�
splitlines)r;rg�full_item_paths   r'r�zClUserSelect._get_user_excludes"s���
��	'��&�&��w�}�}�T�0�1�1�	��5�5�L��J�t�2�3�3�	�	�D��W�\�\�$�*=�t�D�D�N���&�&��C�,�,�u�/H��/X�/X�/c�/c�/e�/e�f�f�g�g�
�
�
�
��"�"r)c��|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�rrCr
z;ERROR: CageFS version is unsupported. Please update CageFS.)r^rr.rJr0r�rrrIrK�is_user_enabledrr�AttributeError)r;r=rrs    r'roz"ClUserSelect._check_user_in_cagefs2s����	��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�rkr0r4rsr)r;r0r�r�s    r'r�z'ClUserSelect._remove_alternatives_linksJsx���
�4�(�(�	!�	!�H��z��)�)������T�8�4�4�I��7�>�>�)�,�,�
���I�i� � � � �
	!�	!r)c��|jr|j�|��}|dzSt|j�|����}d}|r|rt|��nd}t
j��s0tj	�
|j|dd�|dd��nd}|r tj	�
||��n|S)zz
        Composes and returns user alternative directory path
        @param user: string
        @return: string
        z
/.cl.selectorr����Nr�zcl.selectorz/etc/cl.selector)r^r2r�r�r�r!rr.r/r0r4�CAGEFS_PATH)r;r=rSr�r��document_root_id�bases       r'rpz#ClUserSelect._compose_user_alt_pathXs�����	-��k�-�-�d�3�3�G��_�,�,��$�+�%�%�d�+�+�,�,�����	V�@M�U�~�m�<�<�<�SU���%�'�'�
$�B�G�L�L��)�3�r�s�s�8�T�5�-�P�P�P�#�	
�8H�Q�r�w�|�|�D�"2�3�3�3�T�Qr)c�v�|j���}t|�����S)zB
        Returns set of system users
        @return: set
        )r2�
get_user_dictrOr{)r;�
users_dicts  r'r�zClUserSelect._get_system_usersms/��
�[�.�.�0�0�
��:�?�?�$�$�%�%�%r)c��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/r0rsrr8rr9)�	file_paths r'�_delete_if_symlinkzClUserSelect._delete_if_symlinkusv���7�>�>�)�$�$�	l�
l��	�)�$�$�$�$�$���
l�
l�
l�$�5�i�Aj�k�k�k�
l����	l�	ls	�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)r2r3�pw_uid�pw_gidr/rN�getegid�setegid�seteuid�secureio�set_capabilityr8r�UnableToChangeToAnotherUser)r;r=�entry�new_uid�new_gid�cur_euid�cur_egidr@s        r'r6zClUserSelect._change_uid�s�����*�*�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/rNr1r2r/r0r8rr3r�)�uid_and_gidr@s  r'r: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�|��s	t�|��dS|�|��tj�|��}	dttj
����z}tj�||��}tj
||�d���	ttzt zt"z}	tj||��tj||	��n�#t($rYntwxYw#t*t(t,f$rV}
	tj�|��rtj|��n#YnxYwt1j||
���d}
~
wwxYwt�|��dS#t�|��wxYw)z�
        Saves data to file
        @param user: string
        @param file_contents: string
        @param file_path: string
        @return: None
        Nzclseltmp_%s�
)r6r/r0r�r+r:r*rwr��uuid�uuid4r4rr7rrr	r
�rename�chmodr8r�rrrr9)r;r=�
file_contentsr)�creater?�file_directoryrw�	temp_path�maskr@s           r'�_write_to_filezClUserSelect._write_to_file�s���"�-�-�d�3�3��	:��
�"�'�.�.��";�";�
��.
�%�%�&8�9�9�9�9�9�-
�#�#�I�.�.�.��W�_�_�Y�7�7�N�
�'�#�d�j�l�l�*;�*;�;���G�L�L���A�A�	���	�]�]�]�+D�E�E�E��"�W�,�w�6��@�D��I�i��3�3�3��H�Y��-�-�-�-�������D�������W�&;�<�
D�
D�
D���w�~�~�i�0�0�-��	�)�,�,�,�����D����$�5�i��C�C�C�����

D����
�%�%�&8�9�9�9�9�9��L�%�%�&8�9�9�9�9���sg�!G�4G�
AE�&A	D0�/G�0
D=�:G�<D=�=G�F-�3F�F(�F�F(�(F-�-G�G(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�Process�range�parentrfr��pid�
NoSuchProcessrr��NoSuchUserException�process_iter�uids�real�	effective�name�findrkr/�kill�signal�SIGHUPr8r�)r;r=�next_parentrlr��procrOs       r'r�zClUserSelect._reload_processes�s���		� �.�*�*�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����z�����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�rL�rfindr��closer8r�)r0�
extensionsr��line�exts     r'�_skim_over_extensionsz"ClUserSelect._skim_over_extensions�s����
�	��t�*�*�C��
+�
+���?�?�6�*�*�+��q�4�:�:�e�#4�#4�4�5�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 = �,)rorpr/r0r4rwrrr2r�rHr6rr�r8rr+r:rr9rkr�r�r�r{r^�replacerdrG)r;r=�backup_contents�
user_alt_path�
user_ext_pathrmr�r?r@�user_backup_filerR�alt�
curr_ext_pathras              r'r�zClUserSelect._backup_settingss���
	
�"�"�4�(�(�(����3�3�D�9�9�
�����R�W�_�_�]�%C�%C�Z�P�P�
��5�5�7�7���7�<�<���(?�(?��(E�(E�~�V�V���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�<�<�(8�.�I�I��
�7�=�=��'�'�	B�	B�15����T�=M�=M�d�=S�=S�TU�=V�=V�=V�W�G�G�	B�6:�Z�Z�Z�A�G����w�'�'�'��,�+�+�-�-�.�.�	o�	o�C��"�
t� -�
� :�S�[�[��b�=Q�=Q� Q�TZ� Z�
�
� "����]�]�C�K�K�X[�]_�L`�L`�L`�<c�er� s� s�
��3�3�M�B�B�J��"�"�"�t�z�z�3�3�3�PS�PX�PX�Y_�`j�Yk�Yk�Pl�Pl�Pl�Pl�#m�n�n�n�n����D�$�)�)�O�"<�"<�>N�O�O�O�O�Os�+D�E�/E�Ec�8�|jrdSt||��dSr$)r^r )r;r=rRs   r'r�zClUserSelect._switch_php_da_isp"s(����	��F��t�W�-�-�-�-�-r)r$)NTT)rbN)NF)NFFT)F)NN)NNF)T).�__name__�
__module__�__qualname__r"rxrr.r�rr�rA�staticmethodr\rardr�r�r�r�r�r�r�r�r�r�r�r�r�r�rr_r�r�r�ror�rpr�r*r6r:rGr�rdr�r�r%r)r'r+r+1s�������K�#�M�#5�8�#5�#7�#7�f�-�-�=f�K�*�N�0�M�B�B�B�B�0�A�A�A��\�A�Fp�p�p�'�'�'�'�"�"�"�"�H>�>�>�
$�
$�
$����
�
�
����ae�"�"�"�"�H=?�=?�=?�=?�~�3��3�����2/�/�/�/�b
&�
&�
&����	T�	T�	T�3�3�3�$�������"o�o�o�o�2#�l�?�3�3�O�#�#�#� ���0!�!�!�R�R�R�R�*&�&�&�l�l�l�&��&8�9�9��F�F�F�*Y�Y�Y� �<��-�-�L�":�":�":�":�H"�"�"�H��� )�L�)>�?�?�� P� P� P�D.�.�.�.�.r)r+)<�
__future__rrrr�r/rJr>rYr1�future.movesrr��statrrr	r
�future.utilsr�pathlibrrK�clselectr�clselectexceptr�clcommonrr�
clselectprintrr�rr�clcommon.utilsr�clcommon.cpapirrr�clcommon.cpapi.cpapiexceptionsrr�clcagefslib.constr�clcagefslib.fsr�clcagefslib.selector.configurerrr�clcagefslib.selector.panel.dar r�#clcagefslib.webisolation.jail_utilsr!�clcagefslib.webisolation.configr"r+r%r)r'�<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�D���	�	�	��D�	�����B�B�B�B�B�B�@�@�@�@�@�@�@������#�^�N���������
t.�t.�t.�t.�t.�8�t.�t.�t.�t.�t.s$�B)�)B1�0B1�5C�
C�C

Youez - 2016 - github.com/yon3zu
LinuXploit