%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /proc/227033/root/opt/alt/python27/lib/python2.7/site-packages/clquota/
Upload File :
Create Path :
Current File : //proc/227033/root/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyc

�
i�B^c@`s�ddlmZddlmZddlmZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZm
Z
mZmZmZddlmZddlmZddlmZdd	lmZmZmZdd
lmZddlmZddlm Z m!Z!m"Z"dd
l#m$Z$dZ%de&fd��YZ'de&fd��YZ(de&fd��YZ)de&fd��YZ*de&fd��YZ+de&fd��YZ,d�Z-d�Z.de/fd��YZ0dS(i(tprint_function(tdivision(tabsolute_importN(tS_IRUSRtS_IWUSRtS_IRGRPtS_IROTHtST_DEV(tmap(t	iteritems(tCPAPIExternalProgramFailed(t
check_commandtrun_commandtExternalProgramFailed(tClPwd(tdefaultdict(t
list_userstadmin_packagestresellers_packages(tcheck_quota_enabledtdefaulttNoSuchPackageExceptioncB`seZd�ZRS(cC`stj|d|f�dS(NsNo such package (%s)(t	Exceptiont__init__(tselftpackage((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR#s(t__name__t
__module__R(((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR"stNoSuchUserExceptioncB`seZd�ZRS(cC`stj|d|f�dS(NsNo such user (%s)(RR(Rtuser((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR(s(RRR(((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR'stInsufficientPrivilegesExceptioncB`seZd�ZRS(cC`stj|d�dS(NsInsufficient privileges(RR(R((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR-s(RRR(((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR,stIncorrectLimitFormatExceptioncB`seZd�ZRS(cC`stj|d|f�dS(NsIncorrect limit format (%s)(RR(Rtlimit((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR2s(RRR(((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR1stGeneralExceptioncB`seZd�ZRS(cC`stj||�dS(N(RR(Rtmessage((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR7s(RRR(((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR!6stQuotaDisabledExceptioncB`seZdddd�ZRS(cC`s_d}|r|d|7}n|r4|d|7}n|rK|d|7}ntj||�dS(NsQuota disableds for user id %ss (home directory %s)s; %s(RR(RtuidthomedirR"tall_msg((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR<sN(RRtNoneR(((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR#;sc	C`s[|ddkr|d7}nd
}|dkr3tSx!|D]}|j|�r:tSq:WdS(sd
    >>> _is_sys_path('/home/username')
    False
    >>> _is_sys_path('/var/davecot')
    True
    i����t/s/root/s/usr/s/var/s/sbin/s/dev/s/bin/s/srv/s/sys/s	/etc/ntp/N(	s/root/s/usr/s/var/s/sbin/s/dev/s/bin/s/srv/s/sys/s	/etc/ntp/(tTruet
startswith(tpatht	sys_path_tpath_((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyt_is_sys_pathGs

cC`sLt�}|j�}g|D]&}t||j�s||j^q}|S(s)
    Return no system users uid list
    (Rt
get_user_dictR.tpw_dirtpw_uid(tcl_pwdtpw_dicttusrt	users_uid((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyt_get_users_listXs	3tQuotaWrappercB`s�eZdZdZdZdZdZdZdZdAZ
edZeZ
d�Zd	�Zd
�Zd�Zd�Zd
�ZdAd�Zd�Zed�ZdAdAeeeed�ZdAdAeeed�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z e!d��Z"dAdAd�Z#dAdAd�Z$dAdAd�Z%dAdAd�Z&dAdAd�Z'dAdAd �Z(dAdAd!�Z)dAdAd"�Z*dAd#�Z+dAed$�Z,d%�Z-d&�Z.d'�Z/dAd(�Z0d)�Z1dAd*�Z2d+�Z3d,�Z4d-�Z5d.�Z6d/�Z7d0�Z8d1�Z9d2�Z:d3�Z;d4�Z<d5�Z=d6�Z>d7�Z?d8�Z@d9�ZAd:�ZBd;�ZCd<�ZDd=�ZEd>�ZFed?�ZGd@�ZHRS(Bs4
    Base quota class for inode quotas handling
    s/proc/mountss/usr/sbin/setquotas/usr/sbin/repquotas%/usr/bin/getcontrolpaneluserspackagess/etc/container/cl-quotas.dats/etc/container/cl-quotas.caches.lockcC`s�ttj�ttj�ttj�t�|_d|_i|_	i|_
i|_i|_i|_
i|_|j�|_ddddddg|_tj�|_|j�|_|j|j�|_d|_d|_dS(Nt
bytes_usedt
bytes_softt
bytes_hardtinodes_usedtinodes_softtinodes_hard(RR7tPROC_MOUNTStREPQUOTAtSETQUOTAtlistt_quota_enabled_listR't_panel_presentt_gracet_quotat
_device_quotat_package_to_uids_mapt_uid_to_packages_mapt_uid_to_homedir_mapt_get_saved_data_handlert_dht_fieldstostgeteuidt_euidt_load_quota_devicest_devicest_get_mountpoint_device_mapt_mountpoint_device_mappedt_device_user_mapt_all_package_list(R((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyRss$


								cC`s|S(N((R((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyt	__enter__�scC`s|jj�dS(N(tLOCK_FDtclose(Rttypetvaluet	traceback((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyt__exit__�scC`s|j|j|��S(s9
        Returns user limits converted to tuples
        (t_convert_data_to_tuplest_get_current_quotas(RR$((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pytget_user_limits�scC`s|j|j��S(s=
        Returns all user limits converted to tuples
        (R]R^(R((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pytget_all_users_limits�scC`s|j|jd|��S(s�
        :param packname: Package name for get limits. If None, returns all packages,
                          else - only supplied package
        Returns package limits converted to tuples (called only from main)
        tpackname(R]t_get_package_quotas(RR((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pytget_package_limits�scC`s|j|jd|dt��S(sY
        Returns all packages limits converted to tuples (called only from main)
        Ratall_packages(R]RbR)(RR((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pytget_all_packages_limits�scC`s-|dkrdS|dkr dS|j|�S(s�
        Preprocessed passed limit: 'default' --> '0', 'unlimited' --> -1, else calls _check_limit
        :param limit:
        :return:
        Rt0t	unlimiteds-1(Rgs-1(t_check_limit(RR ((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyt_preprocess_limit�s
cC`sCi}i}|jjd�r�t|jjd��dkr�|j�}x�|jjd�D]}|r�||kr�|jjd|�q[n|jjd|�jd�}t|�dkr�q[n|d|df||<q[W|r�|j	�q�n|j
�x>|jj�D]-}||kr1||||<qd||<qW|S(s�
        Retrive all available packages with their limits
        :param clean_dead_packages: if True - remove all nonexistent packages from cl-quotas.dat
        :return: Dictionary: { 'package_name': (soft_limit, hard_limit) }
        tpackagesit:iiRf(RfRf(
RKthas_sectiontlentitemst_get_all_package_listtoptionst
remove_optiontgettsplitt_write_datat_get_package_to_users_mapRGtkeys(Rtclean_dead_packagestpackage_limits_dicttdb_packagestlist_of_packagesRtpackage_limits((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyt_get_all_packages_with_limits�s(0
c
C`s�|r#|dks|dkr#dS|j�|}|}	|j|�}|j|	�}|dkr|dkrxd}n|dkr�d}n|jjd�r�|jjdd�r�|jjdd�jd�}
|p�|
d}|p�|
d}n|p�d}|p
d}|jd|d	|�|r�|dkr>d}n|dkrS|}n|	dkrhd}n|dkr}|}n|j	ddd|d	|�n|j
�|_|j�}
xX|
D]P}|
|\}}|dks�|dkr�|j|||||d|�q�q�WdS|rC|j
d|d|d	|�\}}nd\}}||}}|dkst|dkr}d}n|dks�|dkr�d}n|j|�}||}|d
|ks�|d|ks�|rC|j|�d}|tkr|jjd�rX|jjd|�rX|jjd|�jd�}
|
d}|
d}nd}d}|pm|}|py|}n|}|}tjd||d|d|||j|j|��g}t|�|rC|dkr�d}n|dkr|}n|dkrd}n|dkr*|}n|j	|||�qCn|dkr[|dkss|dkr�|dkr�|j	|||�ndS(s=
        Sets limits for users
        :return: None
        NRfs-1tusersRkiitsoftthardRgR$t
only_storeR=R<s-uR9R:(s-1Rg(s-1Rg(RfRf(Rfs-1(Rfs-1(R't_check_adminRiRKRlt
has_optionRrRst_apply_to_all_if_not_sett_save_user_limitsRJR|tset_package_limitt_combine_user_limitsR^t_get_uid_to_packages_maptDEFAULT_PACKAGER7R@t_get_home_devicet_fetch_homedirR(RR$R~Rtsavetsynct
force_saveR�tsoft_argthard_argtlimitst
cache_softt
cache_hardRxRtp_softtp_hardtuser_combine_softtuser_combine_hardt	user_softt	user_hardtsaved_quotastcachedtuser_packaget
soft_limitt
hard_limittcmd((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pytset_user_limit�s�
		'				
&'
		
&'


				0c	C`s�|tkrdS|r3|dks/|dkr3dS|j�|j|�}|j|�}g}|r�|j|||�\}}n|r�||jdt�kr�||j�kr�|j|||�dSy|j|�Wnt	k
r�|r�dSnX|j
�}|j�}	x�|j�D]�}
x|j|�D]	}|||
krRq6n|j
d|d|d|�}|s|q6n|dkr�d}
n|dp�d}
|dkr�d}n|d	p�d}ye|j|	|d
|	|df|
|f�s*|jd||	|d
|	|d|
|f�nWq6tk
r>q6Xq6Wt|�dkr[q ndj|�d}|r�|
|jkr�d|j|
<n|j|
||j|
<n"tjd|
g}t|d|�g}q W|r�|j|||�ndS(s?
        Sets limits for package
        :rtype : None
        NRdR$R~Rs-1RfiiR<R=s%s %s %s %s %sR9R:s
ts-butstd_in(R�R'R�Rit!_get_saved_package_limits_if_noneRbR)Rut_save_package_limitsRt_get_device_user_mapR^Rvt_combine_package_limitstlimits_are_equaltappendtKeyErrorRmtjoinRFR7R@R(RRR~RR�R�R�R�tdevice_user_mapR�tdeviceR$tdataR�R�R�((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR�Lsp

		

c	C`s~|j�|jt�}x@|j�D]2}||\}}|j|||tdt�q&Wi|_|jjd�r7x�|jj	d�D]�}yo|j
|�|jjd|�jd�}t
|�dkr�w�n|\}}|j|||tdt�Wq�tk
r%|jjd|�q�Xq�W|j�nx@|jj�D]/}tjd|g}t|d|j|�qGWdS(sN
        Read limits from file and applies them to packages and users
        R�R}Rkis-buR�N(R�R|R)RvR�tFalseRERKRlRpR�RrRsRmR�RRqRtRFR7R@R(	RR{RR~RR$R�R�R�((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pytsynchronize�s*
 	
 

c`s�|j�g}|j��xXtt�j��dt�D]8�|j�gtt��fd�|j���q;W|j	t
�|jtj
�}tj|dtj�}|j|�|jtj
�|j�dS(sF
        Caches the limits to non-privileged user to see them
        tkeyc`s��|S(N((tx(tcurrent_quotastk(sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyt<lambda>�R�tquotingN(R�R^tsortedRARvtintR�RRLt_get_global_lockR)t_prepare_writerR7t	CACHEFILEtcsvtwritert
QUOTE_MINIMALt	writerowst_end_writert
_release_lock(Rt
cache_contenttfile_handlertcsv_out((R�R�sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pytsave_user_cache�s
%6

cC`s:|jdkr3dtddg�j�k|_n|jS(s6
        Return True if control panel present
        tUnknowns/usr/bin/cldetects--detect-cp-nameonlyN(RCR'Rtrstrip(R((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyt_check_present_panel�s$cC`s|jdkrt��ndS(s2
        Raise exception if no admin user
        iN(ROR(R((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR��scC`s@|jt�tj�}t|_|jtj�|j�|S(s:
        Gets ConfigParser handler for future use
        (	R�R)tConfigParsertstrtoptionxformtreadR7tDATAFILER�(Rtdh((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyRJ�s
	
cC`s�|jdk	r|jSi}g}xT|j�D]F}y)|j|j|j|��|f�Wq/tk
rtq/q/Xq/WxH|D]@}|d|kr�g||d<n||dj|d�q�W||_|jS(sF
        Returns dictionary mapping devices to lists of users
        iiN(RTR't_get_list_of_uidsR�R�R�R�(Rtdevices_maptdevice_user_pairsR$tpair((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR��s)

	cC`s\|dks|dkr|Stjd�}|j|�}|sOt|��n|jd�S(Ns-1s(\d+)i(R'tretcompiletsearchRtgroup(RR t
limit_patternt
pattern_match((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyRh�scC`s||krtStS(s�
        Compare tuples
        :param limits1: tuple
        :param limits2: tuple
        :return: True of tuple 1 equal to tuple 2
        (R)R�(tlimits1tlimits2((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR��sc

C`sgg}|j�}|j�}xB|j�D]4}tjd|g}x�|j�D]�}|||ksPt|j|�kr�qPn|jd|d|d|�}	|	s�qPn|j	||d||df|	�sP|j
d|||d||d	|	d
pd|	dpdf�qPqPWt|�d
kr6q+nd
j|�d
}t
|d|�g}q+WdS(sr
        Applies limits to all users if no other (user or package) ones has
        not been set for them
        s-buR$R~RR<R=s%s %s %s %s %sR9R:iRfis
R�N(R�R^RvR7R@R�R�R�t_combine_default_limitsR�R�RmR�R(
RR~RR�R�R�R�R�R$R�((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR�s.%(	
cC`s�|jd|d|d|�\}}d\}}x;|j|�D]*}|jd|d|d|�\}}q@W|jddd|d|�\}	}
|	dkr�d}	n|
dkr�d}
n|	|
fS(sc
        Determines user limits taking into account
        saved package and default ones
        R$R~RRRfN(NN(t_get_saved_user_limits_if_noneR'R�t*_get_saved_package_limits_if_none_or_unlimt'_get_saved_user_limits_if_none_or_unlim(RR$R~Rtu_softtu_hardR�R�Rtd_softtd_hard((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR�&s$($		cC`sn|jd|�\}}|r(|r(dS|dkr=|}n|dkrR|}n|jddd|d|�S(sc
        Determines package limits taking into account
        saved user and default ones
        R$RfR~R(N(R�R'R�(RR$R~Rtt_softtt_hard((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR�8s		cC`sv|jd|�\}}|dk	r-|}n|dk	rB|}n|dkrWd}n|dkrld}n||fS(s�
        Determines default limits taking into account saved user and package ones
        :param soft: soft limit from uid=0
        :param hard: hard limit from uid=0
        R$s-1RfN(R�R'(RR$R~RR�R�((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR�Fs				cC`s�yj|jjd|�jd�\}}|dkrH|dkrH|}n|dkri|dkri|}nWntjtjfk
r�nX|j|�}|j|�}||fS(s?
        Retrives saved user limits if none has passed
        R}RkRfN(RKRrRsR'R�tNoSectionErrort
NoOptionErrorRh(RR$R~RR�R�((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR�Xs$	
cC`s�y�|jjd|�jd�\}}|dkr<d}n|dkrQd}n|dksi|dkr~|dkr~|}n|dks�|dkr�|dkr�|}nWntjtjfk
r�nX|j|�}|j|�}||fS(sN
        Applies saved user limits if none or unlimit has been passed
        R}Rks-1RfN(RKRrRsR'R�R�R�Rh(RR$R~RR�R�((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR�hs$		$	$
cC`s�|tkr�yj|jjd|�jd�\}}|dkrT|dkrT|}n|dkru|dkru|}nWq�tjtjfk
r�q�Xn|j|�}|j|�}||fS(sA
        Applies saved package limits if none has passed
        RjRkRfN(	R�RKRrRsR'R�R�R�Rh(RRR~Rt	pack_softt	pack_hard((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR�}s$	
cC`s�|tkr�y�|jjd|�jd�\}}|dksK|dkr`|dkr`|}n|dksx|dkr�|dkr�|}nWq�tjtjfk
r�q�Xn|j|�}|j|�}||fS(sQ
        Applies saved package limits if none or unlimit has been passed
        RjRkRfN(	R�RKRrRsR'R�R�R�Rh(RRR~RR�R�((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR��s$$	$
cC`s�|jdkr|j�S|js4|j�|_n|r�yi|j||6SWq�tk
r||j|�t|��q�Xn|jS(s�
        Retrieves current quotas.
        If euid == 0, use data from repquota utility, else from /etc/container/cl-quotas.cache file
        i(ROt_load_user_cacheREt_load_current_quotasR�t_check_if_quota_enabledR(RR$((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR^�s
	

c	C`s�i}|r|j�}n|j�}x|D]}dg}y�|dkrs|jjdd�jd�\}}n$|jjd|�jd�\}}|j|�}|j|�}|dkr�d}n|dkr�d}n|j||g�Wn0tjtj	fk
r%|jddg�nX|j
|j||��q.W|ryi|||6SWqtk
r{t
|��qXn|S(sa
        Prepares package limits data for outputting
        (call only from get_package_limits/get_all_packages_limits - main)
        :param packname: Package name for get limits. If present, function returns
                            limits only for this package, else - all packages
        :param all_packages: If False reads only used and admin's packages, True - all packages
                                (including reseller packages without users)
        :return Dictionary of package limits:
            {package_name: {'inodes_used': 'xxx', 'inodes_soft': 'yyy', 'inodes_hard': 'zzz'}
        t-RR}RfRkRjs-1(Rot_get_list_of_packagesRKRrRsRhtextendR�R�R�tupdatet	_populateR�R(	RRaRdtqRzRtvaluesR~R((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyRb�s4
	'$		
c`s6ittt�fd�t|jd����|6S(Nc`s|d�|dfS(Nii((R�(R�(sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR��R�i(tdictRARt	enumerateRL(RtitemR�((R�sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR��scC`st|j�j��S(N(RARuRv(R((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR��scC`st|j�j��S(N(RAR�Rv(R((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR��scC`sZ|js|j�|_n|rSy|j|SWqStk
rOt|��qSXn|jS(N(RGt_load_package_uids_dataR�R(RR((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyRu�s	
cC`si||jkrdS|j|�}td|�}|rUtd|d|d|��n|jj|�dS(NR+R$R%R"(RBR�RR#R�(RR$thome_dirtquota_disabled_message((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR��scC`sZ|js|j�|_n|rSy|j|SWqStk
rOt|��qSXn|jS(N(RHR�RGR�R(RR$((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR��s	
c	C`sAy
t�}Wn/ttfk
r>}tdt|���nXtt�}tt�|_xUt|�D]G\}}t|�}|d}||j	|�|j|j	|�qgWyt
dt�}Wn/ttfk
r�}tdt|���nXx*|D]"}||krq�ng||<q�Wt|kr=g|t<n|S(s�
        Retrieve package-uids map from cpapi. Only for custom panels. See LU-610 for details
        :return: Dictionary with data. Example:
            {'default': ['1038', '1043', '1046'], 'res1_pack1': ['1044'], 'pack1': ['1042']}
        s%s. Can not get usersRt	raise_excs%s. Can not get admin packages(
RtOSErrorR
R
R�RRARHR	R�RR)R�(	Rtusers_packagestetpackages_usersR$tuid_datats_uidRt
admin_pkgs((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyt_get_packages_uids_from_cpapis,



cC`sli}|jdkr|S|j�sbtttt���|t<td�|tD��|_|S|j	�S(s�
        Gets map of packages and users
        :rtype dict
        :return Dictionary with data. Example:
            {'default': ['1038', '1043', '1046'], 'res1_pack1': ['1044'], 'pack1': ['1042']}
        ics`s|]}|tfVqdS(N(R�(t.0ti((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pys	<genexpr>8s(
ROR�RARR�R6R�R�RHR�(RRj((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR�*scC`sg|jr|jSy^g|_tdt�}x?|D]7}t|t�rY|jd�}n|jj|�q2WWn/ttfk
r�}t	dt
|���nXyltdt�}xV|j�D]H}x?|D]7}t|t�r�|jd�}n|jj|�q�Wq�WWn/ttfk
r=}t	dt
|���nXt
|jkr`|jjt
�n|jS(sm
        Retrives all (root and resellers) panel package list
        :return: List of package names
        R�sutf-8s%s. Can not get admin packagess!%s. Can not get reseller packages(RURR)t
isinstancetunicodetencodeR�R�R
R
R�RR�R�(Rtlist_admin_packagesRR�tdict_resellers_packagest
packages_list((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyRo=s.		

c`shxa�j�D]S�y6tt��fd�|jd��}|��<Wq
tk
r_q
q
Xq
W�S(sI
        Convert dict to tuples for passing to printing routines
        c`s|��|fS(N((R�(R�R�(sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR�cR�i(RvttupleRRLR�(RR�tentry((R�R�sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR]]s
c`s�i}d}�j}tjdg}t|�}tjdtj�}x�|j�D]�}|j	d�rd|ssqRn|j
�}t|�dkr��j|�}n|dd}	|	dkr�qRny~||kr��j
|�}n||kr@�j�j|	�|�r@ttt�fd�t|d	����||	<nWq�tttfk
r`qRq�XqR|j	d
�r�||jd�j�}qRd|krR|j|�}
|
r��jjtttd
�|
����q�qRqRW|j�j��|S(sZ
        Gets current quota settings from repqouta utility for further processing
        s-unas2(block|inode)\sgrace\stime:?\s(\d[\w:]+)(?:;|$|\s)t#iiiRfc`s�j|d|dfS(Nii(RL(R�(R(sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR��R�is***s/devtgracecS`s|dj�|dfS(Nii(tlower(R�((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR��R�N(R'RQR7R?RR�R�t
IGNORECASEt
splitlinesR*RsRmt#_remove_redundant_fields_from_inputt_find_unknown_devicet_is_home_deviceR�R�RARR�R�t
IndexErrorRtfindtstriptfindallRDR�t_add_default(RR�R�tdevicesR�R�tgrace_regex_patterntlinetpartsR$tfound((RsA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR�js>	'9
2cC`sP|d }tjd�}|jg|dD]}|j|�r*|^q*�|S(Nis^\d+$(R�R�R�R�(RRtstripped_partstis_digit_patterntfield((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR�s

-cC`sqt|j�dkr>|jjtd�tj�D���ny|j|SWntk
rlt|��nXdS(Nics`s'|]}t|j�|jfVqdS(N(R�R1R0(RR	((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pys	<genexpr>�s(RmRIR�R�tpwdtgetpwallR�R(RR$((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR��s	
c	C`sEi}ttj�}tjd�}x�|D]�}|jd�rFq+n|j|�}|d}i|dd6}xo|D]g}|jd�s�|jd�r�|jd�d|d	<qw|jd
�rw|jd�d|d<qwqwW||kr||j|�q+|g||<q+W|j�t	|�dkrAt
dd
��n|S(sj
        Gets mounted filesystems list and picks ones with quota on

        Example of returned data structure:
            {'/dev/mapper/VolGroup-lv_root': [
                {'mountpoint': '/', 'quota_file': 'quota.user', 'quota_type': 'vfsv0'},
                {'mountpoint': '/var', 'quota_file': 'quota.user', 'quota_type': 'vfsv0'}
                ],
            '/dev/mapper/VolGroup-lv_root2': [
                {'mountpoint': '/', 'quota_file': 'quota.user', 'quota_type': 'vfsv0'},
                {'mountpoint': '/var', 'quota_file': 'quota.user', 'quota_type': 'vfsv0'}
            ]
            }
        s |,srootfs /iit
mountpoints	usrquota=susruota=t=t
quota_filesjqfmt=t
quota_types	all userssall filesystems(topenR7R>R�R�R*RsR�RXRmR#(	RRtproc_mounts_streamt
split_pattRtline_splitedR�tmountpoint_datatline_splited_element((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyRP�s*



c
`s/i}y2�j�ttj�}tj|dd�}WnAttfk
r{�j�it	j
�jd�t�j
�6SX�j�t�j
�}xj|D]b��d|kr�|jit	tt��fd�tt�j������d6�Pq�q�W|s+it	j
�jd�t�j
�6S|S(sJ
        For non-privileged user we outputting data from the file
        t	delimitert,Rfic`s�j|�|dfS(Ni(RL(R�(trowR(sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR��R�(R�R%R7R�R�treaderR�tIOErrorR�R�tfromkeysRLR�ROR�RARtrangeRm(RR�tfotcvs_inR$((R-RsA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR��s$

$

6#cC`std�}g}xHt|�D]:\}}x+|D]#}|d}|j||f�q/WqW|jd|dt�|S(s�
        return list tuple ('mountpoin tpath', 'device') reverse sorted by deep mountpoint path
        [('/mountpoint_path/path', '/device'), ('/mountpoint_path', '/device')]
        cS`s0|ddkrd}n|djd�}|S(NiR((tcount(tdevice_mountpointt	deep_path((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pytsort_by_deep_path�s	R!R�treverse(R	R�tsortR)(RRR7tmountpoint_device_mapR�tmountpoint_data_listR)tmountpoint_path((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyRR�s	

cC`sXd�}|tjj|��}x0|jD]%\}}|j||��r+|Sq+WdS(s3
        Returns device user homedir is on
        cS`s'|r#|ddkr#|d7}n|S(Ni����R(((R+((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyt
_add_slash�s
N(RMR+tdirnameRSR*(RthomeR=R>tmounpoint_pathR�((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR��s
	cC`s|j|�|kS(s;
        Checks if a device is user homedir device
        (R�(RR?R�((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyRscC`s�y�tj|�t}tj|�tj|�f}xR|jj�D]A}tj|�t}|tj|�tj|�fkrD|SqDWWntk
r�|SXdS(N(RMtstatRtmajortminorRQRvR�(RR�tdevtdev_to_findtcurrent_device((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyRs$
c`s�ddddg�ye|jjdd�jd�\}}|dkrNd}n|dkrcd}n�j||g�Wn0tjtjfk
r��jddg�nXittt	�fd�t
|j����d6S(sw
        Insert 'default' quota.
        Calls only from _load_current_quotas, after parsing repquota's output
        R�RfR}Rks-1c`s|d�|dfS(Nii((R�(R�(sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR�!R�(RKRrRsR�R�R�R�R�RARR�RL(RR�R�((R�sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyRs$		cC`s�|dkrd}n|dkr*d}n|j|||�\}}|dks]|dkr�|dks�|dkr�|jjd�r�|jjd|�nE|jjd�s�|jjd�n|jjd|d||f�|j�dS(s#
        Saves user limits
        RfR}s%s:%sN(R'R�RKRlRqtadd_sectiontsetRt(RR$R~R((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR�#s		* cC`s�|dkrd}n|dkr*d}n|j|||�\}}|dks]|dkr�|dks�|dkr�|jjd�r�|jjd|�nE|jjd�s�|jjd�n|jjd|d||f�|j�dS(s&
        Saves package limits
        RfRjs%s:%sN(R'R�RKRlRqRGRHRt(RRR~R((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR�5s		0 cC`s�|dkrI|dkrIy|jj||�Wq�tjk
rEq�XnE|jj|�sn|jj|�n|jj||d||f�|j�dS(s&
        Saves data to a file
        Rfs%s:%sN(RKRqR�R�RlRGRHRt(RR~RR�t	item_type((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyt
_save_dataGs cC`s�tjj|�}yAtjddd|�\}}tj|d�}||_|SWnEttfk
r�tjj	|�r�tj
|�ntd��nXdS(sH
        Open temporaty file for writing and return file object
        tprefixtlvetmp_tdirtwbsCould not save dataN(RMR+R>ttempfiletmkstemptfdopent_tmpR/R�texiststunlinkR!(RtfilepathR+tfdt	temp_pathR�((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR�Vs	cC`sQy9ttBtBtB}tj|j|�tj||�Wntk
rLnXdS(s0
        Routines after writing to file
        N(	RRRRRMtrenameRRtchmodR�(RR+tmask((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR�es
cC`sM|jt�|jtj�}|jj|�|jtj�|j�dS(s7
        Actual place of saving data to a file
        N(	R�R)R�R7R�RKtwriteR�R�(RR�((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyRtps

cC`s�|rtt_ntjdkr�yttjd�t_Wn#ttfk
r_t	d��nXy t
jtjj�t
j
�Wq�tk
r�t	d��q�XndS(Ntrs Can't open lock file for readingsCan't get lock(R)R7t
LOCK_WRITERWR'R%t	LOCK_FILER/R�R!tfcntltflocktfilenotLOCK_EX(RR[((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR�|s 
cC`s6tjr2tjdk	r2tjj�dt_ndS(N(R7R]RWR'RX(R((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR��s
N(IRRt__doc__R>R@R?tGETPACKSR�R�R'RWR^R�R]RRVR\R_R`RcReRiR|R)R�R�R�R�R�R�RJR�RhtstaticmethodR�R�R�R�R�R�R�R�R�R^RbR�R�R�RuR�R�R�R�RoR]R�RR�RPR�RRR�RRRR�R�RJR�R�RtR�R�(((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyR7ds�
							"rH								-			
	

	%		 	
	$			&			
									
(1t
__future__RRRRMR�RR�R�ROR_RARRRRRtbuiltinsRtfuture.utilsR	tclcommon.cpapi.cpapiexceptionsR
tclcommon.utilsRRR
tclcommon.clpwdRtcollectionsRtclcommon.cpapiRRRtclcommon.clquotaRR�RRRRRR!R#R.R6tobjectR7(((sA/opt/alt/python27/lib/python2.7/site-packages/clquota/__init__.pyt<module>	s8(		

Zerion Mini Shell 1.0