HEX
Server: Apache
System: Linux insrv.serversdaddy.com 5.14.0-362.24.2.el9_3.x86_64 #1 SMP PREEMPT_DYNAMIC Sat Mar 30 14:11:54 EDT 2024 x86_64
User: jsaha (1066)
PHP: 8.3.6
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //opt/alt/python37/lib/python3.7/site-packages/cllimits/__pycache__/clquota_lib.cpython-37.pyc
B

�a}��(��@s�ddlmZddlZddlmZmZmZddlmZddl	m
Z
ddlmZm
Z
ddlmZmZddlZddlZGdd	�d	e
�ZGd
d�de�ZGdd
�d
e�ZGdd�d�ZdS)�)�absolute_importN)�Tuple�Dict�Optional)�exec_utility)�FormattedException)�run_command�ExternalProgramFailed)�is_quota_supported�is_quota_activec@seZdZdS)�ClQuotaExceptionN)�__name__�
__module__�__qualname__�rr�py/cllimits/clquota_lib.pyrsrcs"eZdZdZd�fdd�	Z�ZS)�UnexpectedClQuotaErrorzU
    Raised when we get output from cl-quota
    that cannot be parsed properly.
    Ncs$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__)�selfrZbroken_exc_message)�	__class__rrr szUnexpectedClQuotaError.__init__)N)r
rr�__doc__r�
__classcell__rr)rrrsrcs eZdZdZ�fdd�Z�ZS)�QuotaDisabledExceptionz=
    Raised when quotas are disabled in system globally.
    cs"dddid�}tt|��|�dS)Nz%(util)s is disabledrr)rr)rrr)r�disabled_exc_message)rrrr,szQuotaDisabledException.__init__)r
rrrrrrr)rrr(src@s�eZdZdZdZdd�Zdd�Zdd�Zd	d
�Zd#dd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"S)$�
ClQuotaLibz/usr/bin/cl-quotaz/usr/sbin/repquotacCsd|_d|_d|_d|_dS)N)�_inode_user_limits�_inode_package_dict�_is_clquota_present�_is_clquota_activated)rrrrr6szClQuotaLib.__init__cCs |jdkrt|j|j�|_|jS)zb
        Get quota presence flag
        :return: True/False - quotas present/not present
        N)r#r
�_CL_QUOTA_PATH�_REPQUOTA_PATH)rrrr�is_clquota_present@s
zClQuotaLib.is_clquota_presentcCs |jdkrt|j|j�|_|jS)zg
        Get quota activated flag
        :return: True/False - quotas activeted/not activeted
        N)r$rr%r&)rrrr�is_clquota_activatedIs
zClQuotaLib.is_clquota_activatedcCs.|��t|�}||jkr$|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�strr!)rZuser_id�uidrrr�get_inodes_limits_by_uidRs


z#ClQuotaLib.get_inodes_limits_by_uidFc
Csp|��t|t�r|dkr0dd|id�}t|��|dkrDdgd}n�|dkrXdgd}n�t|�ttgkrjn4t|�d��dkr�|�d�}nd	d
|id�}t|��x\|D]T}y"|dkr�t|�}|dkr�t	��Wq�t	k
r�d|dd�d�}t|��Yq�Xq�W|j
d
|d|dd|dg}|�r.|�d�yt|�Wn0t
k
�rj}ztt|���Wdd}~XYnXdS)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,)rr�	unlimited��default�,z$Limits %(limits)s aren't acceptable.�limitszFLimit value '%(limit)s' isn't a positive integer or string %(default)s)�limitr0z--user-id=%dz--soft-limit=%sz--hard-limit=%s�z--forceN)r*�
isinstance�intr�type�tuple�list�len�split�
ValueErrorr%�appendrr	r+)rr,r2Zforce�exc_message�l�cmd�errr�set_user_inodes_limits_sH



z!ClQuotaLib.set_user_inodes_limitscCs|�|d�dS)zq
        Set unlimited inodes limits for user uid
        :param: int uid: user id
        :return: None
        r.N)rB)rr,rrr� set_user_inodes_limits_unlimited�sz+ClQuotaLib.set_user_inodes_limits_unlimitedcCs|�|d�dS)zo
        Set default inodes limits for user uid
        :param: int uid: user id
        :return: None
        r0N)rB)rr,rrr�reset_user_inodes_limits�sz#ClQuotaLib.reset_user_inodes_limitscCs�|jdk	rdS|��r|��s$t��y|�dg�}Wntk
rPd|_�YnXt�|_x:|��D].\}}t|dd�t|dd�f|j|<qdWd|jkr�d|_ddd|j	d	�d
�}t|��dS)zF
        Loads users info from cl-quota
        :return: None
        Nz--jsonr4r/r)z'There is no %(what)s found in %(where)szdefault settingsz	%s output)�what�where)rr)
r!r'r(r�_get_quotasr�dict�itemsr6r%)r�datar,r2r>rrrr*�s"
*
zClQuotaLib._load_users_infoc	Cs�t|j|�\}}yt�|�}Wn"ttfk
r@t|d��YnX|sLt��|ddkrzt|d|�di�|�d�d���|dS)N)r�resultZsuccessr�details)rrrLrI)	rr%�json�loads�	TypeErrorr<rr�get)rZcommand�_Zs_quota_limitsrJrrrrG�s
zClQuotaLib._get_quotascCs&|��r|��sdSt|jdg�dS)zV
        Reset inodes limits for all users to package limits
        :return:
        Nz--sync)r'r(rr%)rrrr�reset_inodes_limits�szClQuotaLib.reset_inodes_limitscCs�|jdk	rdS|��r|��s$t��y|�ddg�}Wntk
rRd|_�YnXt�|_xh|��D]\\}}|dd}|dkr�d}nt|�}|dd}|dkr�d}nt|�}||d�|j|<qfWdS)	zI
        Loads packages info from cl-quota
        :return: None
        Nz--jsonz--all-package-limitsr4�-rr/)ZsoftZhard)	r"r'r(rrGrrHrIr6)rZpackages�packager2Z
soft_limitZ
hard_limitrrr�_load_packages_info�s(
zClQuotaLib._load_packages_infocCs.|��|s|jS||jkr*||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
        )rUr")rZpackage_name_argrrr�get_reseller_package_limits�s
z&ClQuotaLib.get_reseller_package_limitscCsd|||rd|ndd�d�S)Nz3%(what)s set error for package=%(package)s%(error)sz [%s]�)rErT�error)rrr)rZparam�package_name�errrrrZ__set_errorszClQuotaLib.__set_errorcCs�dddid�}|��r|��s&t|��|�d�}t|�dkrNtdddid���d	|d
|dd|d
g}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
        z%(util)s is disabledrr)rrr1r/z%(util)s argument errorzcl-quotaz--package=%sz--soft-limit=%srz--hard-limit=%sr4z
Inodes limitsN)r'r(rr;r:rr%�_ClQuotaLib__set_error)rrYZ
limits_to_setrr2�cl_quota_cmd�ret_code�stdoutrrr�set_reseller_package_limits	s
z&ClQuotaLib.set_reseller_package_limitscCs�ddi}|��r|��s t|��t|�dkr8tddi��t|�ddhkspt|�ddh}tddd	�|�id
���d|��g}d|kr�|�d|d���d|kr�|�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-quotaZinodes_softZinodes_hardz-Incorrect limits for cl-quota: %(bad_limits)s�
bad_limitsz, )rrz
--package=z
--soft-limit=z
--hard-limit=z
Inodes limitsN)
r'r(rr:�set�joinr=rr%r[)rrYr2rr`r\r]r^rrr� set_package_limits_independently#s"z+ClQuotaLib.set_package_limits_independentlyN)F)r
rrr%r&rr'r(r-rBrCrDr*rGrRrUrVr[r_rcrrrrr 2s"
		
0	r )Z
__future__rrM�typingrrrZcllimits.librZclcommon.clexceptionrZclcommon.utilsrr	Zcllimits.lib.utilsr
rZcldetectlib�osrrrr rrrr�<module>
s