????

Your IP : 3.14.141.163


Current Path : /opt/cloudlinux/venv/lib/python3.11/site-packages/cllimits/__pycache__/
Upload File :
Current File : //opt/cloudlinux/venv/lib/python3.11/site-packages/cllimits/__pycache__/clquota_lib.cpython-311.pyc

�

�o�e�1����ddlmZddlZddlmZmZmZddlmZddl	m
Z
ddlmZm
Z
ddlmZmZddlZddlZGd�d	e
��ZGd
�de��ZGd�d
e��ZGd�d��ZdS)�)�absolute_importN)�Tuple�Dict�Optional)�exec_utility)�FormattedException)�run_command�ExternalProgramFailed)�is_quota_supported�is_quota_activec��eZdZdS)�ClQuotaExceptionN)�__name__�
__module__�__qualname__���K/opt/cloudlinux/venv/lib64/python3.11/site-packages/cllimits/clquota_lib.pyrrs�������Drrc�$��eZdZdZd�fd�	Z�xZS)�UnexpectedClQuotaErrorzU
    Raised when we get output from cl-quota
    that cannot be parsed properly.
    Nc�h��dd|d�d�}tt|���|��dS)Nz�Unexpected response got from %(util)s. Raw response from cl-quota: '%(raw_response)s'.Please, contact CloudLinux support for help in resolving this issue.�Quota)�util�raw_response��message�context)�superr�__init__)�selfr�broken_exc_message�	__class__s   �rrzUnexpectedClQuotaError.__init__ sM���*p�3:�<�)X�)X�Z�Z��	�$�d�+�+�4�4�5G�H�H�H�H�Hr�N�rrr�__doc__r�
__classcell__�r"s@rrrsQ���������I�I�I�I�I�I�I�I�I�Irrc�"��eZdZdZ�fd�Z�xZS)�QuotaDisabledExceptionz=
    Raised when quotas are disabled in system globally.
    c�f��dddid�}tt|���|��dS)N�%(util)s is disabledrrr)rr)r)r �disabled_exc_messager"s  �rrzQuotaDisabledException.__init__,sA���+A�,2�G�+<� >� >��
�$�d�+�+�4�4�5I�J�J�J�J�Jrr$r's@rr)r)(sK���������K�K�K�K�K�K�K�K�Krr)c�r�eZdZdZdZd�Zd�Zd�Zd�Zdd�Z	d	�Z
d
�Zd�Zd�Z
d
�Zd�Zd�Zd�Zd�Zd�ZdS)�
ClQuotaLibz/usr/bin/cl-quotaz/usr/sbin/repquotac�>�d|_d|_d|_d|_dSr#)�_inode_user_limits�_inode_package_dict�_is_clquota_present�_is_clquota_activated�r s rrzClQuotaLib.__init__6s,��IM���IM�� �#'�� �%)��"�"�"rc�\�|j�t|j|j��|_|jS)zb
        Get quota presence flag
        :return: True/False - quotas present/not present
        )r2r�_CL_QUOTA_PATH�_REPQUOTA_PATHr4s r�is_clquota_presentzClQuotaLib.is_clquota_present@s.��
�#�+�'9�$�:M�t�Ob�'c�'c�D�$��'�'rc�\�|j�t|j|j��|_|jS)zg
        Get quota activated flag
        :return: True/False - quotas activeted/not activeted
        )r3rr6r7r4s r�is_clquota_activatedzClQuotaLib.is_clquota_activatedIs.��
�%�-�)8��9L�d�Na�)b�)b�D�&��)�)rc��|���t|��}||jvr
|j|S|jdS)z�
        Retrive inodes limits by uid
        :param user_id: Supplied uid
        :return: cortege (soft_limit, hard_limit). (None, None) if governor not present or error
        �0)�_load_users_info�strr0)r �user_id�uids   r�get_inodes_limits_by_uidz#ClQuotaLib.get_inodes_limits_by_uidRsK��	
�������'�l�l���$�)�)�)��*�3�/�/��&�s�+�+rFc�6�|���t|t��r|dkrdd|id�}t|���|dkrdgdz}n�|dkrdgdz}n�t	|��t
tfvrnRt|�d����dkr|�d��}nd	d
|id�}t|���|D]Q}	|dkr#t|��}|dkrt����-#t$rd|dd�d�}t|���wxYw|j
d
|zd|dzd|dzg}|r|�d��	t|��dS#t$r!}tt|�����d}~wwxYw)z�
        Set inodes limits for user uid
        :param: int uid: user id
        :param: list limits: new inodes limits
        :param: bool force: save limits if even they are equal to defaults
        :return: None
        rz*User id '%(uid)s' isn't a positive integerr@r�	unlimited��default�,z$Limits %(limits)s aren't acceptable.�limitszFLimit value '%(limit)s' isn't a positive integer or string %(default)s)�limitrEz--user-id=%d�--soft-limit=%s�--hard-limit=%s�z--forceN)r=�
isinstance�intr�type�tuple�list�len�split�
ValueErrorr6�appendr	r
r>)r r@rG�force�exc_message�l�cmd�es        r�set_user_inodes_limitsz!ClQuotaLib.set_user_inodes_limits_s��	
�������#�s�#�#�	0�s�Q�w�w�&R�',�c�l�4�4�K�"�;�/�/�/��[� � �!�]�Q�&�F�F�
�y�
 �
 ��[�1�_�F�F��F�|�|��t�}�,�,���V�\�\�#�&�&�'�'�1�,�,����c�*�*���*P�+3�V�*<�>�>��&�{�3�3�3��	
8�	
8��8��I�~�~���F�F���q�5�5�",�,�,�.���!�8�8�8�.v�89�i�.P�.P�#R�#R�K�*�;�7�7�7�8�����"���#� �6�!�9�,� �6�!�9�,�.���	"��J�J�y�!�!�!�	+���������$�	+�	+�	+�"�3�q�6�6�*�*�*�����	+���s$�)C?�?"D!�E-�-
F�7F�Fc�2�|�|d��dS)zq
        Set unlimited inodes limits for user uid
        :param: int uid: user id
        :return: None
        rCN�rZ�r r@s  r� set_user_inodes_limits_unlimitedz+ClQuotaLib.set_user_inodes_limits_unlimited�s ��	
�#�#�C��5�5�5�5�5rc�2�|�|d��dS)zo
        Set default inodes limits for user uid
        :param: int uid: user id
        :return: None
        rENr\r]s  r�reset_user_inodes_limitsz#ClQuotaLib.reset_user_inodes_limits�s ��	
�#�#�C��3�3�3�3�3rc��|j�dS|���r|���st���	|�dg��}n#t
$r	d|_�wxYwt
��|_|���D]C\}}t|dd��t|dd��f|j|<�Dd|jvr&d|_ddd|j	zd	�d
�}t|���dS)zF
        Loads users info from cl-quota
        :return: None
        N�--jsonrKrDr<z'There is no %(what)s found in %(where)szdefault settingsz	%s output)�what�wherer)
r0r8r:r)�_get_quotasr�dict�itemsrMr6)r �datar@rGrVs     rr=zClQuotaLib._load_users_info�s8���"�.��F��&�&�(�(�	+��0I�0I�0K�0K�	+�(�*�*�*�	��#�#�X�J�/�/�D�D���	�	�	�&*�D�#��	����#'�&�&����:�:�<�<�	R�	R�K�C��,/��q�	�!��,=�,=�s�6�!�9�Q�<�?P�?P�+Q�D�#�C�(�(��d�-�-�-�&*�D�#�&O�/A�K�Z^�Zm�Lm�&n�&n�p�p�K�"�;�/�/�/�	.�-s�A�A+c�p�t|j|��\}}	tj|��}|st	���n%#t
tf$rt	|����wxYw|ddkr@t|d|�di��|�d��d����|dS)N)r�result�successr�details)rrrlrg)	rr6�json�loadsr�	TypeErrorrSr�get)r �command�_�s_quota_limitsrhs     rrezClQuotaLib._get_quotas�s���(��)<�g�F�F���>�	/��:�n�-�-�D��
/�,�.�.�.�
/���:�&�	F�	F�	F�(�n�E�E�E�E�	F������>�Y�&�&�"���>��8�8�I�r�2�2��8�8�I�.�.�$�$���
�
�G�}�s	�?�"A!c��|���r|���sdSt|jdg��dS)zV
        Reset inodes limits for all users to package limits
        :return:
        Nz--sync)r8r:rr6r4s r�reset_inodes_limitszClQuotaLib.reset_inodes_limits�sK��
�&�&�(�(�	��0I�0I�0K�0K�	��F��T�(�8�*�5�5�5�5�5rc���|j�dS|���r|���st���	|�ddg��}n#t
$r	d|_�wxYwt
��|_|���D]^\}}|dd}|dkrd}nt|��}|dd}|dkrd}nt|��}||d�|j|<�_dS)	zI
        Loads packages info from cl-quota
        :return: None
        Nrbz--all-package-limitsrK�-rrD)�soft�hard)	r1r8r:r)rerrfrgrM)r �packages�packagerG�
soft_limit�
hard_limits      r�_load_packages_infozClQuotaLib._load_packages_info�s0���#�/��F��&�&�(�(�	+��0I�0I�0K�0K�	+�(�*�*�*�	��'�'��3I�(J�K�K�H�H���	�	�	�'+�D�$��	����$(�6�6�� �'�~�~�/�/�	Y�	Y�O�G�V����1��J��S� � ��
�
� ��_�_�
����1��J��S� � ��
�
� ��_�_�
�9C�Z�0X�0X�D�$�W�-�-�	Y�	Ys�A�A,c�p�|���|s|jS||jvr||j|iSiS)aY
        Get inodes limits for supplied reseller and package
        :param package_name_arg: Package name. Only if reseller name is provided. If None - all packages
        :return: Packages limits dictionary: {package_name: { "soft": 100000, "hard": 200000 } }
        If package with supplied name not found, dictionary will be empty
        )r~r1)r �package_name_args  r�get_reseller_package_limitsz&ClQuotaLib.get_reseller_package_limits�sN��	
� � �"�"�"��	,��+�+��t�7�7�7�$�d�&>�?O�&P�Q�Q��	rc�"�d|||rd|zndd�d�S)Nz3%(what)s set error for package=%(package)s%(error)sz [%s]�)rcr{�errorrr)r �param�package_name�errs    r�__set_errorzClQuotaLib.__set_errors8��P�$)�l�69�%A�W�s�]�]�r�C�C�D�D�	Drc��dddid�}|���r|���st|���|�d��}t	|��dkrtdddid����d	|zd
|dzd|d
zg}t|j|��\}}|dks|r$t|�d||�����dS)z�
        Set inodes limits for package
        Called from cloudlinux-packages set
        :param package_name: Package name
        :param limits_to_set: Limits to set: soft_limit,hard_limit
        :return: None
        r+rrrrFrDz%(util)s argument errorzcl-quotaz--package=%srIrrJrK�
Inodes limitsN)r8r:rrRrQrr6�_ClQuotaLib__set_error)r r��
limits_to_setr,rG�cl_quota_cmd�ret_code�stdouts        r�set_reseller_package_limitsz&ClQuotaLib.set_reseller_package_limits	s��,B�,2�G�+<� >� >���&�&�(�(�	9��0I�0I�0K�0K�	9�"�#7�8�8�8��$�$�S�)�)���v�;�;�!���"�/H�06�
�/C�$E�$E�F�F�
F�'��5�)�F�1�I�5�7H�6�RS�9�7T�V��'��(;�\�J�J���&��q�=�=�F�=�"�4�#3�#3�O�\�SY�#Z�#Z�[�[�[��=rc��ddi}|���r|���st|���t|��dkrtddi���t	|��ddhks;t	|��ddhz
}tddd	�|��id
����d|��g}d|vr|�d|d����d|vr|�d
|d����t|j|��\}}|dks|r$t|�	d||�����dS)z�
        Set inodes limits for package
        Called from cl-syncpkgs
        :param package_name: Package name
        :param limits: Limits to set: {"inodes_soft":1000, "inodes_hard":2000}
        :return: None
        rzQuota is disabledrzUnspecified limits for cl-quota�inodes_soft�inodes_hardz-Incorrect limits for cl-quota: %(bad_limits)s�
bad_limitsz, rz
--package=z
--soft-limit=z
--hard-limit=r�N)
r8r:rrQ�set�joinrTrr6r�)r r�rGr,r�r�r�r�s        r� set_package_limits_independentlyz+ClQuotaLib.set_package_limits_independently#s���!*�+>�?���&�&�(�(�	9��0I�0I�0K�0K�	9�"�#7�8�8�8��v�;�;�!���"�I�/P�#Q�R�R�R��6�{�{�}�m�<�<�<��V���
�}�'E�E�J�"�/^�0<�d�i�i�
�>S�>S�/T�$V�$V�W�W�
W�3�\�3�3�4���F�"�"���� G��}�0E� G� G�H�H�H��F�"�"���� G��}�0E� G� G�H�H�H�'��(;�\�J�J���&��q�=�=�F�=�"�4�#3�#3�O�\�SY�#Z�#Z�[�[�[��=rN)F)rrrr6r7rr8r:rArZr^r`r=rerur~r�r�r�r�rrrr.r.2s������(�N�)�N�*�*�*�(�(�(�*�*�*�,�,�,�.+�.+�.+�.+�`6�6�6�4�4�4�0�0�0�4���&6�6�6�Y�Y�Y�>��� D�D�D�
\�\�\�4\�\�\�\�\rr.)�
__future__rrm�typingrrr�cllimits.libr�clcommon.clexceptionr�clcommon.utilsr	r
�cllimits.lib.utilsrr�cldetectlib�osrrr)r.rrr�<module>r�s���'�&�&�&�&�&�����(�(�(�(�(�(�(�(�(�(�%�%�%�%�%�%�3�3�3�3�3�3�=�=�=�=�=�=�=�=�B�B�B�B�B�B�B�B�����	�	�	�	�	�	�	�	�	�)�	�	�	�
I�
I�
I�
I�
I�-�
I�
I�
I�K�K�K�K�K�-�K�K�K�J\�J\�J\�J\�J\�J\�J\�J\�J\�J\r