HEX
Server: LiteSpeed
System: Linux standart9.isimtescil.net 3.10.0-962.3.2.lve1.5.26.7.el7.x86_64 #1 SMP Wed Oct 2 07:53:12 EDT 2019 x86_64
User: karalev (5310)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: //opt/alt/python37/lib/python3.7/site-packages/clselect/__pycache__/cluseroptselect.cpython-37.pyc
B

���^T�@s�ddlmZddlmZddlmZddlZddlZddlZddlmZddl	m
Z
ddlmZdd	l
mZdd
lmZddlmZddlmZdd
lmZddlmZmZmZmZmZGdd�de�ZdS)�)�absolute_import)�print_function)�divisionN)�map)�	iteritems�)�ClUserExtSelect)�ClSelectExcept)�	clcaptain)�utils)�unescape)�ExternalProgramFailed)�
PhpConfReader�PhpConfBaseException�PhpConfReadError�PhpConfLoadException�!PhpConfNoSuchAlternativeExceptionc@seZdZdZdZd8dd�Zd9d	d
�Zd:dd�Zd;d
d�Zd<dd�Z	d=dd�Z
dd�Zdd�Zdd�Z
d>dd�Zee�Zd?dd�Zee�Zd@dd�Zee�ZdAd d!�Zd"d#�Zee�Zd$d%�Zd&d'�Zee�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�ZdBd4d5�Zd6d7�ZdS)C�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	Cs@i}|dkr*|j||dd�}|�|||�}|�|||||�dS)z�
        Inserts supplied options into current ones
        @param optset: string
        @param decoder: string
        @param
        �T)�optset�decoder�expect_separatorN)�_process_option_string�_remove_forbidden_options�insert_json_options)	r&�user�versionr*r+�append�quiet�create�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&r0r1r5r2r4�
user_ini_path�contents�
extensions�extensions_data�options_set�data�idx�line�
line_partsrrrr/9s.






z#ClUserOptSelect.insert_json_optionscCs�|j||dd�}|�|�|�||�}|�|�\}}	}
|�|�}x|��D]}|�|d�qJW|�|�}|�|�}|�	||	|
�}
|�
|d�|
���d|�|�
|�|�|||�dS)z<
        Deletes supplied options from current ones
        F)r*r+r,Nr9)r-r:r;r<r=�keys�popr?r@rArErFrGrHrI)r&r0r1r*r+r3r5rJrKrLrM�optrNrOrrr�delete_options]s 





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&r0r1rrr�get_optionsts

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)r0r1r*r+r2r3r4N)�list_all_users�get_all_alternatives_datarSr6r	�
NotCageFSUser)r&�users�versionsZ	all_users�alternativesr1r0rrr�
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>r7rzno value)rf�
startswith�listrrDr>)r&rKr5r'�key�valuerrrr=�s
z%ClUserOptSelect._prepare_options_datacCs|js|�|�|jS)z(
        Returns whitelist data
        )r"�_load_whitelist)r&r1rrrr\�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
        �.r1N)r`�_check_alternativer	rY�dictrr�OPTIONS_PATHZget_config_for_selectorctlr"r>rZphp_versionrrr�UnableToLoadData�str)	r&r1rdZphp_versionsZ	short_verZver_dataZconf_readerZ
php_conf_dict�errrrn�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)!)rDr	�	WrongData)�option_itemr,Zoption_nameZoption_valuerrr�_handle_option_item�sz#ClUserOptSelect._handle_option_itemr^cCs@dd�dd�d�}y|||�Stk
r:|d|�SXdS)zx
        Decodes option item
        @param data: string
        @param decoder: string
        @return: string
        cSs|S)Nr)rgrrrrh�riz*ClUserOptSelect._decoder.<locals>.<lambda>cSs
t�|�S)N)�base64�	b64decode)rgrrrrh�ri)r^rzr^N)�KeyError)rOr+�
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
        �,)rDr~r>ry)�clsr*r+r,r5rxrrrr-�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
        )r\r#rS�issubsetrr	�UnableToProcessOption)r&r5r1r3�	whitelistZwhite_list_options�opt_name�	opt_valuerrrr.�s

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)rr2)r5rNr�r�rrrr?
sz$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 =====)�extendr2)r&rKrOrrrr@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�)rKrLrMrOr'rrrrA#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
        rocSst|�S)N)�int)rgrrrrh>riz0ClUserOptSelect._check_version.<locals>.<lambda>r1r8z.0z([<>=]{1,2})?(\d+\.\d+\.\d+)\.?rcSst|�S)N)r�)rgrrrrhGrir��rTz<=rz>=r7F)
r`rpr	rYrkrrDrC�re�compile�match�NoSuchAlternativeVersion�group)
r&�testr1rdZv_arrayZpatt�m�actionZversion_intZtest_intrrr�_check_version5s:
 



  
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)rr8���� �@��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_tblYs4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�replacertr#�
differencer��eval�SyntaxError�
ValueError�	TypeError)r&Zstr_r�Z
VALID_SYMBOLSr��code�nameZ
error_coderrr�_php_string2errorxs
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�r2rF)r&rmr1Zrange_�descZerror_stringr��errorrrr�_get_error_desc�s

zClUserOptSelect._get_error_desccCs�|��}|�||�|�|�}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�}ddddddddg|dd�<t�||�}	|�|	�}
x�|
D]�}t�|d|d�}||k�rt�|d|d�pD|d�}
t|
|j�}|dk�r�d||k�r�||ddk�r��qnd||d<n6|dk�r�||d�d�}|�|||�}|||d<�qW|j�|�dS)zQ
        Gets PHP defaults (calls php -i)
        @param version: string
        rOZSCRIPT_FILENAMEz)/usr/share/l.v.e-manager/utils/clinfo.phpz-qiZSERVER_SOFTWAREN�1ZPHP_FCGI_MAX_REQUESTS�0ZPHP_FCGI_CHILDRENr)ZACCEPT_ENCODINGZHTTP_ACCEPT_ENCODINGzM<tr[^>]*?><td[^>]*>(.*?)</td><td[^>]*>(.*?)</td>(?:<td[^>]*>(.*?)</td>)?</tr>z<[^>]*?>z-dzopcache.enable_cli=0zzlib.output_compression=Offzauto_append_file=nonezauto_prepend_file=nonerrr8zno value�defaultZerror_reportingrBr)r`rpr\�os�path�isfile�_itemr	r��environ�existsrTr�r�r�run_command�findall�subrr%rDr�r"r>)r&r1rdr��env_dataZscript_path�cmdZtag_patternZ
strip_pattern�output�lines�l�	directive�srmZerror_rangerrrrZ�sR







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
        rmN)r\r;r<r=r"r|)r&r0r1rJrKrLrMrlrrrr[�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.cfgror)rr7r8rzno valuer9)r�r�rF�_clpwd�get_homedir�isdirr
�mkdir�OSErrorr
r	�UnableToSaveDatar�rBrCrDrE)r&r0r1rOr4�user_backup_pathru�user_backup_filerPrQrRrrrrI�s 
z ClUserOptSelect._backup_settingsc	Cst|�|�|��}x\|��D]P}|�||�}|�|�\}}}|�|�}|�|�}|r|�|�}|�|||�qWdS)zW
        rewrite php backup file with php options
        @param  user: string
        N)	r:r`rSr;r<r=r?r@rI)	r&r0rdr1rJrKrLrMrNrrr�backup_php_optionss



z"ClUserOptSelect.backup_php_options)rN)FTT)FT)T)N)NN)T)r^)r^T)T)T)�__name__�
__module__�__qualname__�__doc__rrr!r6r/rVr]rer=r\rnry�staticmethodr~r-�classmethodr.r?r@rAr�r�r�r�rZr[rIr�rrrrrs>
	

$









$!4
r)�
__future__rrrr�rzr��builtinsr�future.utilsr�cluserextselectr�clselectexceptr	Zclcommonr
r)r�xml.sax.saxutilsr�clcommon.utilsr
Zclcommon.php_conf_readerrrrrrrrrrr�<module>s