HEX
Server: LiteSpeed
System: Linux premium69.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
User: swifizcd (1555)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: //opt/cloudlinux/venv/lib64/python3.11/site-packages/__pycache__/lveapi.cpython-311.pyc
�

2&�iD��@�ddlZddlZddlZddlmZddlmZddlmZm	Z	ddl
mZddlm
Z
ddlmZmZddlmZdd	lmZdd
lmZdZdZd
ZGd�de��ZGd�de��ZGd�de��ZGd�d��ZGd�d��Z Gd�d��Z!dS)�N)�Optional)�ProcLve)�cpapi�ClPwd)�NotSupported)�	ve_config)�
PyLveError�PyLve)�config)�id_registry)�LvdError�reseller��c��eZdZdS)�NameMapErrorN��__name__�
__module__�__qualname__���py/lveapi.pyrr"��������Drrc��eZdZdS)�NameMapConfigErrorNrrrrrr&rrrc��eZdZdS)�NameMapNotInitializedNrrrrrr*rrrc�J�eZdZdZefd�Zd�Zd�Zd�Zdd�Z	d	�Z
d
d
�Zd�ZdS)�NameMapz�
    Container for backend storing resellers_name<=>resellers_id map
    As backend store use ve.cfg

    Usage:
    >>> name_map = NameMap()
    >>> name_map.link_xml_node()

    >>> name_map.id_list()
    [1001]
    c�0�||_d|_d|_dS�N)�
_xml_tag_name�	_xml_node�_reseller_id_name_map)�self�xml_tag_names  r�__init__zNameMap.__init__:s��)������%)��"�"�"rc�N�|���D]\}}||kr|cS�dSr"��load_from_node)r&�name�name_�id_s    r�get_idzNameMap.get_id@sB���-�-�/�/�	�	�J�E�3���}�}��
�
�
��	�	rc�N�|���D]\}}||kr|cS�dSr"r*)r&r.r-�_ids    r�get_namezNameMap.get_nameEsB���-�-�/�/�	�	�J�E�3��c�z�z������	�	rc�>�d�|���D��S)Nc��g|]\}}|��Srr)�.0�_r.s   r�
<listcomp>z#NameMap.id_list.<locals>.<listcomp>Ks��8�8�8���3��8�8�8rr*�r&s r�id_listzNameMap.id_listJs"��8�8�$�"5�"5�"7�"7�8�8�8�8rNTc�b�|�d|_|�|��dS||_d|_dS)aC
        Initialize NameMap. If xml_node is none,
        config will be loaded automatically
        :param use_cache: Bool whether bypass ve.cfg xml cache
        :param xml_node: !! DEPRECATED PARAM !!
                         this param is left only for
                         compatibility with our old code
        N)r$�_load_resellers_map_from_ve_cfgr%)r&�xml_node�	use_caches   r�
link_xml_nodezNameMap.link_xml_nodeMsB����!�D�N��0�0��;�;�;�;�;�&�D�N�)-�D�&�&�&rc��g|_|�|���\}}|D]b}|�d��}t|�d����}|r'|r%||jvr|j�||f���c~~dS)zT
        Fills self._reseller_id_name_map from ve.cfg file
        :return:
        �r=�user�idN)r%�_try_get_xml_node�getAttribute�int�append)r&r=�ve_cfgr<�el_r,r.s       rr;z'NameMap._load_resellers_map_from_ve_cfg_s���
&(��"��1�1�I�1�F�F�����	?�	?�C��#�#�F�+�+�D��c�&�&�t�,�,�-�-�C��
?��
?��4�+E� E� E��*�1�1�3��+�>�>�>����F�Frc���	tj|���\}}n.#tj$r}d|_t	d��|�d}~wwxYw||�|j��fS)Nr@z-Error happened while loading data from ve.cfg)r�get_xml_config�BadVeConfigExceptionr%r�getElementsByTagNamer#)r&r=rGr<�es     rrCzNameMap._try_get_xml_nodeos���	]�(�7�)�L�L�L��F�H�H���-�	]�	]�	]�)-�D�&�$�%T�U�U�[\�\�����	]�����x�4�4�T�5G�H�H�H�Hs��A�A�Ac#�PK�|j�|j�td���|jrc|j�|j��D]C}|�d��}t
|�d����}|r|r||fV��D|jr|jD]
\}}||fV��dSdS)z?
        Obtain data from xml node as (name, id_) list
        NzLName map is not initialized. Use obj.link_xml_node() to get data from configrArB)r$r%rrLr#rDrE)r&rHr,r.s    rr+zNameMap.load_from_nodews������>�!�d�&@�&H�'�)Z�[�[�
[��>�	$��~�:�:�4�;M�N�N�
$�
$���'�'��/�/���#�*�*�4�0�0�1�1���$�C�$���)�O�O�O���%�	 �!�7�
 �
 �	��T��C�i�����	 �	 �
 �
 r)NT)T)
rrr�__doc__�LVP_XML_TAG_NAMEr(r/r2r9r>r;rCr+rrrr r .s�������
�
�%5�*�*�*�*����
���
9�9�9�.�.�.�.�$��� I�I�I�I� � � � � rr c�p�eZdZdZd�Zd�Zd
d�Zd�Zd�Zd�Z	d	�Z
ed
���Zed���Z
d�ZdS)�LvpMapzl
    Container for storing information about lve:lvp mapping
    In which reseller container stored lve
    c�|�t��|_i|_i|_d|_t��|_dSr")r �name_map�_id_name_map�_name_id_map�_reseller_id_map_panelr�_pwdr8s rr(zLvpMap.__init__�s4���	�	��
�������&*��#��G�G��	�	�	rc�.�||j|<||j|<dSr")rUrV)r&r,r.s   r�_add_mapzLvpMap._add_map�s"��!%���#��"%���$���rNc�p�	|j�|��jS#tj$r|cYSwxYwr")rX�get_pw_by_name�pw_uidr�NoSuchUserException)r&r,�defaults   rr]z
LvpMap.pw_uid�sG��	��9�+�+�D�1�1�8�8���(�	�	�	��N�N�N�	���s�!�5�5c��|�|��}|�|S|j�tj��|_|j�|��Sr")r]rWr�get_reseller_id_pairs�get)r&r�uids   r�_get_panel_reseller_idzLvpMap._get_panel_reseller_id�sP���k�k�(�#�#���?��J��&�.�*/�*E�*G�*G�D�'��*�.�.�x�8�8�8rc��|j�|��p|j�|��}|�|S	|�|��}n#t
$rd}YnwxYw|�|�||��|S)z�
        Convert reseller name to an LVE id.
        It supports resellers without a system account (for Plesk compatibility).
        N)rTr/rVrbrdrrZ)r&r,rcs   r�get_reseller_idzLvpMap.get_reseller_id�s����m�"�"�4�(�(�G�D�,=�,A�,A�$�,G�,G���?��J�	��-�-�d�3�3�C�C���	�	�	��C�C�C�	�����?��M�M�$��$�$�$��
s�A�A�Ac�*�|j�|��p|j�|��}|�|S	t	j|��j}tj|��r|�	||��nd}n#t$rd}YnwxYw|S)z�
        Convert reseller id to reseller name
        It support resellers without system account (for Plesk compatibilyty)
        N)rTr2rUrb�pwd�getpwuid�pw_namer�is_resellerrZ�KeyError)r&r.r,s   r�get_reseller_namezLvpMap.get_reseller_name�s����}�%�%�c�*�*�H�d�.?�.C�.C�C�.H�.H�����K�	��<��$�$�,�D�� ��&�&�
��
�
�d�C�(�(�(�(������	�	�	��D�D�D�	�����s�AB�B�Bc#��K�ttj����}i}|D]N}	|�|��||<�#t$r&tjt
jd|�d���Y�KwxYwtjd���D]\\}}|�|��}|�$tjt
jd|�d����@|�	|d��}||fV��]dS)z�
        This method loops over all user:reseller pairs in control panel
        and returns appropriate lve_id:lvp_id pairs.
        THIS METHOD WON'T CHECK IF 'RESELLER LIMITS' IS ENABLED IN ve.cfg
        z	Reseller �> still exists in control panel, but absent in /etc/passwd file)�cploginr)�keylsN�user r)
�setr�	resellersrfr�syslog�LOG_WARNING�cpinfor]rb)r&rt�
reseller_uidsrrp�lve_id�lvp_ids       r�
lve_lvp_pairszLvpMap.lve_lvp_pairs�s`�������)�)�*�*�	��
�!�	J�	J�H�
J�*.�*>�*>�x�*H�*H�
�h�'�'���
J�
J�
J��
��&�)I�H�)I�)I�)I�J�J�J�J�J�
J����"'��4K�!L�!L�!L�	!�	!��G�X��[�[��)�)�F�
�~��
��&�)I��)I�)I�)I�J�J�J��"�&�&�x��3�3�F��&�.� � � � �	!�	!s�A�-A3�2A3c#�>K�tj��D]}|V��dSr")rrt)�
reseller_names rrtzLvpMap.resellers�s6����"�_�.�.�	 �	 �M������	 �	 rc��g}tj|��}|D]d}	tj|��j}|�|���2#t$r&tjtjd|�d���Y�awxYw|S)z:
        Obtain from control panel resellers uids
        rrro)	r�reseller_usersrh�getpwnamr]rFrlrurv)r,�uidsrrAr.s     rrxzLvpMap.reseller_uids�s���
���-�d�3�3��"�	J�	J�D�
J��l�4�(�(�/�����C� � � � ���
J�
J�
J��
��&�)I��)I�)I�)I�J�J�J�J�J�
J�����s�.A�-A;�:A;c�V�|�|��}|�|��Sr")rmrx)r&rzr}s   r�lvp_lve_id_listzLvpMap.lvp_lve_id_lists)���.�.�v�6�6�
��!�!�-�0�0�0rr")rrrrOr(rZr]rdrfrmr{�staticmethodrtrxr�rrrrRrR�s������������&�&�&�����	9�	9�	9����"���&!�!�!�:� � ��\� �����\�� 1�1�1�1�1rrRc�R�eZdZd
d�Zd�Zd�Zd�Zd�Zd�Zd�Z	d	�Z
d
�Zd�Zd�Z
dS)�LveNc��|p
t��|_|p
t��|_|p
t	��|_dSr")r�procr
�pyrR�map)r&r�r�r�s    rr(zLve.__init__s4���%�G�I�I��	��-�������?�&�(�(����rc#�K�t|jj�����}|j���D]\}}||vr||fV��|dfV��dS)a5
        Obtain {lve id}:{lvp id} pairs iterator based on ve.cfg config
        (detect enabled resellers containers)

        This method (unlike LvpMap.lve_lvp_pairs) will check
        if reseller is enabled in ve.cfg and return lvp_id=0
        for users of reseller with disabled reseller limits
        rN)rsr�rTr9r{)r&�enabled_lvp_idryrzs    r�lve_id_lvp_id_pairszLve.lve_id_lvp_id_pairss~�����T�X�.�6�6�8�8�9�9��"�h�4�4�6�6�	 �	 �N�F�F���'�'��f�n�$�$�$�$��a�i�����		 �	 rc�N�|���D]\}}||kr|cS�dS)z\
        Obtain lvp id based on ve.cfg config (detect enabled resellers containers)
        r)r�)r&ry�lve_id_�lvp_id_s    r�lve2lvpzLve.lve2lvp!sB��!%� 8� 8� :� :�	�	��G�W��� � �����!��qrc��tj�|j�����r.|j����|d��}nd}|jj|g|�Ri|��|dkrC	tj
|��|j�||��dS#t$rYdSwxYwdS)zH
        safe destroy lve container with preserving lvp mapping
        rN)
�os�path�existsr��proc_lve_mapr�rbr��lve_destroyrhri�lve_lvp_maprl)r&ry�args�kwargsrzs     rr�zLve.lve_destroy*s����7�>�>�$�)�0�0�2�2�3�3�	��Y�]�]�_�_�(�(���3�3�F�F��F�����F�4�T�4�4�4�V�4�4�4��Q�;�;�
���V�$�$�$���#�#�F�F�3�3�3�3�3���
�
�
����
����	�;s�/B5�5
C�Cc	���tj|��}|jD]�}|js�
	tj|j��}nA#t
$r4}t
jtjd|j�d|����Yd}~�^d}~wwxYwtj	||��}|�
|��|kr��||vr|j�||��n|j�
||��|||<��dS)u�Place every domain LVE that belongs to *lve_id* under its user LVP.

        Uses lve_lvp_move for domain LVEs that already exist in the kernel,
        and falls back to lve_lvp_map for those that do not yet exist (so
        the kernel will place them under the correct LVP when lve_setup
        creates them later).

        *proc_map* is an lve_id→lvp_id dict (from /proc/lve/map) used to
        skip mappings that are already correct.  Updated in-place so callers
        see the new state.
        �&failed to resolve docroot for domain '�': N)�
_ws_config�load_config�domainsr,�resolve_docrootr
rurv�_ws_id_registry�assign_domain_idrbr��lve_lvp_mover�)r&ry�proc_mapr�d�docrootrM�	domain_ids        r�_map_domain_lveszLve._map_domain_lves:s,���'��/�/����	)�	)�A��6�
��
�$�4�Q�V�<�<�����
�
�
��
�f�0�U�q�v�U�U�RS�U�U�W�W�W����������
����
(�8���I�I�I��|�|�I�&�&�&�0�0���H�$�$���$�$�V�Y�7�7�7�7���#�#�F�I�6�6�6�"(�H�Y���+	)�	)s�A�
A?�*A:�:A?c	��tj|��}|jD�]n}|js�	tj|j��}nA#t
$r4}t
jtjd|j�d|����Yd}~�_d}~wwxYwtj	||��}|j
���}|j�
��}d|vrt|d��|_d|vr#t|d��}	|	r|	dznd|_d|vrt|d��|_d	|vrt|d	��|_d
|vrt|d
��|_|j
�||d|�d��
����pdS)aApply per-domain limits from domains.json to each domain LVE.

        Must be called after lve_set_default() resets all LVEs inside the
        user LVP to the user's defaults.  Each domain LVE is set to its
        stored limits, or all-zeros (unlimited) when unconfigured.
        r�r�N�cpu�pmemir�io�nproc�iopszCan`t setup domain LVE z; error code {code})�err_msg)r�r�r�r,r�r
rurvr�r�r��liblve_settings�limits�to_dictrE�ls_cpu�
ls_memory_phy�ls_io�ls_nproc�ls_iops�	lve_setup)
r&ryrr�r�rMr��settingsr��
pmem_bytess
          r�apply_domain_lve_limitszLve.apply_domain_lve_limits^s����'��/�/����	�	�A��6�
��
�$�4�Q�V�<�<�����
�
�
��
�f�0�U�q�v�U�U�RS�U�U�W�W�W����������
����
(�8���I�I�I��w�.�.�0�0�H��X�%�%�'�'�F�����"%�f�U�m�"4�"4������� ����0�0�
�?I�)P��t�);�);�q��&��v�~�~�!$�V�D�\�!2�!2����&� � �$'��w��$8�$8��!�����#&�v�f�~�#6�#6�� ��G����8�R�)�R�R�R�
�
�
�
�
�5	�	s�A�
B�*A;�;Bc��|j���}|j���r!t	tj����}nt	��}|���D�]Y\}}||vr�|dkr5|j�|���s|j�	|��|j�|���s8|r|j�
||��n|j�	|��|�|d��|kr |j�||��|||<|�
||�����|�|d��|krU|j�|���s|j�	|��|j�||��|||<��[dS)uj
        Load lve_id:lvp_id map to kmod-lve.

        For users with per-domain isolation configured, builds a nested LVP
        hierarchy instead of a flat reseller mapping:

          lvp<0>
            [lvp<reseller_id>]        ← reseller LVP (if enabled)
              lvp<user_id>            ← user-level LVP with isolation
                lve<user_id>          ← user LVE
                lve<domain_id> ...    ← domain LVEs

          lvp<0>
            [lvp<reseller_id>]        ← reseller LVP (without isolation)
              lve<user_id>            ← user LVE (flat, existing behaviour)
        r)rz)r�N)r�r�r��domains_supportedrsr��find_all_lve_ids_with_configr��	exist_lvp�lve_lvp_create�lve_lvp_create2rbr�r�)r&�
proc_map_dict�isolated_usersryrzs     r�	_sync_mapz
Lve._sync_map�s���$�	�
�
���
��7�$�$�&�&�	#� ��!H�!J�!J�K�K�N�N� �U�U�N�"�6�6�8�8�	3�	3�N�F�F���'�'��Q�;�;�t�y�':�':�&�':�'I�'I�;��G�*�*�6�2�2�2��y�*�*�&�*�9�9�7��7���/�/���?�?�?�?���.�.�v�6�6�6�!�$�$�V�Q�/�/�6�9�9��G�(�(���8�8�8�,2�M�&�)��%�%�f�}�%�E�E�E�E�!�$�$�V�Q�/�/�6�9�9��9�.�.�f�.�=�=�7���.�.�v�6�6�6��G�(�(���8�8�8�,2�M�&�)��;	3�	3rc�R�	|���dS#t$rYdSwxYw)zZ
        wrapped _sync_map function for prevent error if some cpapi not supported
        N)r�rr8s r�sync_mapzLve.sync_map�s?��	��N�N��������	�	�	��D�D�	���s��
&�&c�L�	tj��S#t$rYdSwxYw)z^
        Check if current panel supported for reseller's limits;
        :rtype: bool
        F)r�is_reseller_limits_supportedrr8s r�is_panel_supportedzLve.is_panel_supported�s8��
	��5�7�7�7���	�	�	��5�5�	���s��
#�#c��t|j���|j���|���f��S)zo
        Check present all needed (kmod-lve, liblve, /proc/lve, panel) for manipulate resellers limits
        )�allr��resellers_supportedr�r�r8s r�reseller_limit_supportedzLve.reseller_limit_supported�sK���D�G�/�/�1�1��I�1�1�3�3��+�+�-�-�/�0�0�	0rc��t|j���|j���f��S)zh
        Check present all needed (kmod-lve, liblve, /proc/lve) for manipulate resellers limits
        )r�r�r�r�r8s r�is_lve10zLve.is_lve10�s3���D�G�/�/�1�1�4�9�3P�3P�3R�3R�S�T�T�Tr)NNN)rrrr(r�r�r�r�r�r�r�r�r�r�rrrr�r�s�������#�#�#�#�
 � � � ������ ")�")�")�H%�%�%�N;3�;3�;3�z������0�0�0�U�U�U�U�Urr�)"r�rurh�typingr�clcommon.clprocr�clcommonrr�clcommon.cpapi.cpapiexceptionsr�
clveconfigr�lve_utils.pylve_wrapperr	r
�websiteisolationrr�rr��websiteisolation.exceptionsr
rP�
LVE_NO_UBC�LVE_NO_MAXENTER�	Exceptionrrrr rRr�rrr�<module>r�s��
�	�	�	�
�
�
�
�
�
�
�
�������#�#�#�#�#�#�!�!�!�!�!�!�!�!�7�7�7�7�7�7� � � � � � �5�5�5�5�5�5�5�5�1�1�1�1�1�1�;�;�;�;�;�;�0�0�0�0�0�0���
�
���
	�	�	�	�	�9�	�	�	�	�	�	�	�	��	�	�	�	�	�	�	�	�L�	�	�	�[ �[ �[ �[ �[ �[ �[ �[ �|z1�z1�z1�z1�z1�z1�z1�z1�~VU�VU�VU�VU�VU�VU�VU�VU�VU�VUr