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__/utils.cpython-37.pyc
B

���^�6�@s�ddlmZddlmZddlmZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZddl
mZmZmZmZddlmZddlmZdd	lmZmZmZdd
lmZddlmZdd
lmZdZ dGdd�Z!dHdd�Z"dd�Z#dd�Z$dd�Z%dd�Z&dd�Z'dd�Z(dd �Z)d!d"�Z*dId$d%�Z+dJd&d'�Z,dKd)d*�Z-dLd+d,�Z.d-d.�Z/d/d0�Z0d1d2�Z1d3d4�Z2d5d6�Z3d7d8�Z4d9d:�Z5dMd=d>�Z6d?d@�Z7dAdB�Z8dCdD�Z9dNdEdF�Z:dS)O�)�print_function)�absolute_import)�divisionN)�time)�AnyStr�List�Dict�Optional)�resolve_username_and_doc_root)�CP_NAME)�NoDomain�NotSupported�
IncorrectData)�mod_makedirs�)�clprint)�ClSelectExceptz/sbin/cagefs_enter_userc
Cs�y0tj|td�tjtjd|dd�}|��\}}Wn:ttfk
rj}zt�	|dt
|���Wdd}~XYnX|jdkr�t�|p�dd�
|�|f��|S)z�
    Runs external process and returns output
    :param cmd: command and arguments as a list
    :param env_data
    :return string
    z	/dev/nullT)�stdin�stdout�stderr�	close_fds�env�textrNzoutput of the command: %s
%s� )�
subprocess�Popen�open�PIPEZSTDOUT�communicate�OSError�IOErrorr�FileProcessError�str�
returncode�ExternalProgramFailed�join)�cmd�env_data�output�std_out�std_err�e�r,�?/opt/alt/python37/lib/python3.7/site-packages/clselect/utils.py�run_command#s &

r.c
Cszy2tj|td�tjtj|d||d�}|��\}}Wn:ttfk
rl}zt�|dt	|���Wdd}~XYnX|j
||fS)a�
    Runs external process and returns output.
    Differs from subprocess.check_output, run_command above, and check_output below in that it does not
     throw an exception if process's return code != 0
    :param cmd: command and arguments as a list
    :param env_data
    :param preexec_fn: Pre-exec function. None if don't need
    :param cwd: Directory name to set as current
    :return Cortege: (ret_code, stdout, stderr)
    z	/dev/nullT)rrr�
preexec_fnr�cwdrrN)rrrrrrr rr!r"r#)r&r'r/r0�processr)r*r+r,r,r-�run_command_full<s&r2c	Cs>d}yt|�}|��}|��Wnttfk
r8YnX|S)z8
    Reads file contents and returns it as a string
    �)r�read�closerr )�filename�defaults_contents�fr,r,r-�read_file_as_stringWsr9cOst||�dS)N)�check_output)�args�kwargsr,r,r-�
check_callesr=c

Os�|�dd�}|�d�}|�dd�}|�dd�}|r@||7}|d=y"tjf|tjtjdd�|��}Wn:ttfk
r�}zt�|dt	|���Wdd}~XYnX|�
�\}}	|r�|�|�|��|dk	r�|�
�|jr�t�|p�|	p�|��|S)	av
    check_output(val1, val2, val3, arg4=val4)
    equivalent
    check_output(args=(val1, val2, val3), arg4=val4)
    or equivalent
    check_output(val1, args=(val2, val3), arg4=val4)
    DON'T USE check_output((val1, val2, val3), arg4=val4)
    :param tuple *args: arguments for command line
    :param dict **kwargs: parameters for subprocess.Popen
    :return str:
    �errorNr;r(�waitT)r;rrrr)�pop�getrrrrr rr!r"r�writer5r?r#r$)
r;r<r>Zargs_from_kwargsr(r?�pr+rrr,r,r-r:is*
&
r:cs�fdd�t���D�S)Ncs&g|]}tj�tj��|��r|�qSr,)�os�path�isdirr%)�.0�d)rEr,r-�
<listcomp>�szlist_dirs.<locals>.<listcomp>)rD�listdir)rEr,)rEr-�	list_dirs�srKc	csR|VxF|D]>\}}|t|�Vx&|D]}|d�tt||f��Vq(WqWdS)N�.)r"r%�map)rE�versions�majorZminors�minorr,r,r-�
versioning�s

rQc
CsRyt�|�Wn>tk
rL}z |jtjkr:tj�|�r:n�Wdd}~XYnXdS)N)rD�makedirsr�errno�EEXISTrErF)rE�excr,r,r-�mkdir_p�srVcCsftj�t�|�j�}tj�tj�||��}t||�d�tj	�}t
||f�s^t�d||f��||fS)z�
    Returns absolute and relative to user's home directories paths,
    after eliminating all symlinks
    :param user: Unix user whose home contains the directory
    :param directory: The directory to obtain absolute and relative paths for
    �z&Directory '%s' not in user home ('%s'))
rDrE�realpath�pwd�getpwnam�pw_dirr%�s_partition�lstrip�sep�allr�	WrongData)�user�	directoryZuser_dirZabs_dirZrel_dirr,r,r-�get_abs_rel�srccCstj�d�S)Nz/var/.cagefs)rDrErFr,r,r,r-�	in_cagefs�srd�rcCs.d}t|||d�}z|��}Wd|��X|S)zg
    read file and close
    :param path: file path
    :param mode: reading mode
    :return str:
    N)�mode�errors)rr4r5)rErfrg�data�streamr,r,r-�	file_read�s
rjcCs,g}t||d�}z|��}Wd|��X|S)zE
    read litle file and close
    :param path:
    :return str:
    )rgN)r�	readlinesr5)rErgrhrir,r,r-�file_readlines�s
rl�wcCs,t|||d�}z|�|�Wd|��XdS)zN
    write litle data to file and close
    :param path:
    :return str:
    )rgN)rrBr5)rE�linerfrgrir,r,r-�
file_write�srocCs,t|||d�}z|�|�Wd|��XdS)zN
    write litle data to file and close
    :param path:
    :return str:
    )rgN)r�
writelinesr5)rE�linesrfrgrir,r,r-�file_writelines�srrcCsdtjddkr&tjddkr&|�|�S|�|d�}t|�dkrR|d||df}n|dddf}|S)z�
    str.partition for all python versions
    :param s:		string to parse
    :param sep:		separator to split by
    :return:		cortege - see str.partition function for python 2.5+
    rrWr�r3)�sys�version_info�	partition�split�len)�sr^Zs_partsZret_corteger,r,r-r\�s
r\cCs^yt|d�}Wntk
r"dSXd}t�|�}x|D]}|�|�r8|d7}q8W|��|S)z"
    find regex count in file
    reNrr)rr �re�compile�searchr5)�patternrEr8ZcounterZregexrnr,r,r-�greps


r~cCsddlm}||�S)z�
    Determines is user should be skipped in selectorctl work
    :param username: user name to check
    :return: True - user should be skipped, False - not
    r)�is_admin)�clcommon.cpapir)�usernamerr,r,r-�user_should_be_skippedsr�c
Csbtj�|�s^yt|d�WnBttfk
r\}z td|dt|��t�	d�Wdd}~XYnXdS)Ni�zError: failed to create�:r)
rDrErFrr r�printr"rt�exit)Zdest_dirr+r,r,r-�make_dir$sr�cCs@yt�|�Wntk
r"YnXtj�|�r<t�|d�dS)NT)rD�unlinkrrErF�shutil�rmtree)rEr,r,r-�remove_file_or_dir-sr�cCs�yJtj�|�r4t�|�|krHt�|�t�||�nt|�t�||�WnBtk
r�}z$td|d|dt	|��t
�d�Wdd}~XYnXdS)NzError: failed to create symlinkz->r�r)rDrE�islink�readlinkr��symlinkr�rr�r"rtr�)�src�dstr+r,r,r-�make_symlink6s
r�cCstj|dddd�S)N�)�,z: T)�indent�
separators�	sort_keys)�json�dumps)rhr,r,r-�pretty_jsonDsr�rFcCs�|}d}yt||d�\}}Wn�tk
rTt�|dd�||�d��t�d�Ynptk
r�|rhn t�|ddtd��t�d�Yn8t	k
r�t�|dd||fd��t�d�YnX||fS)	a�
    Safely resolve username and doc_root by domain,
    or resolve document root by username,
    or resolve document root and username by effective uid
    :param pass_not_supported_panel: pass not supported panel for php selector
    :param msg_format: error messages' format (json or text)
    :param user: str -> name of unix user
    :param domain: str -> domain of panel user
    :return: tuple -> user, doc_root
    N)ra�domain�ERRORz(No domain found for user: {}, domain: {})�status�messagerz6NodeJs/Ruby/Python selector not supported for %s panelz%Domain %s is not owned by the user %s)
r
rr�
print_diag�formatrtr�r
rr)rar�Z
msg_formatZpass_not_supported_panelZresult_userZresult_doc_rootr,r,r-�$safely_resolve_username_and_doc_rootIs6r�cCsLt||�d}x*|D]"}t||�d}||kr||SqWtd�|���dS)a
    Transform all directories to realpath, compare and return config value
    :param user: str -> unix user - owner of the config
    :param directory: str -> wanted directory key
    :param config: dict -> config to get value from,
        should have directories as keys
    rz%Config does not contain directory: {}N)rc�KeyErrorr�)rarb�config�
abs_directory�conf_dir�abs_conf_dirr,r,r-�get_using_realpath_keys~s
r�cCsbt||�d}d}t|���}x,|D]$}t||�d}||kr$||=d}q$W|s^td�|���dS)a
    Transform all directories to realpath, compare and remove directory key
    :param user: str -> unix user - owner of the config
    :param directory: str -> wanted directory key
    :param config: dict -> config to remove key from,
        should have directories as keys
    rFTz%Config does not contain directory: {}N)rc�list�keysr�r�)rarbr�r�Zremoved_at_least_oneZconfig_keysr�r�r,r,r-�delete_using_realpath_keys�s
r�cCst||�dt||�dkS)a#
    Checks that two paths in user home directory are the same after
    stripping symlinks
    :param user: Unix user whose home directory contains both paths
    :type path1: str
    :type path2: str
    :return: True if paths are canonically the same otherwise False
    :rtype: bool
    r)rc)ra�path1�path2r,r,r-�realpaths_are_equal�s
r�c
Cs�i}|si}t||g|}tj||tjtjdd�}|��\}}|j}	|sf|	dkrfd�|�dt�d�}n|��}||d<|	|d<|	r�dnd	|d
<|S)z=
    Run any process using the utility cagefs_enter_user
    T)rrrr�z�User's process "{}" failed and didn't return anything. It could mean that user has too small limit of PMEM for running of cloudlinux-selector. Please, increase the limit to user and try run process againr>)�details�result�	timestampr(r#FZfailed)	�CAGEFS_ENTER_USER_BINrrrrr#r�r�strip)
raZpath_to_utilityZargs_for_utilityZenv_varsr�r&r1r�_Zretcoder,r,r-�run_process_in_cagefs�s(r�)N)NNN)reN)N)rmN)rmN)NNrF)N);�
__future__rrrrSrDrYrzrrtr�r�r�typingrrrr	Zclcommon.clpwdr
r�rZclcommon.cpapi.cpapiexceptionsrr
rZclcommon.utilsr�
clselectprintr�clselectexceptrr�r.r2r9r=r:rKrQrVrcrdrjrlrorrr\r~r�r�r�r�r�r�r�r�r�r�r,r,r,r-�<module>sZ

#





		
5