File: //usr/share/lve/modlscapi/user/selector_usage_lib.pyc
�
��dc @ s� d d l Z d d l Z d d l m Z d d l m Z d d l m Z m Z m Z d e
f d � � YZ d � Z d � Z
d � Z d
� Z d � Z d � Z d
� Z d � Z d � Z d � Z d � Z d � Z d � Z d � Z d � Z d � Z d S( i����N( t etree( t deepcopy( t pretty_version_keyst
cpanel_whmapit dump_loaded_modulest SelectorStatExceptionc B s e Z d Z RS( s
Inner exception class
( t __name__t
__module__t __doc__( ( ( s3 /usr/share/lve/modlscapi/user/selector_usage_lib.pyR s c C s( d j t j d � � j � } | d k S( 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
t s# /usr/sbin/cagefsctl --cagefs-statust Enabled( t joint exec_commandt strip( t
cagefs_status( ( s3 /usr/share/lve/modlscapi/user/selector_usage_lib.pyt cagefs_enabled s c c s� d j t j d � � } y t j | � j d � } Wn t k
rM d } n Xx, | D]$ } | d } | d k rU | VqU qU Wd S( s`
Retrieve versions from selector, EXCEPT native
:return: selector versions iterator
R s% /usr/bin/selectorctl --summary --jsont PHPConfigurationt versiont nativeN( ( R R t jsont loadst gett
ValueError( t
selector_datat selector_versionst itemt ver( ( s3 /usr/share/lve/modlscapi/user/selector_usage_lib.pyt get_selector_versions s
c sG d j t j d j d � � � � } t � f d � | j d � 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}t vc 3 s* | ] } | r | t � d � f Vq d S( s alt-phpN( R ( t .0t u( R ( s3 /usr/share/lve/modlscapi/user/selector_usage_lib.pys <genexpr>2 s t ,( R R t formatt dictt split( R t users( ( R s3 /usr/share/lve/modlscapi/user/selector_usage_lib.pyt get_selector_users+ s $c C sD t � s t � St � } x$ t � D] } | j t | � � q# W| S( sY
Retrieve versions set for users in selector
:return: dict { user: version }
( R R! R t updateR$ ( t users_verR ( ( s3 /usr/share/lve/modlscapi/user/selector_usage_lib.pyt get_selector_usage5 s c C s t d � j d � } | j | � d k r. | Sd | k r d t � k r t | � } t | � } t | � } t | j | t � � | � \ } } | | | <t | � } x[ | j � D]M \ }
} | | k r� | |
j
i | | 6� | |
j
t | | � � q� q� W| S| Sd S( 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
t php_get_system_default_versionR s alt-phpt
suexec_moduleN( R R t NoneR t ea4_revert_domains_user_structt get_selector_domainsR t matchert sett iteritemsR% t merger( t ver_domains_listt domain_user_dictt handlers_mappingt default_vert user_domainst
s_ver_domainst api_ver_listt default_domains_matchedt
s_ver_matchedt handlerst hR ( ( s3 /usr/share/lve/modlscapi/user/selector_usage_lib.pyt ea4_selector_checkD s $
!c C sF t � } x6 | j � D]( \ } } | j | t � � j | � q W| 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. t add( t domains_user_dictR5 t domaint user( ( s3 /usr/share/lve/modlscapi/user/selector_usage_lib.pyR+ v s c C s^ t � } t � } xE | j � D]7 \ } } | j | t � � j | j | t � � � q W| 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'