Edit File: cluserselect.cpython-311.pyc
� ����=�9e�f�����������������������������d�dl�mZ�d�dl�mZ�d�dl�mZ�d�dlZd�dlZd�dlZd�dlZd�dlZd�dl m Z�d�dlm Z mZmZmZ�d�dlmZ�d�dlZdd lmZ�dd lmZ�d�dlmZmZ�ddlmZ�dd lmZ�d�dlm Z ��G�d��de������������Z!dS�)�����)�print_function)�absolute_import)�divisionN)�configparser)�S_IRUSR�S_IWUSR�S_IRGRP�S_IROTH)� iteritems����)�ClSelect)�ClSelectExcept)�ClPwd� clcaptain)�clprint)�utils)�ExternalProgramFailedc��������������������^����e�Zd�ZdZdZdZdZdZd*d�Ze d+d ���������������Z d ��Zd,d�Zd-d�Z d��Zd��Zd��Zd��Zd.d�Zd.d�Zd-d�Zd��Zd��Zd��Zd��Zd��Zd*d�Zd/d�Z�e e������������Zd��Zd��Zd��Zd ��Zd!��Z d"��Z!�e e!������������Z!d#��Z"d$��Z#�e e#������������Z#d0d%�Z$d&��Z%d'��Z&�e e&������������Z&d(��Z'd)��Z(dS�)1�ClUserSelectz/var/cagefsz'/usr/share/cagefs-skeleton/usr/selectorz /usr/selectorz/etc/cagefs/excludez.cl.selector/selector.pathNc������������������6����t�����������j�����������������������������d������������sdS�|D�]�}|�j�����������������������������|������������}t�����������j�����������������������������|j��������d������������}t�����������j�����������������������������|������������s�|����������������������|������������} �t����������j ��������|�������������n.#�t����������t����������f$�r}t����������j ��������||�������������d}~ww�xY�w �t�������������������������������|���������������#�t�������������������������������|�������������w�xY�w��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)�os�path�isfile�_clpwd�get_pw_by_name�join�pw_dir�_change_uidr����write�OSErrorr���r����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%���s*�������w�~�~�?�@�@�� ��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*����B/�.C9�/C��C�C�C9�9DTc������������������B���� �dt�����������j��������vrt�����������j�����������������������������d�������������ddlm}m}m}�n9#�t����������$�r,�t����������d�������������|rt����������j ��������d�������������nY�dS�Y�nw�xY�w|rm�|��������������rc�|��������������}|rW �|d���������}|� ��������������������d������������s(t����������d �������������|rt����������j ��������d�������������ndS�n#�t����������$�r�Y�nw�xY�w�|||�d t����������j ����������������������dk����|�������������} | r|rt����������j ��������d�������������| S�)z� Switch symlink for alt php. Create .cagefs directory if not created Rerurn True if error has occured �/usr/share/cagefsr���)�configure_alt_php�is_ea4_enabled�read_cpanel_ea4_php_conf�ERROR: CageFS not installed.r���T�defaultzea-phpzlERROR: system default PHP version is alt-php. PHP Selector is disabled. Use cPanel MultiPHP manager instead.F)� write_log� drop_perm�configure_multiphp)�sysr����append� cagefsctlr.���r/���r0����ImportError�print�exit� startswith�KeyErrorr����geteuid) �versionr'���� exit_on_errorr5���r.���r/���r0����conf�default_php�errors ��� r*����switch_symlink_for_alt_phpz'ClUserSelect.switch_symlink_for_alt_php;���s������ �"�#�(�2�2����� 3�4�4�4�]�]�]�]�]�]�]�]�]�]�]���� �� �� ��0�1�1�1��� ���������t�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"����7:��0A0�/A0�AC�� C�Cc����������������������|�j���������r#t����������d�������������t����������j��������d�������������t ����������j����������������������dk����r#t����������d�������������t����������j��������d�������������|������������������������������������}t����������|������������D�]M\��}}t����������d|�������������|�j��������� ��������������������|������������}t�������������������������������||dd���������������Nd�S�)NzPERROR: this option does not work in "single user" mode (when CageFS is disabled)r���r���zERROR: root privileges requiredzProcessing userF)r@���r5���)�without_cagefsr:���r6���r;���r���r>����get_user_version_mapr���r���r���r���rD���)r$����users_vers_dictr&���r?���r'���s��� r*����apply_symlinks_rulesz!ClUserSelect.apply_symlinks_rulesd���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�� p������phpc�����������������������t����������j��������|�|�������������t������������������������|�_��������t ������������������������|�_��������|r ||�_��������d�S�g�|�_��������d�S��N)r ����__init__r���r����set�_user_excludes�exclude_pid_list)r$����itemrQ���s��� r*���rN���zClUserSelect.__init__q���sP��������$��%�%�%��g�g���!�e�e����� '�$4�D�!�!�!�$&�D�!�!�!rJ���Fc����������� ���������������������������������������|������������������������������������|������������}�����������������������|������������}t����������j�����������������������������|������������s|S���������������������������������������t����������j�����������������������������|��j��������������������}t����������j��������� ��������������������|������������s|S�t����������j ��������|���������������j��������r9��j��������s��� ����������������������j������������������������j����������j�����������������k����r|S�t����������j��������������������������������������������j��������k����r|S� �t!����������t#��������������fd�t!����������������������������������������������������������������������������������d���������}|�|���������d����������|���������d�����������j�����������������fS�#�t&����������t(����������f$�r�|cY�S�w�xY�w)zl Returns alternative version for a user @param user: string @return: string c������������������>�������|����������d����������j�������������������k����S�)N�data)�_item)�i�alternatives�link_dstr$���s��� ���r*����<lambda>z*ClUserSelect.get_version.<locals>.<lambda>����s�������<��?�6�2�4�:�>����rJ���r���r?���rU���)�_check_user_in_cagefs�_compose_user_alt_path�_compose_native_infor���r����isdir�get_all_alternatives_datar���rV����islink�readlinkrF����_native_contents�_load_native_contents�dirname� SELECTOR_PATH�list�filter�keys� IndexErrorr=���) r$���r&����show_native_version�alt_path�native� full_pathr?���rX���rY���s ���` @@r*����get_versionzClUserSelect.get_versionz���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����t�����������j�����������������������������|������������s�|����������������������|������������} �t ����������j��������|�������������n.#�t����������t����������f$�r}t����������j ��������||�������������d�}~ww�xY�w �t�������������������������������|�������������d�S�#�t�������������������������������|�������������w�xY�wd�S�rM���)r���r���r^���r���r����mkdirr!���r���r���r"���r���r#���)r$���r���r&���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������������������������������|������������}t����������j�����������������������������||�j��������������������}|����������������������|������������}|����������������������||�������������|����������������������d|dz���d��������������|����������������������d|dz���d��������������|�� ��������������������|�������������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���rq����_create_symlinkr#���)r$���r&����homedir�path_in_home�cur_users��� r*����create_selector_symlinksz%ClUserSelect.create_selector_symlinks����s���������+�)�)�$�/�/���w�|�|�G�T�-?�@�@���#�#�D�)�)������d�+�+�+����\�<��+>�PT��U�U�U����X�|�J�'>�PT��U�U�U����(�#�#�#�#�#rJ���c������������������������t�����������j�����������������������������t����������j��������������������rD �|�j�����������������������������d|�j��������������������S�#�t����������j ��������t����������t����������f$�r�Y�dS�w�xY�wdS�)N�versionsrl���)r���r���r���r ���� DEFAULTS_PATH�_dh�getrV����ConfigParser�Error�IOErrorr=���)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����t�����������j�����������������������������|�j�����������������������������|������������dd������������}t�����������j�����������������������������|������������s*|����������������������||�������������������������������������������������d�S� �|����������������������|������������}|����������������������||� ��������������������d|�j ���������������������������������d�S�#�t����������j��������t����������t����������f$�r<}t����������dt!����������|�������������������������t#����������j��������d�������������Y�d�}~d�S�d�}~ww�xY�w)N�.cl.selector�defaults.cfgr|���z*Error while restoring settings from backupr���)r���r���r���r���rt���r����set_versionr�����_get_default_config_handlerr���rV���r����r����r����r=���r:����strr6���r;���)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����������� ������������t����������j��������|�j��������|�j�����������������������������|�j�����������������������������|������������������������t����������j��������||||������������}|r|S�dS�)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&���r?����return_summaryrj���r@���rU���s��� r*���r����zClUserSelect.set_version����sh��������0����K�!�!�$�+�"5�"5�d�";�";�<�<��)��^�%8�-� �� ����� ��K� �� rJ���c������������������6����|�j���������r|����������������������|������������}|����������������������|�������������|����������������������|������������}t����������j�����������������������������|������������s2|�j���������r|����������������������||�������������nt����������j ��������|�������������|�� ����������������������������������}||vr|dk����rt����������j��������|�������������|����������������������|�������������|�j �����������������������������|������������} |dk�����r�|�j���������r[|�j��������s|����������������������|�j���������������������t%����������|�j��������������������D�]#\��} }|����������������������||dz���| z���||��������������$�n�d}d} t����������j�����������������������������|�j���������d�|������������}t����������j�����������������������������|������������rbt����������j�����������������������������d|�j��������z��|������������}t����������j�����������������������������||������������}|����������������������||||�������������d} t ����������j��������|�j��������������������D�]�}|�j��������|vr�|���������������������d������������r| r�$t����������j�����������������������������||������������}t����������j�����������������������������|�j��������|������������}|����������������������||||���������������nWt%����������||���������d ���������������������D�];\��} }|����������������������|t����������j�����������������������������|| ������������||��������������<|�j���������rt4�������������������������������|�������������n3t4�������������������������������|| |� �������������|����������������������||�������������|����������������������|�������������|����������������������|�������������|r|�� ��������������������||������������S�dS�)zg Sets alternative version for a user @param user: string @return: None rl����/zphp.iniFz.etcz%s.etcT�.inirU����r@���N)!rF���r���r[���r\���r���r���r^���rq���r���r����r_����NoSuchAlternativeVersion�_remove_alternatives_linksr���r���rb���rc���rV���r���rv���r����NATIVE_PATH�existsre����listdir�endswithr���r#���rD����_switch_php_da_isp�_reload_processes�_backup_settings�get_summary)r$���r&���r?���r����rj���r@���r(���rk���rX���r'���rR����native_path�ini�new_ini_created�new_ini_path�src�dst�filenamer���s��� r*���r����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�*=�>�>�>� ?�� ?rJ���c������������������6����|�����������������������|�������������|������������������������������������}|����������������������|������������}ddddd�i}t����������|�����������������������������������������������}|���������������������d�������������|����������������������|������������d���������}|D�]O}||vri�||<���|�j�����������������������������|�j ���������|��d�������������||���������d<���d||���������d<���d||���������d <����P �|�j��������� ��������������������d |�j ��������������������} n##�t����������j��������t����������j ��������f$�r�d} Y�nw�xY�w �d|| ���������d<���d||���������d <���n"#�t����������$�r�t����������j��������| �������������w�xY�w|���������������������d������������||d���������<���|���������������������d�������������|���������������������|d����������������������t'����������t)����������|������������������������D�]8} || ���������}|||���������d���������||���������d���������||���������d ���������ff|| <����9t+����������|������������S�)zb Returns state of alternatives @param user: string @return: tuple rl���TF)�enabledr2����selectedr����stater����r2���r����r|���)r[���r_���r]����sortedrh���r7���rn���r~���� has_optionrV���r���r�����NoSectionError� NoOptionErrorr=���r���r�����pop�remove�range�len�tuple)r$���r&���rj���rX����native_info�summary�alt_versions�selected_versionr?����default_version�idx�vs��� r*���r����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/}t����������j��������ddt����������|������������d��������������Y�d}~�Pd}~ww�xY�w|����������������������|�������������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����r+���)r$����new_version�current_versionr%���r&���r)���s��� r*����change_to_versionzClUserSelect.change_to_version>��s������������0�0���� �� �D� �� � ��{�E� �J�J�J�J���� �� �� ��"�6�g�#�a�&�&�+Q�+Q�R�R�R���������� ����� ���u�%�%�%�%�%s����4� A-�%A(�(A-c������������������F�����|�������������������������������������}||v�r||���������S�g�S�)z8 Returns users of a certain alternative )�get_version_user_map)r$���r?���rU���s��� r*���r����zClUserSelect.list_usersM��s-��������(�(�*�*���d�?�?���=� �� rJ���c�����������������������|�j���������rddlm}��|��������������gS�t����������|���������������������������������������������������������|������������������������������������������������������������S�)zF Returns all valid system users @return: list r���)�get_cpanel_user)rF����clselectctlphpr����rf����_get_system_users� difference�_get_user_excludes)r$���r����s��� r*����list_all_userszClUserSelect.list_all_usersV��sq������ ���� '�7�7�7�7�7�7�#�O�%�%�&�&��D�*�*�,�,�7�7��#�#�%�%�'��'��(��(�� (rJ���c������������������ ����t������������������������}d|d<���d|d<���d|d<���d}t����������j�����������������������������|������������� �dd�l}n3#�t ����������$�r&�t ����������d�������������t����������j��������d�������������Y�nw�xY�wt����������j��������� ��������������������|j ��������|���������������������|������������|d������������}t����������j�����������������������������|d z���������������r"t����������j�����������������������������|d z���������������s|� ��������������������||�������������d�S�d�S�)Nr����init�reinit�verboser-���r1���r����etcz/cl.selectorz /cl.php.d)�dictr6���r���r7���r8���r9���r:���r;���r���r����BASEDIR�get_user_prefixr�����cpetc_for_user)r$���r&����config�LIBDIRr8����cagefs_etc_paths��� r*����cagefs_copy_etczClUserSelect.cagefs_copy_etca��s�����������v����x����y��$���������� ��������� �� �� ��0�1�1�1��H�Q�K�K�K�K�K� ������'�,�,�y�'8�)�:S�:S�TX�:Y�:Y�[_�af�g�g���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���������||<����##�t����������j��������$�r�Y��4w�xY�w|S�)zH Returns user version map as dict @return: dict Fr���)r����rn���r���� NotCageFSUser)r$����actual_usersrU���r&���s��� r*���rG���z!ClUserSelect.get_user_version_mapt��sv������ ��*�*�,�,���� �� �� �D� �!�-�-�d�E�:�:�1�=��T� � ��!�/�� �� �� ��� �����s����<�A� Ac������������������������|p|�������������������������������������}i�}|D�]X} �|����������������������|d������������d���������}||vrg�||<���||������������������������������|��������������D#�t����������j��������$�r�Y��Uw�xY�w|S�)zH Returns users grouped by version @return: dict Fr���)r����rn���r7���r���r����)r$���� user_namesr����rU���r&���r?���s��� r*���r����z!ClUserSelect.get_version_user_map���s������� �"�:�T�%8�%8�%:�%:���� �� �� �D� ��*�*�4��7�7��:���$���$&�D��M��W� �$�$�T�*�*�*�*��!�/�� �� �� ��� �����s����A�A�A1�0A1c����������� ����������� �|rbt�����������j�����������������������������|������������r/t����������j��������|������������|�k����rt����������j��������|�������������ndS�t����������j��������|�������������t����������j��������|�|�������������dS�#�t����������$�r=}|�|�t����������j��������|||�������������t����������j��������d|��d|�d|�d��������������d}~ww�xY�w)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���r`���ra����unlinkr����remove_file_or_dirr����symlinkr����r����UnableToSetAlternative�SelectorException)r����r����r&���r?���rs���r)���s��� r*���rv���zClUserSelect._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�����������������������|�j���������r|�j���������S�t����������j�����������������������������|�j��������������������st������������������������S�t����������j��������|�j��������������������D�]�}t����������j�����������������������������|�j��������|������������}|�j������������������������������t����������t����������d��t����������j��������|��������������������������������������������������������������������������������������|�j���������S�)zE Returns list of user excludes @return: list c������������������*�����|�������������������������������������S�rM���)�strip)�xs��� r*���rZ���z1ClUserSelect._get_user_excludes.<locals>.<lambda>���s������1�7�7�9�9��rJ���) rP���r���r���r^����CAGEFS_EXCLUDErO���r����r����update�mapr����read_file_as_string� splitlines)r$���rR����full_item_paths��� r*���r����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���"�"rJ���c����������������������|�j���������rdS�d}t����������j�����������������������������|������������� �ddl}n3#�t ����������$�r&�t ����������d�������������t����������j��������d�������������Y�nw�xY�w �|���������������������|������������st����������j ��������|�������������dS�#�t����������$�r'�t ����������d�������������t����������j��������d�������������Y�dS�w�xY�w)z4 Check that cagefs enabled for user Nr-���r���r1���r���z;ERROR: CageFS version is unsupported. Please update CageFS.)rF���r6���r���r7���r8���r9���r:���r;����is_user_enabledr���r�����AttributeError)r$���r&���r����r8���s��� r*���r[���z"ClUserSelect._check_user_in_cagefs���s����������� ��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!����1��-A!� A!�%)B��-C��Cc������������������������t����������j��������|������������D�]`}|�j��������|vr�t�����������j�����������������������������||������������}t�����������j�����������������������������|������������s�Lt����������j��������|��������������adS�)zg Removes all symlinks from directory @param path: string @return: None N)r���r����rV���r���r���r`���r����)r$���r���r����rm���s��� r*���r����z'ClUserSelect._remove_alternatives_links���sx�������� �4�(�(�� !�� !�H��z��)�)������T�8�4�4�I��7�>�>�)�,�,�� ���I�i� � � � � !�� !rJ���c�����������������������|�j���������r|�j�����������������������������|������������}|dz���S�t����������|�j�����������������������������|������������������������}t ����������j�����������������������������|�j��������|dd����������|dd������������S�)zz Composes and returns user alternative directory path @param user: string @return: string z /.cl.selector���Nr����zcl.selector) rF���r���rt���r����r����r���r���r����CAGEFS_PATH)r$���r&���rw����uids��� r*���r\���z#ClUserSelect._compose_user_alt_path���s}���������� -��k�-�-�d�3�3�G��_�,�,��$�+�%�%�d�+�+�,�,���w�|�|���c�"�#�#�h��e�]�D��D�� DrJ���c������������������v�����|�j��������������������������������������������}t����������|�����������������������������������������������S�)zB Returns set of system users @return: set )r���� get_user_dictrO���rh���)r$���� users_dicts��� r*���r����zClUserSelect._get_system_users���s/������ ��[�.�.�0�0� ��:�?�?�$�$�%�%�%rJ���c�����������������������t�����������j�����������������������������|�������������r: �t����������j��������|��������������dS�#�t����������$�r�t����������j��������|�d�������������w�xY�wdS�)z? Deletes file to be written if it is a symlink z'Cannot delete symlink while saving dataN)r���r���r`���r����r!���r���r"���)� file_paths��� r*����_delete_if_symlinkzClUserSelect._delete_if_symlink���su��������7�>�>�)�$�$�� ?� ?�� �)�$�$�$�$�$���� ?�� ?�� ?�$�5��=�?��?��?� ?���� ?�� ?s ����7�� Ac����������������������|�j������������������������������|������������}|j��������}|j��������}t ����������j����������������������}t ����������j����������������������}||k����r||fS� �t ����������j��������|�������������t ����������j��������|�������������t����������j �����������������������||fS�#�t����������$�r}t����������j ��������||�������������d}~ww�xY�w)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_egidr)���s��� r*���r���zClUserSelect._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����|�d���������t����������j����������������������k����r�t����������j��������d�������������� �t����������j��������|�d����������������������t����������j��������|�d����������������������dS�#�t����������$�r-}t����������j��������t����������|�d���������������������|�������������d}~ww�xY�wdS�)zw Restores changed uid and gid to original ones @param uid_and_gid: tuple @return: None r���T)�clearr���N) r���r>���r��r ��r��r��r!���r���r ��r����)�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!t�����������j�����������������������������|������������sdS�|����������������������|�������������|����������������������|������������}t�����������j�����������������������������|������������} �dt ����������t����������j����������������������������������z��}t�����������j��������� ��������������������||������������}t����������j��������||�d�������������� �t����������t����������z��t����������z��t����������z��} t����������j��������||�������������t����������j��������|| �������������n�#�t$����������$�r�Y�n�w�xY�w#�t&����������t$����������t(����������f$�rp} �t�����������j�����������������������������|������������rt����������j��������|�������������n#��Y�nxY�wt,�������������������������������|�������������t1����������j��������|| �������������d} ~ ww�xY�wt,�������������������������������|�������������dS�)z� Saves data to file @param user: string @param file_contents: string @param file_path: string @return: None Nzclseltmp_%s� )r���r���r����r��r���rd���r�����uuid�uuid4r���r���r ���r���r���r ���r ����rename�chmodr!���r����r���r����r���r#���r���r"���)r$���r&���� file_contentsr����creater(����file_directoryrd���� temp_path�maskr)���s��� r*����_write_to_filezClUserSelect._write_to_file'��s��������� �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���� �t����������j����������������������}t����������d������������D�]8}|�����������������������������������}|� |�j�����������������������������|j����������������������8�n#�t�����������j��������$�r�Y�nw�xY�w �t������������������������� ��������������������|������������}n#�t����������j ��������f$�r�Y�dS�w�xY�w �t����������j����������������������D�]�} �||�����������������������������������j ��������|�����������������������������������j��������fvs0|��������������������������������������������������������|�j��������������������dk����r�h|j��������}n#�t�����������j��������$�r�Y���w�xY�w �||�j��������vrt%����������j��������|t(����������j�����������������������#�t,����������f$�r�Y���w�xY�wdS�#�t,����������t.����������f$�r�Y�dS�w�xY�w)z& Reloads user process ����N���)�psutil�Processr�����parentrQ���r7����pid� NoSuchProcessr���r�����NoSuchUserException�process_iter�uids�real� effective�name�findrV���r����kill�signal�SIGHUPr!���r����)r$���r&����next_parentrW���r�����procr%��s��� r*���r����zClUserSelect._reload_processesJ��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����{��������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$�r�Y�nw�xY�w|S�)zH Get extension names from user extensions file comments z;---����z---)�openr<����rfindr7����closer!���r����)r���� extensionsr�����line�exts��� r*����_skim_over_extensionsz"ClUserSelect._skim_over_extensionsn��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�}|����������������������|������������}t����������j�����������������������������t����������j�����������������������������|������������d������������}|������������������������������������}t����������j�����������������������������|�j�����������������������������|������������d������������}t����������j��������� ��������������������|������������s�|�� ��������������������|������������} �t����������j��������|�������������nH#�t����������t����������f$�r4}t�������������������������������|�������������t#����������j��������||�������������d}~ww�xY�wt�������������������������������|�������������t����������j�����������������������������|d������������} t����������j��������� ��������������������|������������r(d|�j���������d|����������������������|������������d����������d�} nd|�j���������d �} |���������������������| �������������t-����������|�����������������������������������������������D�]�}|�j��������r |d z���|���������������������dd������������z���d z���}n8t����������j�����������������������������|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 = r���r��z = native z/alt_php�.��r����zalt-phpzalt_php.ini�[z] modules = �,)r[���r\���r���r���r���rd���r_���r���rt���r^���r���r���rp���r!���r���r���r#���r���r"���rV���rn���r7���r����rh���rF����replacer;��r��)r$���r&����backup_contents� user_alt_path� user_ext_pathrX���r����r(���r)����user_backup_filer?����alt� curr_ext_pathr8��s��� r*���r����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�����������������������|�j���������rd�S�t����������j�����������������������������d�������������ddlm}�ddlm}��|||��������������|||�������������d�S�)Nr-���r���)�da_change_user_php_ini)�ispmanager_create_user_wrapper)rF���r6���r���r7���� cagefs_da_librI���cagefs_ispmanager_librJ��)r$���r&���r?���rI��rJ��s��� r*���r����zClUserSelect._switch_php_da_isp���sy��������� ��F�����+�,�,�,�� 9�8�8�8�8�8�H�H�H�H�H�H���t�W�-�-�-�&�&�t�W�5�5�5�5�5rJ���rM���)TT)rK���N)F)FFT)NNF)T))�__name__� __module__�__qualname__r����r����re���r����ru���r+����staticmethodrD���rI���rN���rn���rq���rz���r����r����r����r����r����r����r����r����r����rG���r����rv���r����r[���r����r\���r����r��r���r#���r��r����r;��r����r������rJ���r*���r���r������s���������������K�;�K�#�M�*�N�0�M�B��B��B��B�,��&��&��&���\�&�Pp��p��p�'��'��'��'� �� �� �� �F>��>��>� $�� $�� $������ �� �� �������� 8?��8?��8?��8?�t(#��(#��(#��(#�T &�� &�� &������ (�� (�� (�3��3��3�&������������"L��L��L��L�2�#�l�?�3�3�O�#��#��#�"�����(!��!��!�D��D��D�&��&��&� ?�� ?�� ?��&��&8�9�9��F��F��F�*Y��Y��Y�� �<��-�-�L�!6��!6��!6��!6�F"��"��"�H������)�L�)>�?�?��(@��(@��(@�T 6�� 6�� 6�� 6�� 6rJ���r���)"� __future__r���r���r���r���r6���r��r/��r���future.movesr���r�����statr���r���r ���r ����future.utilsr���r"���clselectr ����clselectexceptr����clcommonr���r���� clselectprintr���r>��r����clcommon.utilsr���r���rQ��rJ���r*����<module>r[�����sk�����&��%��%��%��%��%��&��&��&��&��&��&�������������� � � � �� � � � ������� � � � �������5��5��5��5��5��5��3��3��3��3��3��3��3��3��3��3��3��3��"��"��"��"��"��"�� � � � ��������������*��*��*��*��*��*��%��%��%��%��%��%��%��%��"��"��"��"��"��"��������������0��0��0��0��0��0�U 6��U 6��U 6��U 6��U 6�8��U 6��U 6��U 6��U 6��U 6rJ���