%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /opt/alt/python37/lib/python3.7/site-packages/clselect/__pycache__/
Upload File :
Create Path :
Current File : //opt/alt/python37/lib/python3.7/site-packages/clselect/__pycache__/cluseroptselect.cpython-37.pyc

B

��Ubh\�@s�ddlmZddlmZddlmZddlZddlZddlZddlZddlm	Z	ddl
mZddlm
Z
dd	lmZdd
lmZddlmZddlmZdd
lmZddlmZmZmZmZmZGdd�de
�ZdS)�)�absolute_import)�print_function)�divisionN)�map)�	iteritems�)�ClUserExtSelect)�ClSelectExcept)�	clcaptain)�utils)�unescape)�ExternalProgramFailed)�
PhpConfReader�PhpConfBaseException�PhpConfReadError�PhpConfLoadException�!PhpConfNoSuchAlternativeExceptionc@s$eZdZdZdZd<dd�Zd=d	d
�Zd>dd�Zd?d
d�Zd@dd�Z	dAdd�Z
dBdd�Zdd�Zdd�Z
dd�ZdCdd�Zee�ZdDdd�Zee�ZdEd d!�Zee�ZdFd"d#�Zd$d%�Zee�Zd&d'�Zd(d)�Zee�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�ZdGd6d7�Zd8d9�Zd:d;�Z dS)H�ClUserOptSelectz+
    Class for processing user options
    z/etc/cl.selector/php.conf�phpNcCsJt�|||�i|_t�|_ddddddd�|_dd	�t|j�D�|_dS)
Nz&nbsp;z&quot;z&apos;z&gt;z&lt;z&amp;)� �"�'�>�<�&cSsi|]\}}||�qS�r)�.0�k�vrr�I/opt/alt/python37/lib/python3.7/site-packages/clselect/cluseroptselect.py�
<dictcomp>)sz,ClUserOptSelect.__init__.<locals>.<dictcomp>)r�__init__�
_whitelist�set�_user_excludesZ_html_escape_tabler�_html_unescape_table)�self�item�exclude_pid_listrrrr!#szClUserOptSelect.__init__FTc
Csb|j�|�}xP|j�|�D]@}i}	|dkrH|j||dd�}	|�|	||�}	|�|||	||�qWdS)z�
        Inserts supplied options into current ones
        @param optset: string
        @param decoder: string
        @param
        �T)�optset�decoder�expect_separatorN)�_clpwd�get_uid�	get_names�_process_option_string�_remove_forbidden_options�insert_json_options)
r&�user�versionr*r+�append�quiet�create�uid�optionsrrr�insert_options+szClUserOptSelect.insert_optionscCs�|�|�|�||�}|�|�\}}}	|�|�}|r@|�|�n|}|�|�}
|
r\|�|
�}
|�|
||	�}xRtdt	|��D]@}||}
|
�
d�}t	|�dkr�qz|ddkrz|dd||<qzW|�|d�|��
�d||�|�|�|�|||
|�dS)z�
        Inserts supplied options into current ones
        @param user: string
        @param version: string
        @param options: object
        r�=�rzno value�
N)�_check_user_in_cagefs�_compose_user_ini_path�_load_ini_contents�_prepare_options_data�update�_compose_options_set�
_wrap_options�_compose_output_data�range�len�split�_write_to_file�join�rstrip�_reload_processes�_backup_settings)r&r3r4r9r5r7�
user_ini_path�contents�
extensions�extensions_data�options_set�data�idx�line�
line_partsrrrr2<s.






z#ClUserOptSelect.insert_json_optionscCs8|j�|�}x&|j�|�D]}|�|||||�qWdS)z7
        Handles multiple users with same uids
        N)r-r.r/r2)r&r3r4r9r5r7r8rrr�bulk_insert_options_sz#ClUserOptSelect.bulk_insert_optionscCs�|j�|�}x�|j�|�D]�}|j||dd�}|�|�|�||�}|�|�\}	}
}|�|	�}	x|��D]}|	�	|d�qhW|�
|	�}
|�|
�}
|�|
|
|�}|�
|d�|���d|�|�|�|�|||
�qWdS)z<
        Deletes supplied options from current ones
        F)r*r+r,Nr=)r-r.r/r0r>r?r@rA�keys�poprCrDrErIrJrKrLrM)r&r3r4r*r+r6r8r9rNrOrPrQ�optrRrSrrr�delete_optionsgs$





zClUserOptSelect.delete_optionscCsD|s|�|�d}|dkr$t�|��|�|�|�||�|�|�S)z�
        Returns options summary for a user
        @param user: string
        @param version: string
        return: dict
        r�native)�get_versionr	�UnableToGetExtensions�_get_ini_defaults�
_get_user_ini�_get_whitelist)r&r3r4rrr�get_options�s

zClUserOptSelect.get_optionscCs�|��}|��}xp|��D]d}|r,||kr,qxP|D]H}|rD||krDq2y|j||dddddd�Wq2tjk
rxw2Yq2Xq2WqWdS)zn
        Deletes all custom options settings
        @param users: list
        @param versions: list
        r)�plainFT)r3r4r*r+r5r6r7N)�list_all_users�get_all_alternatives_datarXr:r	�
NotCageFSUser)r&�users�versionsZ	all_users�alternativesr4r3rrr�
reset_options�s
zClUserOptSelect.reset_optionscCsri}xh|D]`}|��dkrq
|�d�s
|�d�r2q
ttdd�|�dd���\}}|dkr\d}|�||i�q
W|S)	Nr)z;>===z;<===cSs|��S)N)�strip)�xrrr�<lambda>��z7ClUserOptSelect._prepare_options_data.<locals>.<lambda>r;rzno value)rk�
startswith�listrrHrB)r&rOr9r'�key�valuerrrrA�s
z%ClUserOptSelect._prepare_options_datacCs|js|�|�|jS)z(
        Returns whitelist data
        )r"�_load_whitelist)r&r4rrrra�s
zClUserOptSelect._get_whitelistc	
Cs�|��}|�||�d|kr&t�|��t�}x t|�D]\}}|d||<q6Wy&t|j�}|�||�}|j	�
|�Wnftk
r�}zt�|j��Wdd}~XYn:t
ttfk
r�}zt�|jt|���Wdd}~XYnXdS)zM
        Parses php config file (not php.ini!) and updates structure
        �.r4N)re�_check_alternativer	r^�dictrr�OPTIONS_PATHZget_config_for_selectorctlr"rBrZphp_versionrrr�UnableToLoadData�str)	r&r4riZphp_versionsZ	short_verZver_dataZconf_readerZ
php_conf_dict�errrrs�s

zClUserOptSelect._load_whitelistcCsBd|kr|�dd�\}}n |s*|d}}nt�d|f��||iS)z�
        Splits options data into key-value pair and returns it
        @param option_item: string
        @param expect_separator: bool
        @return: dict
        �:rr)z#Colon as a separator expected (%s)!)rHr	�	WrongData)�option_itemr,Zoption_nameZoption_valuerrr�_handle_option_item�sz#ClUserOptSelect._handle_option_itemrccCs@dd�dd�d�}y|||�Stk
r:|d|�SXdS)zx
        Decodes option item
        @param data: string
        @param decoder: string
        @return: string
        cSs|S)Nr)rlrrrrm�rnz*ClUserOptSelect._decoder.<locals>.<lambda>cSst�|���S)N)�base64�	b64decode�decode)rlrrrrm�rn)rcrrcN)�KeyError)rSr+�
dispatcherrrr�_decoder�szClUserOptSelect._decodercCs>i}|r:x0|�d�D]"}|�||�}|�|�||��qW|S)z�
        Wrapper around options parsing routines
        @param optset: string
        @param decoder: callback name
        @expect_separator: bool
        @return: dict
        �,)rHr�rBr~)�clsr*r+r,r9r}rrrr0�sz&ClUserOptSelect._process_option_stringcCsh|�|�}t|����t|����sdi}x6t|�D]*\}}||krT|rJq2n
t�|��|||<q2W|}|S)z�
        Check if all options to process are present in white list
        and removes forbidden ones or raise an exception
        @param options: dict
        @param quiet: bool
        @return: dict
        )rar#rX�issubsetrr	�UnableToProcessOption)r&r9r4r6�	whitelistZwhite_list_options�opt_name�	opt_valuerrrr1s

z)ClUserOptSelect._remove_forbidden_optionscCs0g}x&t|�D]\}}|�d||f�qW|S)zq
        Construct option item from key and value pair
        @param options: dict
        return: list
        z%s=%s)rr5)r9rRr�r�rrrrCsz$ClUserOptSelect._compose_options_setcCsdg}|�|�|�d�|S)z`
        Adds identifying string before and after dataset
        @param contents: list
        z.;>=== Start of PHP Selector Custom Options ===z.;<=== End of PHP Selector Custom Options =====)�extendr5)r&rOrSrrrrD%s

zClUserOptSelect._wrap_optionscCs<g}x(|D] }|�||�|�ddg�q
W|�|�|S)z�
        Construct output
        @param contents: list
        @param extensions: list
        @param extensions_data: dict
        return: list
        r))r�)rOrPrQrSr'rrrrE/s

z$ClUserOptSelect._compose_output_datac
Cs�|��}|�||�d|kr&t�|��ttdd�||d�d���}t|�d��dkr`|d7}t�	d�}|�
|�}|s�t�|��|�d�}ttd	d�|�d��d���}|d
d>|dd>B|dB}|d
d>|dd>B|dB}	|d
kr�||	kr�dS|dk�r||	k�rdS|dk�r.||	k�r.dS|dk�rF||	k�rFdS|�rV|dk�r�|d
d>|dd>B}|d
d>|dd>B}	||	k�r�dSdS)z~
        Compares version in use and version required by PHP feature
        and return true if PHP feature satisfies
        rtcSst|�S)N)�int)rlrrrrmJrnz0ClUserOptSelect._check_version.<locals>.<lambda>r4r<z.0z([<>=]{1,2})?(\d+\.\d+\.\d+)\.?rcSst|�S)N)r�)rlrrrrmSrnr��rTz<=rz>=r;F)
rerur	r^rprrHrG�re�compile�match�NoSuchAlternativeVersion�group)
r&�testr4riZv_array�patt�m�actionZversion_intZtest_intrrr�_check_versionAs:
 



  
zClUserOptSelect._check_versionc
Cs�ddddddddd	d
ddd
�}|�d|�r2d|d<|�d|�rZd|d<|�d|�rZd|d<|�d|�r�d|d<d|d<|�d|�r�d|d<|�d|�r�d|d<|S)NZE_ERRORZ	E_WARNINGZE_PARSEZE_NOTICEZE_CORE_ERRORZE_CORE_WARNINGZE_COMPILE_ERRORZE_COMPILE_WARNINGZE_USER_ERRORZE_USER_WARNINGZ
E_USER_NOTICEZE_STRICT)rr<���� �@��iiiz<5.2.0ZE_ALLi�z>=5.2.0ZE_RECOVERABLE_ERRORiz<5.3.0i�z>=5.3.0ZE_DEPRECATEDi ZE_USER_DEPRECATEDi@z<5.4.0i�wz>=5.4.0i�)r�)r&�php_ver�php_error_tablerrr�_get_php_error_tbles4z"ClUserOptSelect._get_php_error_tblc
Cszd}|�|�}x$t|�D]\}}|�|t|��}qWt|��t|��rJdSytt|��}Wntt	t
fk
rtdSX|S)ad
        Convert php error level 'error-reporting' from string to code
        http://php.net/manual/ru/function.error-reporting.php
        #>>> ClUserOptSelect(item='php')._php_string2error('E_ALL & ~E_NOTICE', '5.4')
        32759
        #>>> ClUserOptSelect(item='php')._php_string2error('E_USER_ERROR | E_NOTICE', '5.4')
        264
        #>>> ClUserOptSelect(item='php')._php_string2error('E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR', '5.4')
        71
        #>>> ClUserOptSelect(item='php')._php_string2error('E_ERROR | INCORRECT', '5.4')  # incorrect variable 'INCORRECT'
        None
        #>>> ClUserOptSelect(item='php')._php_string2error('E_ERROR + E_WARNING', '5.4')   # incorrect operator '+'
        None
        :param str: error_reporting variable
        :return None|int: error_reporting error code; return None if can't convert
        z0123456789|&~!^ N)r�r�replaceryr#�
differencer��eval�SyntaxError�
ValueError�	TypeError)r&Zstr_r�Z
VALID_SYMBOLSr��code�nameZ
error_coderrr�_php_string2error�s
z!ClUserOptSelect._php_string2errorcCs~t�d|�sdSg}t|�}x"|D]}|j||d�|kr"|Sq"W|j|d�}x&|D]}||@|krR|�||�qRWd�|�S)Nz^-?\d{1,5}$r))r�z | )r�r�r�r�r�r5rJ)r&rrr4Zrange_�descZerror_stringr��errorrrr�_get_error_desc�s

zClUserOptSelect._get_error_desccCsX|��}|�||�|�|�}tj�||d|j�sBt�|��tj	}d|kr~d}tj�
|�rh||d<||d|jg}n"||d|jdg}|�dd�d|d<d	|d
<d|d<d|d
<t�
d�}t�
d�}ddddddddddddg|dd�<t�||�}	|�|	�}
ddddddg}d}�x"|
D�]}
t�|d|
d�}d|k�rxt�|d|
d �pd|
d�}t||j���}||k�r*t�|d|
d �p�|
d�}t||j�}|d!k�r�d"||k�r�||d"dk�rڐq*nd||d"<n6|d#k�r||d$�d%�}|�|||�}|||d"<||k�r*|�r*|�||�||d"<�q*W|j�|�dS)&zQ
        Gets PHP defaults (calls php -i)
        @param version: string
        rSZSCRIPT_FILENAMEz)/usr/share/l.v.e-manager/utils/clinfo.phpz-qi�SERVER_SOFTWAREN�1ZPHP_FCGI_MAX_REQUESTS�0ZPHP_FCGI_CHILDRENr)�ACCEPT_ENCODINGZHTTP_ACCEPT_ENCODINGzM<tr[^>]*?><td[^>]*>(.*?)</td><td[^>]*>(.*?)</td>(?:<td[^>]*>(.*?)</td>)?</tr>z<[^>]*?>z-dzopcache.enable_cli=0zzlib.output_compression=Offzauto_append_file=nonezextension=mbstring.sozauto_prepend_file=nonezdisable_functions=nonerzopcache.enable_clizzlib.output_compressionZauto_append_file�	extensionZauto_prepend_fileZdisable_functionsrzLoaded Configuration Filer<zno value�defaultZerror_reportingrFr�)rerura�os�path�isfile�_itemr	r��environ�existsrYr�r�r�run_command�findall�subrr%rkrHr��_get_value_from_ini_filer"rB)r&r4rir��env_dataZscript_path�cmdZtag_patternZ
strip_pattern�output�linesZrewritten_directives�configuration_file�l�	directive�srrZerror_rangerrrr_�sn







z!ClUserOptSelect._get_ini_defaultsc	Csp|�|�|�||�}|�|�\}}}|�|�}x:|D]2}y|||j|d<Wq6tk
rfw6Yq6Xq6WdS)zn
        Parses user ini file and updates
        values of existing data
        @param user: string
        rrN)rar?r@rAr"r�)r&r3r4rNrOrPrQrqrrrr`�s


zClUserOptSelect._get_user_inic
Cs�tj�|j�|�d�}tj�|�sdyt�|�Wn2tt	fk
rb}zt
�||��Wdd}~XYnXtj�|d|�dd��}xPt
dt|��D]>}||}	|	�d�}
t|
�dkr�|
d	d
kr�|
dd||<q�W|�|d�|�||�dS)z�
        On saving user settings keep backup on user homedir
        @param user: string
        @param version: string
        @param data: list
        z.cl.selectorNz
alt_php%s.cfgrtr)rr;r<rzno valuer=)r�r�rJr-�get_homedir�isdirr
�mkdir�OSErrorr
r	�UnableToSaveDatar�rFrGrHrI)r&r3r4rSr7�user_backup_pathrz�user_backup_filerTrUrVrrrrM
s 
z ClUserOptSelect._backup_settingsc	Cst|�|�|��}x\|��D]P}|�||�}|�|�\}}}|�|�}|�|�}|r|�|�}|�|||�qWdS)zW
        rewrite php backup file with php options
        @param  user: string
        N)	r>rerXr?r@rArCrDrM)	r&r3rir4rNrOrPrQrRrrr�backup_php_options#s



z"ClUserOptSelect.backup_php_optionscCs t��}|�|�|d�|�S)a
        get value from ini file
        Now used for getting default value for some php options,
        which we cannot get garanted
        :param configuration_file: ini file for reading
        :param directive: key name
        :return: value of key or ''
        ZPHP)�configparser�ConfigParser�read�get)r&r�r��configrrrr�4s	
z(ClUserOptSelect._get_value_from_ini_file)rN)FTT)FT)FT)T)N)NN)T)rc)rcT)T)T)!�__name__�
__module__�__qualname__�__doc__rwr!r:r2rWr[rbrjrArarsr~�staticmethodr�r0�classmethodr1rCrDrEr�r�r�r�r_r`rMr�r�rrrrrsB
	

#
	









$!E
r)�
__future__rrrr�rr�r��builtinsr�future.utilsr�cluserextselectr�clselectexceptr	�clcommonr
r)r�xml.sax.saxutilsr�clcommon.utilsr
Zclcommon.php_conf_readerrrrrrrrrrr�<module>s 

Zerion Mini Shell 1.0