HEX
Server: LiteSpeed
System: Linux s787.bom1.mysecurecloudhost.com 4.18.0-477.13.1.lve.el8.x86_64 #1 SMP Thu Jun 1 16:40:47 EDT 2023 x86_64
User: mobilech (5348)
PHP: 8.1.34
Disabled: NONE
Upload Files
File: //opt/cloudlinux/venv/lib64/python3.11/site-packages/clcagefslib/__pycache__/domain.cpython-311.pyc
�

�9Vj*g��~�ddlZddlZddlZddlZddlZddlZddlmZddlm	Z	ddl
mZddlm
Z
mZddlmZmZddlmZddlmZdd	lmZdd
lmZddlmZdd
lmZddlmZm Z m!Z!m"Z"ddl#m$Z$ddl%m&Z&m'Z'ddl(m)Z)ddl*m+Z+ddl,m-Z-m.Z.ddl/m0Z0m1Z1d�Z2d�Z3de4dzfd�Z5de4de6fd�Z7d�Z8dZ9dZ:dgZ;dd d!�Z<d"�Z=d#�Z>d$�Z?de4fd%�Z@d&ZAejBd�'��d(���ZCd)�ZDd*�ZEd+�ZFd,�ZGd-�ZHd.�ZId/�ZJd0e4fd1�ZKd0e4fd2�ZLd0e4fd3�ZMd4�ZNd5e4fd6�ZOd7�ZPdeQfd8�ZRde4fd9�ZSdeQfd:�ZTd;�ZUd<�ZVd>de4d5e4dzfd=�ZWdS)?�N)�defaultdict)�Path)�ClPwd)�setup_mount_dir_cagefs�CAGEFSCTL_TOOL)�cpusers�is_panel_feature_supported)�docroot)�Feature)�NoDomain)�PyLve�)�user_exists)�UserNotFoundError)�admin_config�config�
jail_utils�	litespeed)�DOCROOTS_ISOLATED_BASE)�validate_docroot�validate_docroot_no_symlinks)�write_jail_mounts_config)�reload_processes_with_docroots)�start_monitoring_service�stop_monitoring_service)�trigger_xray_ini_regeneration�trigger_ssa_ini_regenerationc�T�tj�tj��S�N)�os�path�isfiler�WEBSITE_ISOLATION_MARKER���Fopt/cloudlinux/venv/lib/python3.11/site-packages/clcagefslib/domain.py�(is_website_isolation_allowed_server_wider''s��
�7�>�>�,�?�@�@�@r%c�T�tj�tj��Sr)r r!r"r�"WEBSITE_ISOLATION_AVAILABLE_MARKERr$r%r&�&is_website_isolation_feature_availabler*+s��
�7�>�>�,�I�J�J�Jr%�returnc�.�tj�tj��}tj�tj��}|r8|r6t
jd��tj	tjd���dS|rdS|rdSdS)uReturn the current user mode for website isolation.

    Returns:
        ``"allow_all"`` – all users allowed, denied dir lists exceptions.
        ``"deny_all"``  – no users allowed, allowed dir lists exceptions.
        ``None``        – not initialised yet.
    z�Both site-isolation.users.allowed and site-isolation.users.denied directories exist. Removing allowed directory, treating as allow_all mode.T��
ignore_errors�	allow_all�deny_allN)
r r!�isdirr�ISOLATION_DENIED_DIR�ISOLATION_ALLOWED_DIR�logging�warning�shutil�rmtree)�
has_denied�has_alloweds  r&�get_isolation_user_moder:/s�������|�@�A�A�J��'�-�-�� B�C�C�K���k����
Y�	
�	
�	
�	�
�l�8��M�M�M�M��{����{����z��4r%�userc��tj�tj��sdSt��}|dkr tjtj|��S|dkrtjtj|��SdS)uCheck whether *user* is allowed to use website isolation.

    Combines the global marker with the two-mode user model:
    * **allow_all** – allowed unless the user is in the denied directory.
    * **deny_all**  – denied unless the user is in the allowed directory.
    Fr/r0)	r r!r"rr#r:�user_in_dirr2r3)r;�modes  r&�%is_website_isolation_allowed_for_userr?Hsw���7�>�>�,�?�@�@���u�"�$�$�D��{����+�L�,M�t�T�T�T�T��z����'��(J�D�Q�Q�Q��5r%c�j�tj�tj��s�tt
t��ddd���ttj��}|j	�
dd���|���tj
gd�dd���dSdS)	zCSet up mount directories and the global marker if not already done.�*TF)�prefix�remount_cagefs�remount_in_background)�parents�exist_ok)z/usr/bin/systemctlztry-restartzclwpos_monitoring.service)�capture_output�textN)r r!r"rr#r�strrr�parent�mkdir�touch�
subprocess�run)�marker_paths r&�"_ensure_isolation_mount_and_markerrPYs���
�7�>�>�,�?�@�@�

���&�'�'���u�	
�	
�	
�	
��<�@�A�A���� � ��� �=�=�=���������N�N�N���	
�	
�	
�	
�	
�	
�

�

r%z/etc/cagefs/proxy.commandsz<CAGEFSCTL_USER:noproceed:nolve=root:/usr/sbin/cagefsctl-userz/usr/sbin/cagefsctl-userz(/usr/share/lve-utils/lvd-registry-helperz&/usr/share/lve-utils/lvd-limits-helper)�LVD_REGISTRY_HELPER�LVD_LIMITS_HELPERc���d}|���D]S\}}||vr�
tj�|��s�*|r|�d��s|dz
}||�d|�d�z
}d}�T||fS)aKAppend missing proxy entries to *content*, return (new_content, added).

    Each entry in *entries* is a ``{KEY: path}`` dict.  An entry is added
    only when its KEY is not yet present AND the binary exists on disk.
    Returns the (possibly updated) content string and a bool indicating
    whether any entries were added.
    F�
�=T)�itemsr r!�exists�endswith)�content�entries�added�key�binarys     r&�_add_proxy_entriesr^ys���
�E��}�}�������V��'�>�>���w�~�~�f�%�%�	���	�7�+�+�D�1�1�	��t�O�G��c�&�&�F�&�&�&�&������E�>�r%c���d}|���D]e\�}�|vr�
tj�|��r�*|�d���}�fd�|D��}d�|��}d}�f||fS)z�Remove proxy entries whose binaries no longer exist on disk.

    Returns the (possibly updated) content string and a bool indicating
    whether any entries were removed.
    FT)�keependsc�D��g|]}|���d����|��S)rU)�
startswith)�.0�lr\s  �r&�
<listcomp>z)_remove_proxy_entries.<locals>.<listcomp>�s0���A�A�A�q�����i�i�i�)@�)@�A��A�A�Ar%�)rVr r!rW�
splitlines�join)rYrZ�removedr]�linesr\s     @r&�_remove_proxy_entriesrk�s�����G��}�}�������V��g����
�7�>�>�&�!�!�	���"�"�D�"�1�1��A�A�A�A�E�A�A�A���'�'�%�.�.������G��r%c��	ttdd���5}|���}ddd��n#1swxYwYn#t$rd}YnwxYwd}d|vrEt	jdt��|r|�d	��s|d	z
}|td	zz
}d
}t|t��\}}|rt	jdt��d
}t|t��\}}|rt	jdt��d
}|sdStj�
t��}tj|d
�
��tj|d���\}}	tj|dd���5}|�|��ddd��n#1swxYwYtj|t��n##t($rtj|���wxYwd	�t.��d	z���}t3jt6ddg|t2jt2jd���t3jt6dgt2jt2jd���dS)a�Register the ``cagefsctl-user`` proxyexec alias if not already present.

    Appends the ``CAGEFSCTL_USER`` entry to ``/etc/cagefs/proxy.commands``
    and runs ``cagefsctl --update-list`` to pull the required binaries into
    the CageFS skeleton.  This is a no-op when the entry already exists.

    Also registers/unregisters the LVD helper binaries
    (``lvd-registry-helper``, ``lvd-limits-helper``) depending on whether
    they are present on disk.
    �rzutf-8)�encodingNrfF�CAGEFSCTL_USERz Registering cagefsctl-user in %srTTzRegistering LVD helpers in %sz"Removing stale LVD helpers from %s)rFz.proxy.commands.)�dirrB�wz--wait-lockz
--update-list)�input�stdout�stderr�checkz--update-wrappers)rsrtru)�open�PROXY_COMMANDS_PATH�read�FileNotFoundErrorr4�inforX�CAGEFSCTL_USER_PROXY_ENTRYr^�LVD_PROXY_ENTRIESrkr r!�dirname�makedirs�tempfile�mkstemp�fdopen�write�replace�
BaseException�unlinkrh�CAGEFSCTL_USER_BINARIES�encoderMrNr�DEVNULL)	�frY�changedr[ri�	proxy_dir�fd�tmp_path�update_lists	         r&�ensure_proxyexec_commandr��s���
�%�s�W�
=�
=�
=�	���f�f�h�h�G�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	����������������G��w�&�&���7�9L�M�M�M��	�7�+�+�D�1�1�	��t�O�G��-��4�4����'��1B�C�C�N�G�U�����4�6I�J�J�J���,�W�6G�H�H��G�W�����9�;N�O�O�O����������� 3�4�4�I��K�	�D�)�)�)�)��#�	�:L�M�M�M�L�B���
�Y�r�3��
1�
1�
1�	�Q�
�G�G�G����	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�
�
�8�0�1�1�1�1������
�	�(����
������9�9�4�5�5��<�D�D�F�F�K��N�	���8���!��!�������N�	�,�-��!��!��	�����s^�A�:�A�>�A�>�A�A�A�'G�>F �G� F$�$G�'F$�(G� G&c��t��t��}|dkrNd}tjtjtjd���tjtj	d���nMd}tjtj	tjd���tjtjd���|S)uFlip the isolation user mode without modifying any per-user state.

    Unlike :func:`allow_website_isolation_server_wide` and
    :func:`deny_website_isolation_server_wide`, this function only flips
    the mode indicator directories.  It does **not** clean up existing
    user isolation or alter the per-user exception lists.

    * ``allow_all`` → ``deny_all``
    * ``deny_all``  → ``allow_all``
    * not initialised → ``allow_all``

    Returns:
        The new mode after toggling (``"allow_all"`` or ``"deny_all"``).
    r/r0T�r>rFr-)
rPr:r r~rr3�DIR_MODEr6r7r2)�current�new_modes  r&�toggle_isolation_user_moder��s���'�(�(�(�%�'�'�G��+�����
��L�6�\�=R�]a�b�b�b�b��
�l�7�t�L�L�L�L�L���
��L�5�L�<Q�\`�a�a�a�a��
�l�8��M�M�M�M��Or%zP/opt/cloudlinux/flags/available-flags.d/lvestats-supports-domain-lve-limits.flag)�maxsizec��	t��}n#ttf$rYdSwxYw|���sdS|���S)z;Check if the running kernel supports per-domain LVE limits.F)r
�AttributeError�OSError�
initialize�domains_supported)�pys r&�_domain_limits_supportedr�sb���
�W�W�����G�$�����u�u������=�=�?�?���u�
���!�!�!s��&�&c�J�tj�t��S)avWhether cagefs should auto allow/enable LVE per-domain limits (CLOS-4614).

    True once the installed lve-stats3 can chart per-domain isolation usage (it
    ships ``LVESTATS_SUPPORTS_DOMAIN_LVE_LIMITS_MARKER``). Gates only the AUTO
    *allow/enable*; the deny/disable paths stay active regardless so any LVPs
    created by an earlier build can always be torn down.
    )r r!rW�*LVESTATS_SUPPORTS_DOMAIN_LVE_LIMITS_MARKERr$r%r&�_domain_limits_auto_enabledr�s���7�>�>�D�E�E�Er%c��ttj��sdSt��sdSt	��sdStjdd|gdd���dS)z;Create LVP infrastructure for user via lvectl (idempotent).N�/usr/sbin/lvectlzallow-domain-limitsT�rurG�r	r�LVEr�r�rMrN��usernames r&�_allow_domain_limitsr�'sr��%�g�k�2�2����#�%�%����&�(�(�����N�&�(=�x�H��d�4�4�4�4�4�4r%c��ttj��sdSt��sdSt	jdd|gdd���dS)z1Tear down LVP infrastructure for user via lvectl.Nr�zdeny-domain-limitsTr��r	rr�r�rMrNr�s r&�_deny_domain_limitsr�4s_��%�g�k�2�2����#�%�%�����N�&�(<�h�G��d�4�4�4�4�4�4r%c��ttj��sdSt��sdSt	��sdStjdd|gdd���dS)z0Register domain LVE under user's LVP via lvectl.Nr�zenable-domain-limitsTr�r��r;�domains  r&�_register_domain_lver�>sr��%�g�k�2�2����#�%�%����&�(�(�����N�	�3�V�<��4������r%c��ttj��sdSt��sdSt	jdd|gdd���dS)z!Unregister domain LVE via lvectl.Nr�zdisable-domain-limitsTr�r�r�s  r&�_unregister_domain_lver�Ms_��%�g�k�2�2����#�%�%�����N�	�4�f�=��4������r%c��t��t��tjtjtjd���tjtj	d���t��D]S}t|��s�	t|���##tjtf$rt!jd|��Y�PwxYwdS)u@Switch to *allow_all* mode – all users are allowed by default.Tr�r-z5Failed to enable domain limits for user %s, skipping.N)rPr�r r~rr2r�r6r7r3rrr�rM�CalledProcessErrorr�r4�	exceptionr�s r&�#allow_website_isolation_server_wider�Ys���&�(�(�(������K��1��8M�X\�]�]�]�]�
�M�,�4�D�I�I�I�I��I�I�
�
���8�$�$�	��	� ��*�*�*�*���-�w�7�	�	�	���G��
�
�
�
�
�	����
�
s�	B�+C�Cc��t��t��D]S}t|��s�	t|���##tjtf$rtjd|��Y�PwxYwt��tjtj
tjd���tjtjd���dS)u�Switch to *deny_all* mode – no users are allowed by default.

    Disables domain isolation for every user and switches the mode.
    z6Failed to disable domain limits for user %s, skipping.Tr�r-N)�_cleanup_all_users_isolationrrr�rMr�r�r4r�rPr r~rr3r�r6r7r2r�s r&�"deny_website_isolation_server_wider�os���
!�"�"�"��I�I�
�
���8�$�$�	��	���)�)�)�)���-�w�7�	�	�	���H��
�
�
�
�
�	����'�(�(�(��K��2��9N�Y]�^�^�^�^�
�M�,�3�4�H�H�H�H�H�Hs�A�+A.�-A.r�c��t��t��t��}|dkr tjtj|��np|dkr tjtj|��nJtj	tjtj
d���tjtj|��t|��dS)u;Allow website isolation for *username* (mode-aware).

    * **allow_all** – removes *username* from the denied directory.
    * **deny_all**  – adds *username* to the allowed directory.
    * **not initialised** – sets up infrastructure in *deny_all* mode
      with *username* as the first allowed user.
    r/r0Tr�N)rPr�r:r�remove_user_from_dirr2�add_user_to_dirr3r r~r�r��r�r>s  r&� allow_website_isolation_for_userr��s���'�(�(�(�����"�$�$�D��{����)�,�*K�X�V�V�V�V�	
��	�	��$�\�%G��R�R�R�R�	��L�6�\�=R�]a�b�b�b�b��$�\�%G��R�R�R���"�"�"�"�"r%c���t��}|dkr tjtj|��n%|dkrtjtj|��t
|��t|��dS)u�Deny website isolation for *username* (mode-aware).

    * **allow_all** – adds *username* to the denied directory.
    * **deny_all**  – removes *username* from the allowed directory.

    Also disables all domain isolation for the user.
    r/r0N)r:rr�r2r�r3�_cleanup_user_isolationr�r�s  r&�deny_website_isolation_for_userr��sx��#�$�$�D��{����$�\�%F��Q�Q�Q�Q�	
��	�	��)�,�*L�h�W�W�W��H�%�%�%���!�!�!�!�!r%c�6�t|��sdStj|��}|jsdSd�|jD��}tj|d���t|d���	t
j|��n%#t$rtj
d|��YnwxYwt|t|�
�������|���D]2\}}|�tjd|���t!j||���3dS)z4Remove all domain isolation state for a single user.Nc�.�i|]}|t|����Sr$��_get_docroot_or_none�rc�ds  r&�
<dictcomp>z+_cleanup_user_isolation.<locals>.<dictcomp>�s0�����'(����"�"���r%)r)�user_configz8Failed to remove LiteSpeed dedicated PHP handlers for %s��filter_by_docrootsz|Unable to detect document root for domain %s, configuration cleanup failed. Contact CloudLinux support if the error repeats.)rr�load_user_config�enabled_websites�save_user_configrr�!remove_all_dedicated_php_handlers�	Exceptionr4r�r�list�valuesrV�errorr�remove_website_token_directory)r��user_cfg�domain_docroot_mapr�r
s     r&r�r��s����x� � �����&�x�0�0�H��$������,4�,E�������H�T�2�2�2�2��X�4�8�8�8�8�R��3�H�=�=�=�=���R�R�R���F��	R�	R�	R�	R�	R�R����#��T�*<�*C�*C�*E�*E�%F�%F�����)�.�.�0�0�	E�	E�
��7��?��M�(��	
�
�
�
��1�(�G�D�D�D�D�	E�	Es�(A=�=B�Bc���tt����D]7}	t|���#t$rt	jd|��Y�4wxYwt��}|st
��dSdS)z9Remove domain isolation state for every user that has it.z:Unable to disable website isolation for user %s, skipping.N)r��#users_with_enabled_domain_isolationr�r�r4r�r)r��
users_lefts  r&r�r��s����<�>�>�?�?����	�#�H�-�-�-�-���	�	�	���L��
�
�
�
�
�	����
5�6�6�J��"��!�!�!�!�!�"�"s�/�A�Ar�c�^�	t|��dS#ttf$rYdSwxYw)Nr)�get_domain_docrootr�
IndexError)r�s r&r�r��sA���!�&�)�)�!�,�,���j�!�����t�t����s��,�,c��t��sdS	tj|��}n#t$rYdSwxYwtj�|��S)NF)r'r�get_jail_config_pathrr r!rW)r;�domains_config_paths  r&�is_isolation_enabledr��se��3�5�5���u��(�=�d�C�C���������u�u�����
�7�>�>�-�.�.�.s�'�
5�5c�p�d�t��D��}i}|D]}t|��}|r|||<�|S)Nc�N�g|]"}t|���t|��� |��#Sr$)rr�)rc�us  r&rez7users_with_enabled_domain_isolation.<locals>.<listcomp>�s1��P�P�P�1�[��^�^�P�8L�Q�8O�8O�P�Q�P�P�Pr%)r�#get_websites_with_enabled_isolation)�users�user_domain_pairsr;�domains_with_isolations    r&r�r��sV��P�P��	�	�P�P�P�E����=�=��!D�T�!J�!J��!�	=�&<��d�#���r%c��t|��stjd|��gStj|��jS)Nz=User %s not found, cannot get websites with enabled isolation)rr4r5rr�r�)r;s r&r�r�sG���t������K�T�	S�	S�	S��	��"�4�(�(�9�9r%c��t��}tt��}|���D]S\}}|D]K}	t	|��d}n#t
tf$rY�,wxYw||�|���L�T|S)z�
    Returns pairs user: set(docroots) for all users with website isolation enabled
    Used by monitoring service to watch docroots changes to load actual list of docroot paths
    instead of stale storage
    r)r�r�setrVr�rr��add)�users_with_isolation�pairsr;�domainsr��drs      r&�!get_docroots_of_isolated_websitesr�
s���?�@�@������E�-�3�3�5�5� � �
��g��	 �	 �F�
�'��/�/��2�����j�)�
�
�
���
�����$�K�O�O�B�����	 ��Ls�A�A+�*A+c���t|��stjd|��dStj|��}	tt
|��d��}t|t���	|��j
��n/#t$r"}tjd|||��Yd}~dSd}~wwxYw||jvr|j�
|��tj||��tj||��tj||��t%jddd|gd���t)||��	t+j||��n&#t.$rtjd	||��YnwxYwt3|t5|��g�
��t7��t9||��t;|��t=||��dS)Nz2User %s not found, cannot enable website isolationrz4Skipping website isolation for user %s domain %s: %s�	cagefsctlz--rebuild-alt-php-iniz--domainT)ruz9Failed to apply LiteSpeed dedicated PHP handler for %s/%sr�)rr4r5rr�rr�rr�get_pw_by_name�pw_dir�
ValueErrorr��appendr�create_website_token_directory� create_overlay_storage_directoryr�rMrNrr�enable_dedicated_php_handlerr�r�rr�rrrr�)r;r�r��
document_root�excs     r&�enable_website_isolationr�s5���t������@�$�	H�	H�	H����)�$�/�/�K��(�);�F�)C�)C�A�)F�G�G�
�$�]�E�G�G�4J�4J�4�4P�4P�4W�X�X�X�X��������B��&�#�	�	�	�	����������	�����[�1�1�1��$�+�+�F�3�3�3��-�d�M�B�B�B��/��m�D�D�D�
��D�+�.�.�.��N�K�!8�*�f�M�UY�Z�Z�Z�Z��T�;�/�/�/�W��.�t�]�C�C�C�C���W�W�W���G��v�	W�	W�	W�	W�	W�W����#�4�=Q�RX�=Y�=Y�<Z�[�[�[�[�����"�$��/�/�/� ��&�&�&���v�&�&�&�&�&s*�AB�
B?�B:�:B?�E%�% F�Fc�t�t|��stjd|��dStj|��}t||��g}|jD]�}t|��}|�tjd|���)|�|��	tj
||��tj||���j#t$r }tj
d||��Yd}~��d}~wwxYw	tj||��n%#t$rtjd|��YnwxYwt#||���dS)NzDUser %s not found, cannot regenerate website isolation configurationzdUnable to find document root for domain %s, please contact CloudLinux support if the issue persists.z8Unable to recreate token/storage for domain=%s, Error=%s�;Failed to reconcile LiteSpeed dedicated PHP handlers for %sr�)rr4r5rr�rr�r�r�rr�r�r�r�r� reconcile_dedicated_php_handlersr�r)r;r��document_rootsr�r��es      r&�"regenerate_isolation_configurationr^s����t������R�TX�	Z�	Z�	Z����)�$�/�/�K��T�;�/�/�/��N��.����,�V�4�4�
�� ��O�K��
�
�
�

����m�,�,�,�	��5�d�M�J�J�J��7��m�L�L�L�L���	�	�	��M�T�V\�^_�`�`�`��H�H�H�H�����	����Q��2�4��H�H�H�H���Q�Q�Q���I�4�	Q�	Q�	Q�	Q�	Q�Q����#�4�N�K�K�K�K�K�Ks*�*B>�>
C(�C#�#C(�,D�D$�#D$c�Z�t|��stjd|��dStj|��}d}g}|�-t|j��}d�|jD��}g|_n6||jvr-|g}t|��g}|j�|��tj	||��t||��|ry	tj|d�|jD����n%#t$rtjd|��YnwxYwt||���|D]}|��t!j||���|D]D}	t%||���#t&jt*f$rtjd|��Y�AwxYwt-��}|st/��dSdS)Nz3User %s not found, cannot disable website isolationc�,�g|]}t|����Sr$r�)rc�websites  r&rez-disable_website_isolation.<locals>.<listcomp>�s.��
�
�
�.5� ��)�)�
�
�
r%c�,�g|]}t|����Sr$r�r�s  r&rez-disable_website_isolation.<locals>.<listcomp>�s!��O�O�O�Q�%�a�(�(�O�O�Or%r�r�z1Failed to unregister domain LVE for %s, skipping.)rr4r5rr�r�r�r��remover�rrr�r�r�rrr�r�rMr�r�r�r)r;r�r��reload_docroots�domains_to_unregisterr�r�r�s        r&�disable_website_isolationr	�sm���t������A�4�	I�	I�	I����)�$�/�/�K��O���
�~� $�[�%A� B� B��
�
�9D�9U�
�
�
��(*��$�$�	�;�/�	/�	/�!'���/��7�7�8���$�+�+�F�3�3�3�
��D�+�.�.�.��T�;�/�/�/��K�	U��6��O�O�+�2N�O�O�O�
�
�
�
���	U�	U�	U���M�t�
U�
U�
U�
U�
U�	U����	'�t��P�P�P�P�,�	K�	K�M��$���5�d�M�J�J�J�J�
"�H�H��	H�"�4��+�+�+�+���-�w�7�	H�	H�	H���C�Q�
H�
H�
H�
H�
H�	H����
?�@�@���"��!�!�!�!�!�"�"s$�$C1�1D�D�	E�+F�Fr)X�	functoolsr4r r6rMr�collectionsr�pathlibr�clcommonr�clcommon.clcagefsrr�clcommon.cpapirr	r
r��clcommon.constr�clcommon.cpapi.cpapiexceptionsr�lve_utils.pylve_wrapperr
�fsr�
exceptionsr�webisolationrrrr�webisolation.configr�webisolation.docroot_validationrr� webisolation.jail_config_builderr�webisolation.phpr�webisolation.servicerr�webisolation.triggersrrr'r*rIr:�boolr?rPrwr{r�r|r^rkr�r�r��	lru_cacher�r�r�r�r�r�r�r�r�r�r�r�r�r��dictr�r�r�r�rr	r$r%r&�<module>rs�����������	�	�	�	�
�
�
�
���������#�#�#�#�#�#�������������D�D�D�D�D�D�D�D�>�>�>�>�>�>�>�>�8�8�8�8�8�8�"�"�"�"�"�"�3�3�3�3�3�3�)�)�)�)�)�)�������)�)�)�)�)�)�E�E�E�E�E�E�E�E�E�E�E�E�7�7�7�7�7�7�[�[�[�[�[�[�[�[�F�F�F�F�F�F�<�<�<�<�<�<�S�S�S�S�S�S�S�S�^�^�^�^�^�^�^�^�A�A�A�K�K�K���t������2��������"
�
�
�$3��[�����
F�A�������*���&@�@�@�F�C�����J/�+����Q����
"�
"� ��
"�F�F�F�
4�
4�
4�4�4�4����	�	�	����,I�I�I�4#�s�#�#�#�#�."�c�"�"�"�"�&"E�c�"E�"E�"E�"E�J"�"�"�������/�/�/��T�����:�c�:�:�:�:��4�����$?'�?'�?'�D&L�&L�&L�R4"�4"�C�4"��t��4"�4"�4"�4"�4"�4"r%