%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /usr/share/lve/modlscapi/user/
Upload File :
Create Path :
Current File : //usr/share/lve/modlscapi/user/selector_usage_lib.pyc

�
�cc@s�ddlZddlZddlmZddlmZddlmZmZm	Z	de
fd��YZd�Zd�Z
d	�Zd
�Zd�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZdS(i����N(tetree(tdeepcopy(tpretty_version_keyst
cpanel_whmapitdump_loaded_modulestSelectorStatExceptioncBseZdZRS(s
    Inner exception class
    (t__name__t
__module__t__doc__(((s3/usr/share/lve/modlscapi/user/selector_usage_lib.pyRscCs(djtjd��j�}|dkS(s�
    Check status of cagefs - installed & enabled
    If not - selector is not applied, no need to query its settings
    :return: True is cagefs is installed and enabled, False otherwise
    ts#/usr/sbin/cagefsctl --cagefs-statustEnabled(tjointexec_commandtstrip(t
cagefs_status((s3/usr/share/lve/modlscapi/user/selector_usage_lib.pytcagefs_enabledsccs�djtjd��}ytj|�jd�}Wntk
rMd}nXx,|D]$}|d}|dkrU|VqUqUWdS(s`
    Retrieve versions from selector, EXCEPT native
    :return: selector versions iterator
    R	s%/usr/bin/selectorctl --summary --jsontPHPConfigurationtversiontnativeN((RRtjsontloadstgett
ValueError(t
selector_datatselector_versionstitemtver((s3/usr/share/lve/modlscapi/user/selector_usage_lib.pytget_selector_versionss



csGdjtjdjd����}t�fd�|jd�D��S(s�
    Retrieve selector users for given version
    :param version: selector version, e.g 7.2
    :return: dict user: version, e.g. {user: alt-php72, user1: alt-php72}
    R	s//usr/bin/selectorctl --list-users --version={v}tvc3s*|] }|r|t�d�fVqdS(salt-phpN(R(t.0tu(R(s3/usr/share/lve/modlscapi/user/selector_usage_lib.pys	<genexpr>2st,(RRtformattdicttsplit(Rtusers((Rs3/usr/share/lve/modlscapi/user/selector_usage_lib.pytget_selector_users+s$cCsDt�st�St�}x$t�D]}|jt|��q#W|S(sY
    Retrieve versions set for users in selector
    :return: dict { user: version }
    (RR!RtupdateR$(t	users_verR((s3/usr/share/lve/modlscapi/user/selector_usage_lib.pytget_selector_usage5s		cCstd�jd�}|j|�dkr.|Sd|kr	dt�kr	t|�}t|�}t|�}t|j|t��|�\}}|||<t|�}	x[|	j	�D]M\}
}||kr�|	|
j
i||6�|	|
j
t||��q�q�W|	S|SdS(sD
    Check EA4 selector settings. Statistics per handler is inspected.
    Selector on EA4 does not change handler, it changes version only.
    Selector version is applied only in case of all the following circumstances:
     - suexec_module is enabled
     - system default version is not alt-php
     - selector setting is not native
    :param ver_domains_list: set of domains per version
    :param domain_user_dict: domain--user correspondence
    :param handlers_mapping: per handler statistics
    :return: set of domains per version checked against selector settings
    tphp_get_system_default_versionRsalt-phpt
suexec_moduleN(RRtNoneRtea4_revert_domains_user_structtget_selector_domainsRtmatchertsett	iteritemsR%tmerger(tver_domains_listtdomain_user_dictthandlers_mappingtdefault_vertuser_domainst
s_ver_domainstapi_ver_listtdefault_domains_matchedt
s_ver_matchedthandlersthR((s3/usr/share/lve/modlscapi/user/selector_usage_lib.pytea4_selector_checkDs $
!cCsFt�}x6|j�D](\}}|j|t��j|�qW|S(s�
    Revert structure `domain`: `user` to structure `user`: set of domains
    :param domains_user_dict: dict of domains per user correspondence
    :return: dict user: set_of_domains
    (R!R/t
setdefaultR.tadd(tdomains_user_dictR5tdomaintuser((s3/usr/share/lve/modlscapi/user/selector_usage_lib.pyR+vs	 cCs^t�}t�}xE|j�D]7\}}|j|t��j|j|t���qW|S(s�
    Retrieve domains set for selector versions
    :param domains_of_user: `user`: set of domains structure
    :return: dict selector_ver: set of domains
    (R'R!R/R=R.R%R(tdomains_of_usertselector_usersRRAts_ver((s3/usr/share/lve/modlscapi/user/selector_usage_lib.pyR,�s
		/cCsWxJ|j�D]<\}}|dkr+q
n||j|�|j|�q
W||fS(s�
    Match domains sets between system default version and selector versions:
    - for system default version domains get difference with selector domains
    - for selector domains get intersection with system default version
    Common for cPanel and Plesk
    :param system_default_api_domains: set of domains using system default version
    :param selector_versions: dict selector_ver: set of domains
    :return: tuple(clean_default_domains, clean_selector_domains)
    R(R/tintersection_updatetdifference_update(tsystem_default_api_domainsRRtdom_list((s3/usr/share/lve/modlscapi/user/selector_usage_lib.pyR-�s
cCs_t||�}xI|j�D];\}}y|j||�||<Wqtk
rVqXqW|S(s+
    Merge matched structures of domains (common for cPanel and Plesk)
    :param clean_api_versions: API_version: set of domains structure after match
    :param clean_selector_versions: selector_version: set of domains structure after match
    :return: unified structure version: domains_set
    (R!R/tuniontKeyError(tclean_api_versionstclean_selector_versionstmergedRRH((s3/usr/share/lve/modlscapi/user/selector_usage_lib.pyR0�s
cCs�|jd�rpt�}t|�}t|�}t|jdt��|�\}}||d<t||�}n|}t||�S(s|
    Check Plesk selector settings.
    Selector version is applied only to LSPHP by vendor OS handlers, e.g. x-httpd-lsphp-custom
    :param ver_domains_list: list of domains per version, including `custom` handler version
    :param custom_ver: real version, to which Plesk resolves `custom` handler
    :return: set of domains per version checked against selector settings
    tcustom(Rtplesk_get_user_domainsR,RR-R.R0tplesk_manage_custom(R1t
custom_verR5R6R7tcustom_domains_matchedR9RM((s3/usr/share/lve/modlscapi/user/selector_usage_lib.pytplesk_selector_check�s		$
cCstt�t��S(sc
    Find `user`: `domains` correspondence for Plesk
    :return: dict(`user`: set of domains)
    (R0t'plesk_get_domains_under_new_subsciptiont,plesk_get_domains_under_existing_subsciption(((s3/usr/share/lve/modlscapi/user/selector_usage_lib.pyRO�s	cCs
td�S(sg
    Get users' domains, added under existing subscription
    :return: dict(user: set_of_domains)
    s�select login,name from domains inner join Subscriptions as sc on domains.webspace_id=sc.object_id inner join sys_users as u on sc.id=u.id where domains.webspace_id!=0 and sc.object_type="domain"(tplesk_query_db(((s3/usr/share/lve/modlscapi/user/selector_usage_lib.pyRU�scCs
td�S(sb
    Get users' domains, added under new subscription
    :return: dict(user: set_of_domains)
    s�select login,name from domains inner join Subscriptions as sc on domains.id=sc.object_id inner join sys_users as u on sc.id=u.id where domains.webspace_id=0 and sc.object_type="domain"(RV(((s3/usr/share/lve/modlscapi/user/selector_usage_lib.pyRT�scCs�t�}tjdjd|��}y~tjdj|��}x_|jd�D]N}|jd�dj}|jd�dj}|j	|t
��j|�qOWWn2tjtj
fk
r�tdj|���nX|S(	s{
    Query Plesk database for user:domain correspondence and get result in XML
    :return: dict(user: set_of_domains)
    splesk db '{q}' --xmltqR	trowsfield[@name='name']isfield[@name='login']s-Failed to parse XML from plesk db output: {0}(R!RR Rt
fromstringRtitertxpathttextR=R.R>tXMLSyntaxErrort
ParseErrorR(tqueryR5t
xml_resulttrootRXtdomain_namet	user_name((s3/usr/share/lve/modlscapi/user/selector_usage_lib.pyRV�s	$cCsq|rm|j|t��}|j|jdt���|ji||6�y|d=Wqmtk
riqmXn|S(s\
    Unify `custom` domains with `real_version` domains,
    clear `custom` key from resulting `version`: `set of domains` mapping
    :param versions_mapping: final merged structure of domains
    :param real_version: version, to which Plesk resolves custom
    :return: final mapping with `custom` domains unified with `real_version` domains
    RN(RR.R%RJ(tversions_mappingtreal_versiontreal_version_domains((s3/usr/share/lve/modlscapi/user/selector_usage_lib.pyRP�s
cCs\|rMt|�}t|�}t||�\}}ti||6|�}|Si||6SdS(sv
    Check DA selector settings
    :param primary_ver_domains: set of domains using primary version, e.g. php1_release
    :param domains_per_user: user--domain correspondence
    :param primary_php: php version set in options.conf as php1_ver, only this version is affected by selector
    :return: set of domains per primary version checked against selector settings
    N(R,RR-R0(tprimary_ver_domainstdomains_per_usertprimary_phpR6R7R8R9RM((s3/usr/share/lve/modlscapi/user/selector_usage_lib.pytda_selector_checks	(RRtlxmlRtcopyRt
stat_utilsRRRt	ExceptionRRRR$R'R<R+R,R-R0RSRORURTRVRPRj(((s3/usr/share/lve/modlscapi/user/selector_usage_lib.pyt<module>s*	
		
		2		
			!						

Zerion Mini Shell 1.0