%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /opt/alt/python27/lib/python2.7/site-packages/clselect/
Upload File :
Create Path :
Current File : //opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyc

�
i�B^c@`sddlmZddlmZddlmZddlZddlZddlZddlmZddl	m
Z
ddlmZdd	l
mZdd
lmZddlmZddlmZdd
lmZddlmZmZmZmZmZdefd��YZdS(i(tabsolute_import(tprint_function(tdivisionN(tmap(t	iteritemsi(tClUserExtSelect(tClSelectExcept(t	clcaptain(tutils(tunescape(tExternalProgramFailed(t
PhpConfReadertPhpConfBaseExceptiontPhpConfReadErrortPhpConfLoadExceptiont!PhpConfNoSuchAlternativeExceptiontClUserOptSelectcB`s[eZdZdZddd�Zeeed�Zeed�Z	ed�Z
dd�Zddd�Zd	�Z
d
�Zd�Zed�Zee�Zd
d�Zee�Zd
ed�Zee�Zed�Zd�Zee�Zd�Zd�Zee�Zd�Zd�Zd�Zd�Zd�Zd�Zed�Zd�Z RS(s+
    Class for processing user options
    s/etc/cl.selector/php.conftphpcC`s{tj|||�i|_t�|_idd6dd6dd6dd6d	d
6dd6|_d
�t|j�D�|_dS(Ns&nbsp;t s&quot;t"s&apos;t's&gt;t>s&lt;t<s&amp;t&cS`si|]\}}||�qS(((t.0tktv((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pys
<dictcomp>(s	(Rt__init__t
_whitelisttsett_user_excludest_html_escape_tableRt_html_unescape_table(tselftitemtexclude_pid_list((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyR"s	c	C`sei}|dkrH|jd|d|dt�}|j|||�}n|j|||||�dS(s�
        Inserts supplied options into current ones
        @param optset: string
        @param decoder: string
        @param
        ttoptsettdecodertexpect_separatorN(t_process_option_stringtTruet_remove_forbidden_optionstinsert_json_options(	R!tusertversionR%R&tappendtquiettcreatetoptions((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pytinsert_options*s	cC`sd|j|�|j||�}|j|�\}}}	|j|�}|r\|j|�n|}|j|�}
|
r�|j|
�}
n|j|
||	�}xstdt	|��D]\}||}
|
j
d�}t	|�dkr�q�n|ddkr�|dd||<q�q�W|j|dj|�j
�d||�|j|�|j|||
|�dS(s�
        Inserts supplied options into current ones
        @param user: string
        @param version: string
        @param options: object
        it=iisno values
N(t_check_user_in_cagefst_compose_user_ini_patht_load_ini_contentst_prepare_options_datatupdatet_compose_options_sett
_wrap_optionst_compose_output_datatrangetlentsplitt_write_to_filetjointrstript_reload_processest_backup_settings(R!R,R-R1R.R0t
user_ini_pathtcontentst
extensionstextensions_datatoptions_settdatatidxtlinet
line_parts((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyR+9s.

#
cC`s|jd|d|dt�}|j|�|j||�}|j|�\}}	}
|j|�}x$|j�D]}|j|d�qqW|j	|�}|j
|�}|j||	|
�}
|j|dj
|
�j�d|�|j|�|j|||�dS(s<
        Deletes supplied options from current ones
        R%R&R's
N(R(tFalseR4R5R6R7tkeystpoptNoneR9R:R;R?R@RARBRC(R!R,R-R%R&R/R1RDRERFRGtoptRHRI((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pytdelete_options]s 	
 
cC`sd|s|j|�d}n|dkr:tj|��n|j|�|j||�|j|�S(s�
        Returns options summary for a user
        @param user: string
        @param version: string
        return: dict
        itnative(tget_versionRtUnableToGetExtensionst_get_ini_defaultst
_get_user_init_get_whitelist(R!R,R-((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pytget_optionsts
cC`s�|j�}|j�}x�|j�D]�}|rC||krCq%nxx|D]p}|rh||krhqJny8|jd|d|dddddtdtd	t�WqJtjk
r�qJqJXqJWq%Wd
S(sn
        Deletes all custom options settings
        @param users: list
        @param versions: list
        R,R-R%R$R&tplainR.R/R0N(tlist_all_userstget_all_alternatives_dataRNR2RMR)Rt
NotCageFSUser(R!tuserstversionst	all_userstalternativesR-R,((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyt
reset_options�s
cC`s�i}x�|D]�}|j�dkr+q
n|jd�s
|jd�rOq
nttd�|jdd���\}}|dkr�d}n|ji||6�q
W|S(NR$s;>===s;<===cS`s
|j�S(N(tstrip(tx((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyt<lambda>�R$R3isno value(Rct
startswithtlistRR>R8(R!RER1R"tkeytvalue((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyR7�s
*	cC`s |js|j|�n|jS(s(
        Returns whitelist data
        (Rt_load_whitelist(R!R-((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyRX�s	c	C`s|j�}|j||�d|kr:tj|��nt�}x(t|�D]\}}|d||<qPWy5t|j�}|j||�}|j	j
|�WnXtk
r�}tj|j��n4t
ttfk
r�}tj|j|j��nXdS(sM
        Parses php config file (not php.ini!) and updates structure
        t.R-N(R\t_check_alternativeRRUtdictRRtOPTIONS_PATHtget_config_for_selectorctlRR8Rtphp_versionR
RRtUnableToLoadDatatmessage(	R!R-Ratphp_versionst	short_vertver_datatconf_readert
php_conf_dictte((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyRj�s	cC`s^d|kr'|jdd�\}}n,|s=|d}}ntjd|f��i||6S(s�
        Splits options data into key-value pair and returns it
        @param option_item: string
        @param expect_separator: bool
        @return: dict
        t:iR$s#Colon as a separator expected (%s)!(R>Rt	WrongData(toption_itemR'toption_nametoption_value((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyt_handle_option_item�sRZcC`sOid�d6d�d6}y|||�SWntk
rJ|d|�SXdS(sx
        Decodes option item
        @param data: string
        @param decoder: string
        @return: string
        cS`s|S(N((Rd((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyRe�R$RZcS`s
tj|�S(N(tbase64t	b64decode(Rd((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyRe�R$RN(tKeyError(RIR&t
dispatcher((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyt_decoder�s


cC`sXi}|rTxE|jd�D]1}|j||�}|j|j||��qWn|S(s�
        Wrapper around options parsing routines
        @param optset: string
        @param decoder: callback name
        @expect_separator: bool
        @return: dict
        t,(R>R�R8R~(tclsR%R&R'R1R{((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyR(�scC`s�|j|�}t|j��jt|j���s�i}xNt|�D]@\}}||kr|rmqIqtj|��n|||<qIW|}n|S(s�
        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
        (RXRRNtissubsetRRtUnableToProcessOption(R!R1R-R/t	whitelisttwhite_list_optionstopt_namet	opt_value((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyR*�s'	cC`s>g}x1t|�D]#\}}|jd||f�qW|S(sq
        Construct option item from key and value pair
        @param options: dict
        return: list
        s%s=%s(RR.(R1RHR�R�((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyR9
scC`s'dg}|j|�|jd�|S(s`
        Adds identifying string before and after dataset
        @param contents: list
        s.;>=== Start of PHP Selector Custom Options ===s.;<=== End of PHP Selector Custom Options =====(textendR.(R!RERI((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyR:s	

cC`sLg}x2|D]*}|j||�|jddg�q
W|j|�|S(s�
        Construct output
        @param contents: list
        @param extensions: list
        @param extensions_data: dict
        return: list
        R$(R�(RERFRGRIR"((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyR;#s

c
C`s|j�}|j||�d|kr:tj|��nttd�||djd���}t|jd��dkr�|d7}ntj	d�}|j
|�}|s�tj|��n|jd�}ttd�|jd�jd���}|d	d
>|dd>B|dB}|d	d
>|dd>B|dB}	|dkrZ||	krZt
S|d
krv||	krvt
S|dkr�||	kr�t
S|dkr�||	kr�t
S|s�|dkr|d	d
>|dd>B}|d	d
>|dd>B}	||	krt
SntS(s~
        Compares version in use and version required by PHP feature
        and return true if PHP feature satisfies
        RkcS`s
t|�S(N(tint(Rd((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyRe>R$R-is.0s([<>=]{1,2})?(\d+\.\d+\.\d+)\.?icS`s
t|�S(N(R�(Rd((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyReGR$iiiRs<=Rs>=R3(R\RlRRURgRR>R=tretcompiletmatchtNoSuchAlternativeVersiontgroupR)RM(
R!ttestR-Ratv_arraytpatttmtactiontversion_intttest_int((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyt_check_version5s:)
*""cC`s"idd6dd6dd6dd6d	d
6dd6d
d6dd6dd6dd6dd6dd6}|jd|�ryd|d<n|jd|�r�d|d<|jd|�r�d|d <q�n|jd!|�r�d"|d#<d$|d%<|jd&|�r�d|d'<q�n|jd(|�rd|d)<n|S(*NtE_ERRORit	E_WARNINGitE_PARSEitE_NOTICEitE_CORE_ERRORitE_CORE_WARNINGi tE_COMPILE_ERRORi@tE_COMPILE_WARNINGi�tE_USER_ERRORitE_USER_WARNINGit
E_USER_NOTICEitE_STRICTis<5.2.0tE_ALLi�s>=5.2.0tE_RECOVERABLE_ERRORis<5.3.0i�s>=5.3.0tE_DEPRECATEDi tE_USER_DEPRECATEDi@s<5.4.0i�ws>=5.4.0i�(R�(R!tphp_vertphp_error_table((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyt_get_php_error_tblYs6





cC`s�d}|j|�}x2t|�D]$\}}|j|t|��}q"Wt|�jt|��ridSytt|��}Wnt	t
tfk
r�dSX|S(sd
        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
        s0123456789|&~!^ N(R�RtreplacetstrRt
differenceRPR�tevaltSyntaxErrort
ValueErrort	TypeError(R!tstr_R�t
VALID_SYMBOLSR�tcodetnamet
error_code((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyt_php_string2errorxscC`s�tjd|�sdSg}t|�}x-|D]%}|j|d|�|kr/|Sq/W|jd|�}x2|D]*}||@|krq|j||�qqqqWdj|�S(Ns^-?\d{1,5}$R$R�s | (R�R�R�R�R�R.R@(R!RiR-trange_tdescterror_stringR�terror((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyt_get_error_desc�s

cC`sb|j�}|j||�|j|�}tjj||d|j�s^tj|��ntj	}d|kr�d}tjj
|�r�||d<n||d|jg}n+||d|jdg}|jdd�d|d<d|d	<t
jd
�}t
jd�}dd
ddddg|dd+tj||�}	|j|	�}
x�|
D]�}t
j|d|d�}||krWt
j|d|dp�|d�}
t|
|j�}|dkr�d||kr�||ddkr�qWqGd||d<qJ|dkr9||djd�}|j|||�}n|||d<qWqWW|jj|�dS(sQ
        Gets PHP defaults (calls php -i)
        @param version: string
        RItSCRIPT_FILENAMEs)/usr/share/l.v.e-manager/utils/clinfo.phps-qitSERVER_SOFTWAREt1tPHP_FCGI_MAX_REQUESTSt0tPHP_FCGI_CHILDRENsM<tr[^>]*?><td[^>]*>(.*?)</td><td[^>]*>(.*?)</td>(?:<td[^>]*>(.*?)</td>)?</tr>s<[^>]*?>s-dsopcache.enable_cli=0sauto_append_file=nonesauto_prepend_file=noneiR$iisno valuetdefaultterror_reportingR<R�N(R\RlRXtostpathtisfilet_itemRR�tenvirontexistsRORPR�R�Rtrun_commandtfindalltsubR	R R>R�RR8(R!R-RaR�tenv_datatscript_pathtcmdttag_patternt
strip_patterntoutputtlinestlt	directivetsRiterror_range((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyRV�sL!	


	
#cC`s�|j|�|j||�}|j|�\}}}|j|�}x>|D]6}y|||j|d<WqMtk
r�qMqMXqMWdS(sn
        Parses user ini file and updates
        values of existing data
        @param user: string
        RiN(RXR5R6R7RR�(R!R,R-RDRERFRGRh((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyRW�s


cC`s-tjj|jj|�d�}tjj|�suytj|�Wqutt	fk
rq}t
j||��quXntjj|d|jdd��}xmt
dt|��D]V}||}	|	jd�}
t|
�dkr�|
dd	kr�|
dd||<q�q�W|j|d
j|�||�dS(s�
        On saving user settings keep backup on user homedir
        @param user: string
        @param version: string
        @param data: list
        s.cl.selectors
alt_php%s.cfgRkR$iR3iisno values
N(R�R�R@t_clpwdtget_homedirtisdirRtmkdirtOSErrorR
RtUnableToSaveDataR�R<R=R>R?(R!R,R-RIR0tuser_backup_pathRxtuser_backup_fileRJRKRL((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyRC�s 		
"c	C`s�|j|�|j�}x�|j�D]y}|j||�}|j|�\}}}|j|�}|j|�}|r&|j|�}|j|||�q&q&WdS(sW
        rewrite php backup file with php options
        @param  user: string
        N(	R4R\RNR5R6R7R9R:RC(	R!R,RaR-RDRERFRGRH((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pytbackup_php_optionss
N(!t__name__t
__module__t__doc__RnRPRRMR)R2R+RRRYRbR7RXRjR~tstaticmethodR�R(tclassmethodR*R9R:R;R�R�R�R�RVRWRCR�(((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyRs>	$	
			
	
		$		!		1	(t
__future__RRRR�RR�tbuiltinsRtfuture.utilsRtcluserextselectRtclselectexceptRtclcommonRR$Rtxml.sax.saxutilsR	tclcommon.utilsR
tclcommon.php_conf_readerRRR
RRR(((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluseroptselect.pyt<module>s(

Zerion Mini Shell 1.0