Hacked By AnonymousFox

Current Path : /opt/cloudlinux/venv/lib64/python3.11/site-packages/__pycache__/
Upload File :
Current File : //opt/cloudlinux/venv/lib64/python3.11/site-packages/__pycache__/lveapi.cpython-311.pyc

�

ܨfN����ddlmZddlmZddlmZmZddlZddlZddlZddl	Z	ddl
Z
ddlZddlm
Z
ddlmZddlmZddlmZmZdd	lmZ	ddlZn
#e$rdZYnwxYwdd
lmZe��ZdZdZd
ZdZGd�de ��Z!Gd�de!��Z"Gd�de!��Z#Gd�de$��Z%Gd�de$��Z&Gd�de ��Z'Gd�de$��Z(Gd�de$��Z)dS)�)�print_function)�absolute_import)�map�rangeN)�Optional)�uid_max)�ProcLve)�cpapi�ClPwd)�NotSupported)�	ve_configi����reseller��c��eZdZdS)�NameMapErrorN��__name__�
__module__�__qualname__���py/lveapi.pyrr,��������Drrc��eZdZdS)�NameMapConfigErrorNrrrrrr0rrrc��eZdZdS)�NameMapNotInitializedNrrrrrr4rrrc�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__Ds��)������%)��"�"�"rc�N�|���D]\}}||kr|cS�dSr"��load_from_node)r&�name�name_�id_s    r�get_idzNameMap.get_idJsB���-�-�/�/�	�	�J�E�3���}�}��
�
�
��	�	rc�N�|���D]\}}||kr|cS�dSr"r*)r&r.r-�_ids    r�get_namezNameMap.get_nameOsB���-�-�/�/�	�	�J�E�3��c�z�z������	�	rc�>�d�|���D��S)Nc��g|]\}}|��Srr)�.0�_r.s   r�
<listcomp>z#NameMap.id_list.<locals>.<listcomp>Us��8�8�8���3��8�8�8rr*�r&s r�id_listzNameMap.id_listTs"��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_nodeWsB����!�D�N��0�0��;�;�;�;�;�&�D�N�)-�D�&�&�&rc�,�t��|_|�|���\}}|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)�listr%�_try_get_xml_node�getAttribute�int�append)r&r=�ve_cfgr<�el_r,r.s       rr;z'NameMap._load_resellers_map_from_ve_cfgis���
&*�V�V��"��1�1�I�1�F�F�����	?�	?�C��#�#�F�+�+�D��c�&�&�t�,�,�-�-�C��
?��
?��4�+E� E� E��*�1�1�3��+�>�>�>����F�Frc��	tj|���\}}n)#tj$rd|_t	d���wxYw||�|j��fS)Nr@z-Error happened while loading data from ve.cfg)r
�get_xml_config�BadVeConfigExceptionr%r�getElementsByTagNamer#)r&r=rHr<s    rrDzNameMap._try_get_xml_nodeysy��	V�(�7�)�L�L�L��F�H�H���-�	V�	V�	V�)-�D�&�$�%T�U�U�U�	V�����x�4�4�T�5G�H�H�H�Hs	��&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%rrMr#rErF)r&rIr,r.s    rr+zNameMap.load_from_node�s������>�!�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;rDr+rrrr r 8s�������
�
�%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��|_t��|_t��|_d|_t
��|_dSr")r �name_map�dict�_id_name_map�_name_id_map�_reseller_id_map_panelr�_pwdr8s rr(zLvpMap.__init__�s<���	�	��
� �F�F��� �F�F���&*��#��G�G��	�	�	rc�.�||j|<||j|<dSr")rVrW)r&r,r.s   r�_add_mapzLvpMap._add_map�s"��!%���#��"%���$���rNc�p�	|j�|��jS#tj$r|cYSwxYwr")rY�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^rXr
�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/rWrcrerr[)r&r,rds   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)rTr2rVrc�pwd�getpwuid�pw_namer
�is_resellerr[�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]M}	|�|��||<�#t$r%tjt
jd|z��Y�JwxYwtjd���D][\}}|�|��}|�#tjt
jd|z���?|�	|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
        zIReseller %s still exists in control panel, but absent in /etc/passwd file)�cploginr)�keylsN�Euser %s still exists in control panel, but absent in /etc/passwd filer)
�setr
�	resellersrgr�syslog�LOG_WARNING�cpinfor^rc)r&rt�
reseller_uidsrrp�lve_id�lvp_ids       r�
lve_lvp_pairszLvpMap.lve_lvp_pairs�sJ�������)�)�*�*�	��
�!�	U�	U�H�
U�*.�*>�*>�x�*H�*H�
�h�'�'���
U�
U�
U��
��&�)I�KS�)T�U�U�U�U�U�
U����"'��4K�!L�!L�!L�	!�	!��G�X��[�[��)�)�F�
�~��
��&�)I�KR�)S�T�T�T��"�&�&�x��3�3�F��&�.� � � � �	!�	!s�A�,A2�1A2c#�>K�tj��D]}|V��dSr")r
rt)�
reseller_names rrtzLvpMap.resellers�s6����"�_�.�.�	 �	 �M������	 �	 rc��t��}tj|��}|D]c}	tj|��j}|�|���2#t$r%tjtj	d|z��Y�`wxYw|S)z:
        Obtain from control panel resellers uids
        rr)
rCr
�reseller_usersri�getpwnamr^rGrmrurv)r,�uidsrrAr.s     rrxzLvpMap.reseller_uids�s���
�v�v���-�d�3�3��"�	Q�	Q�D�
Q��l�4�(�(�/�����C� � � � ���
Q�
Q�
Q��
��&�)I�KO�)P�Q�Q�Q�Q�Q�
Q�����s�.A�,B�Bc�V�|�|��}|�|��Sr")rnrx)r&rzr}s   r�lvp_lve_id_listzLvpMap.lvp_lve_id_lists)���.�.�v�6�6�
��!�!�-�0�0�0rr")rrrrOr(r[r^rergrnr{�staticmethodrtrxr�rrrrRrR�s������������&�&�&�����	9�	9�	9����"���&!�!�!�:� � ��\� �����\�� 1�1�1�1�1rrRc��eZdZdS)�
PyLveErrorNrrrrr�r�rrr�c��eZdZdZed���Zd�Zd�Zd�Ze	dddfd	�Z
d
�Zd�Zd�Z
eefd
�Zejd���ZdS)�PyLvezA
    Wrapper for generate traceback with pretty descriptions
    c�Z�t|t��o|tjko|dkS)Nr)�
isinstancerF�errno�ENOSYS)�codes r�_code_is_errorzPyLve._code_is_errors)���$��$�$�L��%�,��)>�L�4�1�9�Lrc����t�|jj��rDd��fd�t	���D����}d�|��}nt
���}|S)N�, c	���g|];}|�d���d�|t�|������<S)r6�{}={})�
startswith�format�getattr)r5r6�arg_vars  �rr7z%PyLve._arg_to_str.<locals>.<listcomp>!si���.E�.E�.E�YZ�rs�r~�r~�@C�sD�sD�.E�g�n�n�Q���QR�@S�@S�.T�.T�.E�.E�.Erz<liblve_settings object {}>)r��_pylve�liblve_settings�join�dirr��str)r&r��liblve_settings_attr�arg_var_strs `  r�_arg_to_strzPyLve._arg_to_strs�����g�t�{�:�;�;�	'�#'�9�9�.E�.E�.E�.E�^a�bi�^j�^j�.E�.E�.E�$F�$F� �7�>�>�?S�T�T�K�K��g�,�,�K��rc
����|�d�j��}|�d�j��}||i|��}��|��}|r=�jr6tj�j��||i|��}��|��}t||j	|j
d�tt�j|�����fd�|���D��z�����}�jdkrt#�jjdi|�����jdkr�j���|s|r|jdi|��}	t-|	���|S)	N�err_msg�ignore_errorr�c�h��g|].\}}d�|��|������/S)r�)r�r�)r5�k�vr&s   �rr7z&PyLve._wrapped_fun.<locals>.<listcomp>4s<���+n�+n�+n�W[�WX�Z[�G�N�N�1�d�>N�>N�q�>Q�>Q�,R�,R�+n�+n�+nr)r��fun_name�module�args_�rr)�pop�default_msg_templater�r��_retry�time�sleep�_retry_timerUrrr�rCrr��items�debug�print�debug_msg_templater��	traceback�print_stackr�)
r&�call�args�kwargs�msg_templater�r��is_error�format_args�msgs
`         r�_wrapped_funzPyLve._wrapped_fun's�����z�z�)�T�-F�G�G���z�z�.�$�2C�D�D���t�T�$�V�$�$���&�&�t�,�,���	1���	1��J�t�'�(�(�(��4��(��(�(�D��*�*�4�0�0�H���$(�M�"&�/�!%���4��D�4D�d�0K�0K�+L�+L�+n�+n�+n�+n�_e�_k�_k�_m�_m�+n�+n�+n�,o�"p�"p�q�q�q��
�:��?�?��0�$�)�0�?�?�;�?�?�@�@�@��:��?�?��N�&�&�(�(�(��	"��	"�%�,�%�4�4��4�4�C��S�/�/�!��rc������fd�}|S)Nc�&���j�g|�Ri|��Sr")r�)r�r�r�r&s  ��r�funzPyLve._wrap_code.<locals>.fun?s&���$�4�$�T�;�D�;�;�;�F�;�;�;rr)r&r�r�s`` r�
_wrap_codezPyLve._wrap_code>s'����	<�	<�	<�	<�	<�	<��
rTg�������?rc�0�||_|jdkrtd��|_d|_d|_d|_||_||_t��|_	||_
|j���|_|jj
|_
|�|jj��|_|jj|_|�|jj��|_|�|jj��|_|jj|_|�|jj��|_|�|jj��|_|�|jj��|_|�|jj��|_|�|jj��|_t3|d��r�|�|jj��|_|�|jj��|_|�|jj��|_|�|jj��|_|�|j��|_dSdS)Nrr�z/Error code {code}; {module}.{fun_name}({args_})zBDEBUG [lvectl]: call {module}.{fun_name}({args_}) with code {code}F�lve_lvp_create)r��
__import__r�r�r�r�r�r�r	�_procr��lve_get_api_version�api_version�
initializer��	lve_startr��
lve_create�lve_destroy�lve_info�lve_set_default�	lve_setup�
lve_enter_pid�lve_enter_pid_flags�
lve_leave_pid�hasattrr��lve_lvp_destroy�lve_lvp_map�lve_lvp_move�
lve_lvp_setup)r&�pylve�retry�
retry_tymer�s     rr(zPyLve.__init__Cs�����
��:��?�?�'��4�4�D�N�$U��!�"f���!����������Y�Y��
�%����;�:�:�<�<����+�0��������)>�?�?���#�{�:����/�/�$�+�*@�A�A����?�?�4�;�+B�C�C�����,��
�#���t�{�/J�K�K��������)>�?�?���!�_�_�T�[�-F�G�G���#'�?�?�4�;�3R�#S�#S�� �!�_�_�T�[�-F�G�G����5�*�+�+�	E�"&�/�/�$�+�2L�"M�"M�D��#'�?�?�4�;�3N�#O�#O�D� �#���t�{�/F�G�G�D�� $�����0H� I� I�D��"&����1C�!D�!D�D����	E�	Erc�,�t|jd��S)zB
        Check in pylve binding reseller limits supported
        r�)r�r�r8s r�resellers_supportedzPyLve.resellers_supportedds���t�{�$4�5�5�5rc�T�	|�|��dS#t$rYdSwxYw)zD
        Check if lve exists in kernel
        :rtype: bool
        TF)r��OSError)r&rys  r�
lve_existszPyLve.lve_existsjs@��
	��M�M�&�!�!�!��4���	�	�	��5�5�	���s��
'�'c��|dkr|j�||��Si}|j�|��D]�}	|�|��}|||<|j|jkrJ|�|��}t
|j|j��|_|�||���x#t$rY��wxYw|�	|jj��}|||d���}|j�|��D]L}||vr|�|||���#|�||�|�����M|S)a�
        Wrapper for lve_lvp_setup.
        When reseller's limits changed,
        we should iterate over his user's limits
        and set them again;

        This behaviour is needed cause kernel
        does not update users limits after
        changing reseller's one

        Adjust parameters for top level container.
        :param int lvp_id: top level container ID, 0 by default;
        :param settings: liblve_settings instance.
        :return: 0 or errno value
        rT�r�)
r�r�r��lve_id_listr��ls_cpu�minr�r�r�)	r&rz�settings�real_lve_settingsry�
real_settings�
temp_settings�_lve_lvp_setup�results	         rr�zPyLve.lve_lvp_setupws~��"�Q�;�;��;�,�,�V�X�>�>�>�!#���*�0�0��8�8�
�
���$(�M�M�&�$9�$9�M�0=�%�f�-�$�+�h�o�=�=�(,�
�
�f�(=�(=�
�/2�=�3G���/Y�/Y�
�,����v�}�=�=�=��������D�����
"�_�_�T�[�-F�G�G�N�#�^�F�H�4�H�H�H�F��*�0�0��8�8�
B�
B���.�.�.��N�N�6�+<�V�+D�E�E�E�E�
�N�N�6�4�=�=��+@�+@�A�A�A�A��Ms�A4B6�6
C�Cc��t|dz|��D],}	|�|���#t$r|cYcSwxYwtd||fz���)z�
        Iter over lves and find available one.
        :param int start: value to start search from; UID_MAX by default
        :param int stop: max value when we will stop search
        :return int: lve_id
        r�z)Unable to find free lve in range (%i, %i))rr�r�r�)r&�start�stoprys    r�get_available_lve_idzPyLve.get_available_lve_id�s{���E�A�I�t�,�,�	�	�F�
��
�
�f�%�%�%�%���
�
�
��
�
�
�
�
�
�����D��t�}�T�U�U�Us�-�>�>c#�XK�||jc|_}	dV�||_dS#||_wxYwr"r�)r&r��saved_ignore_errors   r�context_ignore_errorzPyLve.context_ignore_error�sJ����0<�d�>O�-���-�	3��E�E�E� 2�D����� 2�D��2�2�2�2s� �	)N)rrrrOr�r�r�r�r�r�r(r�r�r��UID_MAX�
MAX_LVE_IDr��
contextlib�contextmanagerr�rrrr�r�s����������M�M��\�M�������.���
#�$�3�a�E�E�E�E�B6�6�6�	�	�	�5�5�5�n*1�z�V�V�V�V���3�3���3�3�3rr�c�F�eZdZdd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d	�Z
d
�ZdS)�LveNc��|p
t��|_|p
t��|_|p
t	��|_dSr")r	�procr��pyrRr)r&r�r�rs    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)rsrrTr9r{)r&�enabled_lvp_idryrzs    r�lve_id_lvp_id_pairszLve.lve_id_lvp_id_pairs�s~�����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_maprrcr�r�rirjr�rm)r&ryr�r�rzs     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�J�|j���}|���D]t\}}|�|d��|krU|j�|���s|j�|��|j�||��|||<�udS)z4
        Load lve_id:lvp_id map to kmod-lve
        r)rzN)r�rr�rc�	exist_lvpr�r�r�)r&�
proc_map_dictryrzs    r�	_sync_mapz
Lve._sync_map�s���
�	�
�
���
�#�6�6�8�8�	/�	/�N�F�F�� � ���+�+�v�5�5��y�*�*�&�*�9�9�3��G�*�*�6�2�2�2���$�$�V�V�4�4�4�(.�
�f�%��	/�	/rc�R�	|���dS#t$rYdSwxYw)zZ
        wrapped _sync_map function for prevent error if some cpapi not supported
        N)rrr8s r�sync_mapzLve.sync_maps?��	��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_supportedrr8s r�is_panel_supportedzLve.is_panel_supporteds8��
	��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�r�r�r
r8s r�reseller_limit_supportedzLve.reseller_limit_supportedsK���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
        )rr�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�rr
r
rrrrrr�r��s�������#�#�#�#�
 � � � ������ /�/�/�$������0�0�0�U�U�U�U�Urr�)*�
__future__rr�builtinsrrr�rr�rur�ri�typingr�clcommon.clfuncr�clcommon.clprocr	�clcommonr
r�clcommon.cpapi.cpapiexceptionsrr��ImportError�
clveconfigr
r�r�rP�
LVE_NO_UBC�LVE_NO_MAXENTER�	Exceptionrrr�objectr rRr�r�r�rrr�<module>r s���&�%�%�%�%�%�&�&�&�&�&�&�������������	�	�	�	�����
�
�
�
�����
�
�
�
�������#�#�#�#�#�#�#�#�#�#�#�#�!�!�!�!�!�!�!�!�7�7�7�7�7�7���L�L�L�L�������E�E�E�����!� � � � � ��'�)�)���
���
�
���
	�	�	�	�	�9�	�	�	�	�	�	�	�	��	�	�	�	�	�	�	�	�L�	�	�	�[ �[ �[ �[ �[ �f�[ �[ �[ �|z1�z1�z1�z1�z1�V�z1�z1�z1�z	�	�	�	�	��	�	�	�k3�k3�k3�k3�k3�F�k3�k3�k3�\`U�`U�`U�`U�`U�&�`U�`U�`U�`U�`Us�A�A�A

Hacked By AnonymousFox1.0, Coded By AnonymousFox