OwlCyberSecurity - MANAGER
Edit File: clselect.cpython-311.pyc
� ����$_$h-W����������������������������d�dl�mZ�d�dl�mZ�d�dl�mZ�d�dlZd�dlZd�dlZd�dlmZ�d�dlm Z �d�dl mZ�dd l mZmZ�dd lmZ�d�dlmZ��G�d��d e������������ZdS�)�����)�absolute_import)�print_function)�divisionN)�glob)�map)�configparser����)�ClSelectExcept�BaseClSelectException)�clprint)�clcagefsc�������������������������e�Zd�Z�ej����������������������rdndZe��d�Ze��d�ZdZe��d�Z e��d�Z e��d�Zd Zd Z dZdZe ez���Zeez���Zd Ze ez���Zeez���Zed����������������Zed����������������Zd2d�Zd��Zd��Zd��Zd��Zd��Zd��Zd3d�Zd��Z d��Z!d��Z"d��Z#d3d�Z$d��Z%d4d!�Z&d"��Z'�ee'������������Z'd#��Z(�ee(������������Z(d$��Z)�ee)������������Z)d5d&�Z*d'��Z+d(��Z,d)��Z-d*��Z.d6d+�Z/d6d,�Z0d-��Z1d4d.�Z2d/��Z3d3d0�Z4d6d1�Z5d S�)7�ClSelectz/etc/cl.selector.conf.dz/etc/cl.selectorz/selector.confz /defaults.cfgz/usr/bin/phpz/native.confz /user.confz/php.extensions.d/z/usr/sbin/cagefsctlz/var/lvez/var/lve/php.dat.dz /php%s.datz/php_native_ver.datc�������������������������t����������j����������������������rd�S� �ddlm}�m}�n#�t ����������$�r�t ����������d�������������w�xY�w�|���������������s�|��������������st ����������d�������������d�S�d�S�)Nr�����!multiphp_system_default_is_ea_php�selector_modules_must_be_usedzCageFS not installed.zesystem default PHP version is alt-php. PHP Selector is disabled. Use cPanel MultiPHP manager instead.)r ���� in_cagefs�clcagefslib.selector.configurer���r����ImportErrorr���r���s��� �H/opt/cloudlinux/venv/lib64/python3.11/site-packages/clselect/clselect.py�%check_multiphp_system_default_versionz.ClSelect.check_multiphp_system_default_version/���s������������ ��F� A�w�w�w�w�w�w�w�w�w���� A�� A�� A�'�(?�@�@�@� A�����1�0�2�2�� Q�;X�;X�;Z�;Z�� Q�'���)P���Q���Q��� Q� Q�� Q�� Q�� Qs���� ��:c�������������������T�����t�����������j�����������������������������t����������j��������������������S��N)�os�path�existsr���� USER_CONF�������r����work_without_cagefszClSelect.work_without_cagefs<���s�������w�~�~�h�0�1�1�1r ����phpc�����������������������||�_���������|������������������������������������|�_��������i�|�_��������i�|�_��������t������������������������|�_��������d�|�_��������t����������� ����������������������������������|�_ ��������|�������������������������������������d�S�r���)�_item�_get_default_config_handler�_dh�_selector_contents�_native_contents�set�_hidden_extensions�_native_versionr���r!����without_cagefs�_load_config_files)�self�items��� r����__init__zClSelect.__init__@���sl�������� ��3�3�5�5���"$��� "���"%�%�%���#���&�:�:�<�<������!�!�!�!�!r ���c���������������������������fd�t����������j�������������������������������d������������������������f��fd�t����������j����������������������fg}|D�]\��}}�|��������������r�|�d�S�)Nc�������������������h������t�����������j����������������������������������������������������d������������������������S�)N�cli)r���r���r����_get_native_path�r.���s����r����<lambda>z-ClSelect.check_requirements.<locals>.<lambda>N���s#�����������t�'<�'<�U�'C�'C�D�D��r ���r3���c�������������������r������t����������j����������������������p#t����������j�������������������������������j��������������������S�r���)r ���r���r���r���r���� _CAGFSCTLr5���s����r���r6���z-ClSelect.check_requirements.<locals>.<lambda>R���s%��������*�,�,�N�����t�~�0N�0N��r ���)r ����NativeNotInstalledr4����MissingCagefsPackage)r.���� utilities� predicate�errors���` r����check_requirementszClSelect.check_requirementsJ���s���������E�D�D�D��1�$�2G�2G��2N�2N�O�O� � �O�N�N�N��3�5�5� � � ��!*�� �� ��I�u��y�{�{�� ���K� �� r ���c�����������������������t����������t����������j�����������������������������|�j��������d������������������������D�]}|����������������������|��������������d�S�)Nz*.cfg)r���r���r����join�CONFIGS_DIR�_load_config_file)r.����filenames��� r���r-���zClSelect._load_config_files\���sM�������R�W�\�\�$�*:�G�D�D�E�E�� -�� -�H��"�"�8�,�,�,�,� -�� -r ���c����������������������t����������j��������d�d�������������} �|���������������������|�������������n=#�t�����������j��������$�r+}t ����������j��������|dt ����������|������������z����������������d�}~ww�xY�w �|�j�����������������������������|� ��������������������dd������������� ��������������������d�������������������������d�S�#�t�����������j��������t�����������j��������f$�r�Y�d�S�w�xY�w)NF�� interpolation�strictzConfig is malformed, error: %s��message� extensions�hide_extensions�,) �ConfigParser�SafeConfigParser�read�Errorr ����FileProcessError�strr*����update�get�split�NoSectionError� NoOptionError)r.����filepath�dh�es��� r���rB���zClSelect._load_config_file`���s����� � *��e� L� L� L�� M��G�G�H�������!�� M�� M�� M� �1��"B�S��V�V�"K�M��M��M�� M����� M���� ��#�*�*����|�%6�7�7�=�=�c�B�B� D�� D�� D�� D�� D���+�\�-G�H�� �� �� ��D�D� ���s'����.��A(�&A#�#A(�,AB/��/C� Cc������������������,����|�������������������������������������}g�}t����������|�����������������������������������������������D�]N} �|���������������������|||���������d���������||���������d���������|�j�����������������f��������������?#�t ����������$�r�Y��Kw�xY�wt ����������|������������S�)zM Returns alternatives summary as tuple :rtype: tuple �version�data)�get_all_alternatives_data�sorted�keys�appendr$����KeyError�tuple)r.����alternatives�list_of_alternatives�alts��� r����list_alternativeszClSelect.list_alternativeso���s������� ��5�5�7�7��!���,�+�+�-�-�.�.�� �� �C� �$�+�+��!�#�&�y�1�!�#�&�v�.�t�z�:�<�=��=��=��=����� �� �� ��� �����)�*�*�*s����;A7�7 B�Bc�����������������������|�j���������s9 �|�������������������������������������n##�t����������j��������t����������j��������f$�r�i�cY�S�w�xY�w|�j���������S�)a��� Returns dict of all selector config contents. If no data loads them :return: {'4.4': {'version': '4.4.9', 'data': {'lsphp': '/opt/alt/php44/usr/bin/lsphp', 'php.ini': '/opt/alt/php44/etc/php.ini', 'php': '/opt/alt/php44/usr/bin/php-cgi', 'php-cli': '/opt/alt/php44/usr/bin/php'}}} :rtype: dict )r'����_load_alternatives_configr ����ConfigNotFound�WrongConfigFormatr5���s��� r���r^���z"ClSelect.get_all_alternatives_data����sa��������&�� � ��.�.�0�0�0�0��"�1�>�3S�T�� �� �� �� � � � �����&�&s������>�>c�����������������������|�j���������s|������������������������������������� �||�j���������|���������iS�#�t����������$�r�t����������j��������|�������������w�xY�w)z� Returns selector config contents of certain version as dict. If no data loads them @param version: string, selector version @return: dict )r'���ri���rb���r ����NoSuchAlternativeVersion�r.���r\���s��� r����get_alternatives_datazClSelect.get_alternatives_data����sj��������&�� -��*�*�,�,�,� C��T�4�W�=�>�>���� C�� C�� C� �9�'�B�B�B� C���s ����,��AFc����������������������|�������������������������������������} �|�j�����������������������������d|�j��������������������}|||���������d���������||���������d���������|�j�����������������fS�#�t����������j��������t����������f$�r�|����������������������|������������cY�S�w�xY�w)z/ Gets default selector version �versionsr\���r]���)r^���r&���rT���r$���rM���rV���rb����_compose_native_info)r.����show_native_versionrd���r\���s��� r����get_versionzClSelect.get_version����s���������5�5�7�7�� B��h�l�l�:�t�z�:�:�G���W�%�i�0��W�%�f�-�d�j�9�;�� ;����+�X�6�� B�� B�� B��,�,�-@�A�A�A�A�A� B���s����AA��+B�Bc����������������������|�������������������������������������}|����������������������||�������������|����������������������|�j��������d|�j��������|�j��������|f������������}|����������������������d���������������������|������������|�j���������������������dS�)z/ Sets default selector version )rq���� N)r^����_check_alternative�_process_ini_file� DEFAULTS_PATH�_add_or_change_optionr$����_write_to_filer@����r.���r\���rd����defaults_contentss��� r����set_versionzClSelect.set_version����s���������5�5�7�7�������6�6�6� �2�2�����&� �Z��!� #��#�� � ����I�I�'�(�(�$�*<� >�� >�� >�� >�� >r ���c����������������������|�������������������������������������}|����������������������||�������������|����������������������|�j��������|�j��������|f|�j��������d������������}|����������������������d���������������������|������������|�j���������������������dS�)z5 Removes disabled state from version �staterv���N)r^���rw���rx���ry���r$����_remove_optionr{���r@���r|���s��� r����enable_versionzClSelect.enable_version����s���������5�5�7�7�������6�6�6� �2�2��� �Z��!���� ���� � ����I�I�'�(�(�$�*<� >�� >�� >�� >�� >r ���c����������������������|�������������������������������������}|����������������������||�������������|����������������������|�j��������|�j��������|f|�j��������d������������}|����������������������d���������������������|������������|�j���������������������dS�)z- Marks a vesrion as disabled )r�����disabledrv���N)r^���rw���rx���ry���r$���rz���r{���r@���r|���s��� r����disable_versionzClSelect.disable_version����s���������5�5�7�7�������6�6�6� �2�2��� �Z��!��&�!� #��#�� � ����I�I�'�(�(�$�*<� >�� >�� >�� >�� >r ���c������������������L�����|�j������������������������������|�j���������|��d�������������S�)z� Method that allows you to check if some version is enabled in config. E.g. is_version_enabled('5.4') -> True :rtype: bool r����)r&���� has_optionr$���rn���s��� r����is_version_enabledzClSelect.is_version_enabled����s3��������8�&�&��j�j�'�'�*�G�5��5��5�� 5r ���c������������������L����|�������������������������������������}|����������������������|������������}dddd�i}t����������|�����������������������������������������������dgz���}|D�]4}||vri�||<���|����������������������|������������||���������d<���d||���������d<����5 �|�j�����������������������������d|�j��������������������}n##�t����������j ��������t����������j ��������f$�r�d}Y�nw�xY�w �d||���������d<���n"#�t����������$�r�t����������j ��������|�������������w�xY�w|���������������������d������������||d���������<���|���������������������d�������������|���������������������|d����������������������t#����������t%����������|������������������������D�]+}||���������} | || ���������d���������|| ���������d���������ff||<����,t'����������|������������S�) zl Returns state of alternatives @return: tuple[version, tuple[isEnabled, isDefault]] �nativeTF)�enabled�defaultr����r����rq���r���)r^���rr���r_���r`���r����r&���rT���r$���rM���rV���rW���rb���r ���rm����pop�removera����range�lenrc���) r.���rs���rd����native_info�summary�alt_versionsr\����default_version�idx�vs ��� r����get_summaryzClSelect.get_summary����s������ ��5�5�7�7���/�/�0C�D�D����%�@�@�A���l�/�/�1�1�2�2�h�Z�?��#�� 0�� 0�G��g�%�%�#%��� �*.�*A�*A�'�*J�*J�G�G��Y�'�*/�G�G��Y�'�'� '�"�h�l�l�:�t�z�B�B�O�O���+�\�-G�H�� '�� '�� '�&�O�O�O� '���� K�26�G�O�$�Y�/�/���� K�� K�� K� �9�/�J�J�J� K����")�+�+�h�"7�"7���A������H�%�%�%����K��N�+�+�+���\�*�*�+�+�� )�� )�C��S�!�A�����I�&����I�&�(�!)�L������\�"�"�"s���� B/��/C�C�C��C>c������������������Z���� �t����������|�j��������������������}|D�]�}|�����������������������������������}|dk����r�|�����������������������������������\��}}}}|�j��������|vr�@||�j��������vr i�|�j��������|<���||�j��������|���������d<���d|�j��������|���������vri�|�j��������|���������d<���||�j��������|���������d���������|<�����|�j��������st ����������j��������dd��������������dS�#�t����������t����������f$�r'}t ����������j��������d|�j���������d|�d �d��������������d}~wt����������$�r�t ����������j��������|�j���������������������w�xY�w) a�� Parses selector config file and fills an instance config dict. Example: {'4.4': {'version': '4.4.9', 'data': {'lsphp': '/opt/alt/php44/usr/bin/lsphp', 'php.ini': '/opt/alt/php44/etc/php.ini', 'php': '/opt/alt/php44/usr/bin/php-cgi', 'php-cli': '/opt/alt/php44/usr/bin/php'}}} :raises ClSelectExcept.ConfigNotFound: :raises ClSelectExcept.WrongConfigFormat: ��r\���r]���Nzalt-php packages not foundrH���zCannot read z: z . Native used)�open�CONFIG_PATH�striprU���r$���r'���r ���rj����OSError�IOError� ValueErrorrk���) r.����f�line� stripped_liner/���� short_version�long_version� item_pathrZ���s ��� r���ri���z"ClSelect._load_alternatives_config��s������ E��T�%�&�&�A��� Q�� Q�� $� � ��� � �B�&�&��!.�!4�!4�!6�!6���}�l���:�T�)�)�� ��(?�?�?�=?�D�+�M�:�DP��'� �6�y�A���!8��!G�G�G�EG�D�+�M�:�6�B�GP��'� �6�v�>�t�D�D��*�� <�$�3�D�:�<��<��<��<� <�� <�����!�� 8�� 8�� 8� �/�/�59�5E�5E�5E�q�q�q�I�6�8��8��8�� 8�������� E�� E�� E� �2�4�3C�D�D�D� E���s����CC��D*�!"D�'D*Nc�����������������������t����������j���������dd�������������}t����������|_��������|r|���������������������|�������������n|���������������������|�j���������������������|S�)z: Gets ConfigParser handler for future use NFrE���)rM���rR����optionxformrO���ry���)r.���r���rY���s��� r���r%���z$ClSelect._get_default_config_handler'��sS�������� &�T�%� H� H� H������� (��G�G�D�M�M�M�M��G�G�D�&�'�'�'�� r ���c������������������F�����|�dk����r|�|vrt����������j��������|��������������d�S�d�S�)Nr����)r ���rm���)r\���rd���s��� r���rw���zClSelect._check_alternative3��s6�������h���7�,�#>�#>� �9�'�B�B�B����#>�#>r ���c������������������^�����dd����������������������dgt����������|�������������z��������������z��}||�z��S�)z� Gets section header data tuple and returns ini section header string @param section_info: tuple @return: string z[%s]r����z%s)r@���r����)�section_info�section_fmts��� r����_make_section_headerzClSelect._make_section_header8��s4��������r�w�w��v��L�0A�0A�'A�B�B�B���\�)�)r ���c�����������������������t����������t����������d��|�������������������������}�|�r|�d���������dk����r|����������������������d�������������|�S�)zN Removes empty lines from list and appends newline if missing c�����������������������|�dk����S�)Nr����r���)�is��� r���r6���z'ClSelect._smooth_data.<locals>.<lambda>F��s ������a�2�g��r ������rv���)�list�filterra���)r]���s��� r����_smooth_datazClSelect._smooth_dataB��sL��������F�-�-��5�5�6�6���� �t�B�x�4�'�'��K�K������r ���Tc����������� �������f����g�}g�}g�} d} d}d}|�����������������������|������������} �t����������|������������}|D�]�}|�����������������������������������}|���������������������d������������r_d} d|v�rd}| |k����rd}t ����������|������������dk����r|���������������������|�������������g�}|����������������������||| ||�������������������������|g} ��| r| ���������������������|���������������|���������������������|���������������|����������������������||| ||�������������������������|������������������������������������n#�t����������t����������f$�r�Y�nw�xY�w|s(d| vr$dd|�j ��������z��dg}|���������������������|�������������|}|s� �|����������������������d������������}n#�t����������j ��������$�r�Y�nw�xY�w|d k����r:|����������������������||| d d���������������������|������������z���g||�������������������������n`|dk����r8|���������������������|�������������|����������������������||| g||�������������������������n"|����������������������||| g||�������������������������|S�) z� Parses ini file by sections, calls supplied callable to modify section is question, returns file as list of strings F�[Tz [versions]r���z%s = nativer����r�����disable_extentionsz modules = rL����enable_extentions)r����r����r����� startswithr�����extendra����closer����r����r$���� _get_builtinsr ����UnableToGetExtensionsr@���)r.���r���r�����functionr]����trace�action�contents�no_section_contents�section� in_section�found�has_default�section_headerr����r����r�����build_ins��� r���rx���zClSelect._process_ini_fileL��s��������� ����� ������2�2�<�@�@�� ��T� � �A��� 5�� 5���z�z�|�|���?�?�3�'�'���!%�J�#�t�+�+�&*��%��-�-� $���.�/�/�1�4�4� ���(;�<�<�<�.0�+��O�O�H�H�\�7�D�%�$P�$P�Q�Q�Q�#�f�G����5��N�N�4�(�(�(�(�'�.�.�t�4�4�4�4��O�O�H�H�\�7�D�%�H�H�I�I�I� �G�G�I�I�I�I����!�� �� �� ��D� ������ �|�>�A�A�#�]�T�Z�%?��D�G��N�N�8�$�$�$��H��� W� ��-�-�h�7�7����!�7�� �� �� ��� �����-�-�-���������WZ�W_�W_�`h�Wi�Wi�Hi�7j�lp�rw� x� x�y�y�y�y��.�.�.����H�%�%�%��������7G��u� U� U�V�V�V�V��������7G��u� U� U�V�V�V��s$����C>D"��"D6�5D6�&E<��<F� Fc�����������������������d|�j���������z��}|������������������������������������} �||���������d���������|���������}n&#�t����������$�r�|����������������������d�������������}Y�nw�xY�w|S�)z� Retrives path to php binary for supplied version :param version: php version to retrive path :return: path to php binary. If alternative version not found native php binary path returned z%s-clir]���r3���)�suffix)r$���r^���rb���r4���)r.���r\���r/���rd���r���s��� r����_get_php_binary_pathzClSelect._get_php_binary_path���sv��������$�*�$���5�5�7�7�� 7���(��0��6�D�D���� 7�� 7�� 7��(�(��(�6�6�D�D�D� 7�����s����5�� A�Ac�����������������������|�������������������������������������}d|����������������������d������������i}|�����������������������������������D�]}|����������������������|������������||<����|S�)a�� Retrives paths to php binary for all versions :return: Dictionary version -> path. Example: { '5.2': '/opt/alt/php52/usr/bin/php', '5.3': '/opt/alt/php53/usr/bin/php', 'native': '/usr/bin/php' } r����)r^���r����r`���)r.���rd���� paths_dictr\���s��� r����get_all_php_binaries_pathsz#ClSelect.get_all_php_binaries_paths���sk��������5�5�7�7���� 9� 9�(� C� C�D� �#�(�(�*�*�� E�� E�G�"&�";�";�G�"D�"D�J�w����r ���c������������������������t����������j����������������������r |�j��������|z��n |�j��������|z��}t ����������|d������������5�}|�����������������������������������cddd�������������S�#�1�swxY�w�Y���dS�)z� Retrives contents of cache file for supplied php version :param version: PHP version to read file :return: file contents �rN)r ���r����CACHEFILE_CAGEFS_PATTERN�CACHEFILE_PATTERNr����rO���)r.���r\���rC���r����s��� r����_read_php_cache_filezClSelect._read_php_cache_file���s��������?G�>P�>R�>R�x�4�0�7�:�:�X\�Xn�qx�Xx�� �(�C� � �� �A��6�6�8�8� �� �� �� �� �� �� �� �� �� �� �� ����� �� �� �� �� �� s����A�A� Ac������������������d����g�} �|�����������������������|������������}n)#�t����������t����������f$�r�t����������j��������|�������������w�xY�wd\��}}|���������������������|������������|���������������������|������������}}|dk����rdn|t ����������|������������z���}|||����������}t����������j��������d������������} |� ��������������������d������������D�]p} | � ��������������������| ������������s�d���������������������t����������j ��������d| �����������������������������������������������������������}||�j ��������vr|���������������������|��������������q|S�)z� Gets php extensions from the /var/lve/phpX.X.dat cache file, which contains list of modules that are either compiled-in or enabled in /opt/alt/phpXX/etc/php.ini config file )z [PHP Modules]z[Zendr����r���z\wrv����_z\s+)r����r����r����r ���r�����findr�����re�compilerU����matchr@����lowerr*���ra���)r.���r\����builtins�output� start_pattern�end_pattern�start_index� end_index�modules_list�module_pattern�ext�modules��� r���r����zClSelect._get_builtins���sE�������� @��.�.�w�7�7�F�F����!�� @�� @�� @� �6�w�?�?�?� @���� �&>�"� �{�!'���]�!;�!;�V�[�[��=U�=U�Y��&�"�,�,�a�a�+��M�@R�@R�2R���k�)�3�4����E�*�*���%�%�d�+�+�� (�� (�C�!�'�'��,�,�� ���X�X�b�h�u�c�i�i�k�k�:�:�;�;�F��T�4�4�4�����'�'�'���s ������&A�c�������������������������|�����������������������|������������}t����������|������������dk����s||d���������k����r|S�|����������������������t����������t �����������fd�|������������������������������������S�)z� Adds 'modules' option to section or extends it @param section_info: tuple (item and version) @param section: list @param data: string @return: list r���c������������������0������|�������������������������������������S�r���)r����)r����r]���s��� �r���r6���z)ClSelect._remove_option.<locals>.<lambda>���s�������q�|�|�D�'9�'9�#9��r ���)r����r����r����r����r����)r.���r����r����r]���r����r����s��� ` r���r����zClSelect._remove_option���sv���������2�2�<�@�@���w�<�<�1����'�!�*� <� <��N�� � ���9�9�9�9�G�D�D�E�E�G��G�� Gr ���c������������������h����|�����������������������|������������}t����������|������������dk����s||d���������k����r|S�d}t����������t����������|������������������������D�]'}||������������������������������|d���������������������r|}�n�(d|z��}|r|||<���n|���������������������|�������������|����������������������|������������S�)z� Adds 'modules' option to section or extends it @param section_info: tuple @param section: list @param data: tuple @return: list r���Nz%s = %s)r����r����r����r����ra���r����) r.���r����r����r]���r����r�����oidxr�����options ��� r���rz���zClSelect._add_or_change_option���s���������2�2�<�@�@���w�<�<�1����'�!�*� <� <��N�����W���&�&�� �� �C��s�|�&�&�t�A�w�/�/�� ����� ���T�!���� #�"�G�D�M�M��N�N�6�"�"�"�� � ��)�)�)r ���c������������������������ �t����������|d������������}|���������������������d|z���������������|������������������������������������dS�#�t����������t����������f$�r}t����������j��������||�������������d}~ww�xY�w)z$ Saves data to file �wz%s N)r�����writer����r����r����r ����UnableToSaveData)r.���� file_contents� file_pathr����rZ���s��� r���r{���zClSelect._write_to_file���sz������ @��Y��$�$�A� �G�G�F�]�*�+�+�+� �G�G�I�I�I�I�I����!�� @�� @�� @� �1�)�Q�?�?�?����� @���s����<A����A+�A&�&A+c������������������\����dddd�}|�j���������}|r||v�r|�j����������||�����������}|�j��������s|����������������������|�j����������������������||�j��������v�rM|�j��������|���������}t����������j�����������������������������|������������r!t����������j�����������������������������|������������s|S�|�j��������|�j������������������S�)z5 Returns path for native interpreter z-cliz.iniz-fpm)r3����ini�fpm)r$���r(����_load_native_contentsr���r����isfile�islink)r.���r�����suffixesr/���r���s��� r���r4���zClSelect._get_native_path���s������� ����������z���� ;�f��(�(�!�Z�Z��&�)9�)9�:�D��$�� 3��&�&�t�z�2�2�2��4�(�(�(��(��.�D��w�~�~�d�#�#�� �B�G�N�N�4�,@�,@�� ����$�T�Z�0�0r ���c����������� ����������� �t����������|�j��������������������}|D�]`}|���������������������d������������r�||vr�d|vr�"t����������t ����������d��|���������������������d������������������������������������\��}}||�j��������|<����a||�j��������vr|�j��������|�j��������|<���|������������������������������������dS�#�t����������t����������f$�r�|�j��������|�j��������|<���Y�dS�w�xY�w)z� Parses native.conf file and loads it as dict, for example: {'php-fpm': '/usr/local/sbin/php-fpm', 'php.ini': '/usr/local/lib/php.ini', 'php': '/usr/bin/php', 'php-cli': '/usr/bin/php'} �#�=c������������������*�����|�������������������������������������S�r���)r����)�xs��� r���r6���z0ClSelect._load_native_contents.<locals>.<lambda>��s������������r ���N)r�����NATIVE_CONFr����r����r���rU���r(����DEFAULT_PHP_PATHr����r����r����)r.����valuer����r����r/���r���s��� r���r����zClSelect._load_native_contents ��s������� A��T�%�&�&�A��� 3�� 3���?�?�3�'�'������$�$���d�?�?��!�#�':�':�T�Z�Z��_�_�"M�"M�N�N� ��d�.2��%�d�+�+��D�1�1�1�/3�/D��%�e�,� �G�G�I�I�I�I�I����!�� A�� A�� A�+/�+@�D�!�%�(�(�(�(� A���s����B#B'��' C� Cc������������������������|sdd|�������������������������������������fS�|����������������������d�������������}|r+d|d����������d�d|d����������d�|�������������������������������������fS�dd|�������������������������������������fS�)Nr����F)�verboseznative (r����)r ���)r4����get_native_version)r.����show_version�native_versions��� r���rr���zClSelect._compose_native_info ��s��������� ?��X�t�'<�'<�'>�'>�>�>��0�0��0�?�?���� -�� -�%3�A�%6�%6�%6�8�8�%3�A�%6�%6�%6�8��)�)�+�+�-�� -����4�#8�#8�#:�#:�:�:r ���c������������������"����|�j���������r|�j���������S�t����������j��������d������������} �t����������|�j��������d������������}|�����������������������������������}|������������������������������������nF#�t����������t����������f$�r2}|r%t����������j ��������ddt����������|������������d��������������Y�d�}~d�S�d�}~ww�xY�w|�����������������������������������D�]R}|� ��������������������|������������}|r9|���������������������d������������|���������������������d������������} }|| f|�_���������|| fc�S��Sd�S�)Nz(PHP\s+(?P<full>(?P<short>\d+\.\d+)\.\d+)r�����text�ERROR)�statusrI����short�full)r+���r����r����r�����CACHEFILE_NATIVE_VER_PATTERNrO���r����r����r����r���� print_diagrR���� splitlinesr�����group) r.���r�����version_patternr����r]���rZ���r�����mr��r ��s ��� r���r��zClSelect.get_native_version*��s1�������� (��'�'��*�%P�Q�Q�� ��T�6��<�<�A��6�6�8�8�D� �G�G�I�I�I�I����!�� �� �� ��� S��"�6�g�#�a�&�&�+Q�+Q�R�R�R��4�4�4�4�4����� ������O�O�%�%�� #�� #�D��%�%�d�+�+�A��� #��g�g�g�.�.�������t��(-�t�}��$��d�{�"�"�"� #���ts����=A"��"B%�3'B � B%)r"���)Fr���)TN)T)6�__name__� __module__�__qualname__r ���r����BASE_ETC_CL_SELECTORr����ry���r����r����r���rA���r8���� CACHEFILE_DIR�CACHEFILE_CAGEFS_DIR�CACHEFILE_PHP_PATTERNr����r�����CACHEFILE_PHP_NATIVE_PATTERNr ���#CACHEFILE_NATIVE_VER_CAGEFS_PATTERN�staticmethodr���r!���r0���r>���r-���rB���rg���r^���ro���rt���r~���r����r����r����r����ri���r%���rw���r����r����rx���r����r����r����r����r����rz���r{���r4���r����rr���r��r���r ���r���r���r������sG�������������8J��8J�8L�8L�d�4�4�Rd��)�9�9�9�K�+�:�:�:�M�%��)�7�7�7�K�'�3�3�3�I�)�=�=�=�K�%�I���M�/��(��%�(=�=��3�6K�K��#8� �#0�3O�#O� �*>�A]�*]�'�� Q�� Q���\� Q���2��2���\�2�"��"��"��"������$-��-��-� �� �� �+��+��+�$'��'��'�$C��C��C�B��B��B��B�>��>��>�>��>��>�>��>��>�5��5��5�#��#��#��#�B"E��"E��"E�H �� �� �� �C��C��C��&��&8�9�9��*��*��*��(�<�(<�=�=�������� �<��-�-�L�5��5��5��5�n����� �� �� �����������:G��G��G��G�*��*��*��*�. @�� @�� @�1��1��1��1�&A��A��A�,;��;��;��;�����������r ���r���)� __future__r���r���r���r���r�����sysr���r����r����future.movesr���rM����clselectexceptr ���r���� clselectprintr����clcommonr ����objectr���r���r ���r����<module>r!�����s�����'��&��&��&��&��&��%��%��%��%��%��%�������������� � � � �� � � � �� � � � ��������������������������5��5��5��5��5��5��A��A��A��A��A��A��A��A��"��"��"��"��"��"�������������d��d��d��d��d�v��d��d��d��d��dr ���