403Webshell
Server IP : 192.158.238.246  /  Your IP : 3.144.48.13
Web Server : LiteSpeed
System : Linux uniform.iwebfusion.net 4.18.0-553.27.1.lve.1.el8.x86_64 #1 SMP Wed Nov 20 15:58:00 UTC 2024 x86_64
User : jenniferflocom ( 1321)
PHP Version : 8.1.32
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /opt/alt/python37/lib/python3.7/site-packages/clselect/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/alt/python37/lib/python3.7/site-packages/clselect/__pycache__/utils.cpython-37.pyc
B

��d�=�@sddlmZddlmZddlmZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZddl
mZmZmZmZddlmZddlmZdd	lmZdd
lmZmZmZddlmZddlmZdd
l m!Z!ddl"m#Z#ddl$m%Z%dZ&dZ'dSdd�Z(dTdd�Z)dd�Z*dd�Z+dd�Z,dd�Z-dd �Z.d!d"�Z/d#d$�Z0d%d&�Z1dUd(d)�Z2dVd*d+�Z3dWd-d.�Z4dXd/d0�Z5d1d2�Z6d3d4�Z7d5d6�Z8d7d8�Z9d9d:�Z:d;d<�Z;d=d>�Z<dYdAdB�Z=dCdD�Z>dEdF�Z?dGdH�Z@dZdIdJ�ZAeBeCdK�dLdM�ZDeBdN�dOdP�ZEdQdR�ZFdS)[�)�print_function)�absolute_import)�divisionN)�time)�AnyStr�List�Dict�Optional)�Path)�resolve_username_and_doc_root)�CP_NAME)�NoDomain�NotSupported�
IncorrectData)�mod_makedirs)�init_sentry_client)�get_pkg_version�)�clprint)�ClSelectExceptz/sbin/cagefs_enter_userzbhttps://1ba721bc7abc4a8f89b1ffc185088bf7:3bac2b8189a043f7856d24046255f116@sentry.cloudlinux.com/19c
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�PIPE�STDOUT�communicate�OSError�IOErrorr�FileProcessError�str�
returncode�ExternalProgramFailed�join)�cmd�env_data�output�std_out�std_err�e�r0�?/opt/alt/python37/lib/python3.7/site-packages/clselect/utils.py�run_command&s &

r2c
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)rrrr r"r#r$rr%r&r')r*r+r3r4�processr-r.r/r0r0r1�run_command_full?s&r6c	Cs>d}yt|�}|��}|��Wnttfk
r8YnX|S)z8
    Reads file contents and returns it as a string
    �)r�read�closer#r$)�filename�defaults_contents�fr0r0r1�read_file_as_stringZsr=cOst||�dS)N)�check_output)�args�kwargsr0r0r1�
check_callhsrAc

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�getrrr r#r$rr%r&r"�writer9rCr'r()
r?r@rBZargs_from_kwargsr,rC�pr/rrr0r0r1r>ls*
&
r>cs�fdd�t���D�S)Ncs&g|]}tj�tj��|��r|�qSr0)�os�path�isdirr))�.0�d)rIr0r1�
<listcomp>�szlist_dirs.<locals>.<listcomp>)rH�listdir)rIr0)rIr1�	list_dirs�srOc	csR|VxF|D]>\}}|t|�Vx&|D]}|d�tt||f��Vq(WqWdS)N�.)r&r)�map)rI�versions�majorZminors�minorr0r0r1�
versioning�s

rUc
CsRyt�|�Wn>tk
rL}z |jtjkr:tj�|�r:n�Wdd}~XYnXdS)N)rH�makedirsr#�errno�EEXISTrIrJ)rI�excr0r0r1�mkdir_p�srZcCsftj�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'))
rHrI�realpath�pwd�getpwnam�pw_dirr)�s_partition�lstrip�sep�allr�	WrongData)�user�	directoryZuser_dirZabs_dirZrel_dirr0r0r1�get_abs_rel�srgcCstj�d�S)Nz/var/.cagefs)rHrIrJr0r0r0r1�	in_cagefs�srh�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)rr8r9)rIrjrk�data�streamr0r0r1�	file_read�s
rncCs,g}t||d�}z|��}Wd|��X|S)zE
    read litle file and close
    :param path:
    :return str:
    )rkN)r�	readlinesr9)rIrkrlrmr0r0r1�file_readlines�s
rp�wcCs,t|||d�}z|�|�Wd|��XdS)zN
    write litle data to file and close
    :param path:
    :return str:
    )rkN)rrFr9)rI�linerjrkrmr0r0r1�
file_write�srscCs,t|||d�}z|�|�Wd|��XdS)zN
    write litle data to file and close
    :param path:
    :return str:
    )rkN)r�
writelinesr9)rI�linesrjrkrmr0r0r1�file_writelines�srvcCsdtjddkr&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+
    rr[r�r7)�sys�version_info�	partition�split�len)�srbZs_partsZret_corteger0r0r1r`�s
r`cCs^yt|d�}Wntk
r"dSXd}t�|�}x|D]}|�|�r8|d7}q8W|��|S)z"
    find regex count in file
    riNrr)rr$�re�compile�searchr9)�patternrIr<Zcounter�regexrrr0r0r1�grep	s


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�)�usernamer�r0r0r1�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)
rHrIrJrr$r#�printr&rx�exit)Zdest_dirr/r0r0r1�make_dir'sr�cCs@yt�|�Wntk
r"YnXtj�|�r<t�|d�dS)NT)rH�unlinkr#rIrJ�shutil�rmtree)rIr0r0r1�remove_file_or_dir0s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)rHrI�islink�readlinkr��symlinkr�r#r�r&rxr�)�src�dstr/r0r0r1�make_symlink9s
r�cCstj|dddd�S)N�)�,z: T)�indent�
separators�	sort_keys)�json�dumps)rlr0r0r1�pretty_jsonGsr�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)re�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)
rr
r�
print_diag�formatrxr�rrr)rer�Z
msg_formatZpass_not_supported_panel�result_user�result_doc_rootr0r0r1�$safely_resolve_username_and_doc_rootLs6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)rg�KeyErrorr�)rerf�config�
abs_directory�conf_dir�abs_conf_dirr0r0r1�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)rg�list�keysr�r�)rerfr�r�Zremoved_at_least_oneZconfig_keysr�r�r0r0r1�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)rg)re�path1�path2r0r0r1�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 againrB)�details�result�	timestampr,r'FZfailed)	�CAGEFS_ENTER_USER_BINrrr r"r'r�r�strip)
reZpath_to_utilityZargs_for_utilityZenv_varsr�r*r5r�_�retcoder0r0r1�run_process_in_cagefs�s(r�)�version�returnc	Cs�tdtd�tdd�}d|�dd���}td�}|��s:dSyDd}t|��}|��}WdQRX|�d	�rt||kr|d
Snt	d��Wn|�
�YnXdS)zC
    Check if python version is dependency of imunify packages
    Z
lvemanagerF)�releaseZdsn�handlez/opt/alt/pythonrPr7z/usr/bin/imunify-serviceNz#!Tz-ERROR: Imunify service doesn't have a shebang)rr�	LVEMANDSN�replacer
�is_filer�readline�
startswith�	ExceptionZcaptureException)r�Z
sentry_client�alt_pathZimunify_serviceZimunify_shebangr<r0r0r1�imunify_python_dependency�s(

r�)recst������fdd�}|S)z
    Drops to user
    cs2t��j�t��j��tjd<�jtjd<dS)N�USER�HOME)rH�setgid�pw_gid�setuid�pw_uid�environr_r0)re�user_pwdr0r1�func�s
zdemote.<locals>.func)r]r^)rer�r0)rer�r1�demote�s
r�c
Osfd}d}xP|D]H}y||f|�|�}Wn&|k
rL}	z|	}Wdd}	~	XYqX|dO}qW|sb|�|S)NFTr0)
r��usersZexception_typer?r@Zcaught_exceptionZ
is_handledZ
user_aliasr�r/r0r0r1�apply_for_at_least_one_users
r�)N)NNN)riN)N)rqN)rqN)NNrF)N)G�
__future__rrrrWrHr]r~rrxr�r�r�typingrrrr	Zpathlibr
�clcommon.clpwdrr�rZclcommon.cpapi.cpapiexceptionsr
rr�clcommon.utilsrZclsentryrZclsentry.utilsr�
clselectprintr�clselectexceptrr�r�r2r6r=rAr>rOrUrZrgrhrnrprsrvr`r�r�r�r�r�r�r�r�r�r�r�r&�boolr�r�r�r0r0r0r1�<module>sh

#





		
5
&

Youez - 2016 - github.com/yon3zu
LinuXploit