Mini Shell
�
�o�i� � �. � d dl mZ d dl mZ d dl mZ d dl mZ d dlZd dlmZmZm Z m
Z
d dlmZ ej
� � d dlT d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl Z d d l!m"Z"m#Z#m$Z$m%Z%m&Z& d d
l!m'Z'm(Z(m)Z)m*Z* d dl!m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 d dl2Z2d dl3m4Z4m5Z5m6Z6 d d
l7m8Z8m9Z9 d dl:m;Z; d dl<m=Z=m>Z>m?Z? d dl@mAZA d dlBmCZC d dlDmEZE d dlFmGZGmHZH d dlImJZJmKZK d dlLmMZM d dlNmOZO d dlPZPd dlQmRZR d dlSmTZTmUZUmVZV d dl2mWZWmXZX d dlYmZZZ G d� de[� � Z\ G d� de\� � Z]dZ^d e^z Z_d!Z`d"Zad#Zbd$Zcd%Zdd Zed&afd'Zgdahd(Zid)Zjd*Zkd+Zld,Zmd-Znd.Zod/Zpd0elz Zqd1Zrd2Zsd3Ztd4� Zu�dd6�Zv�dd7�Zw�dd8�Zxd9� Zyd5ezfd:�Z{d5ezfd;�Z|�dd<�Z}d5ezfd=�Z~d5ezfd>�Zd?� Z�d@� Z�dA� Z�dB� Z�ej� d&fdC�Z�dD� Z� e�� � pejZ�g Z�dE� Z�dF� Z�dG� Z�dH� Z�d&Z�dIZ�dIZ�dIZ�dJ� Z�dKe�d5e�fdL�Z�i a��ddM�Z�dN� Z�dKe�d5dfdO�Z�dP� Z�dQ� Z�g Z�dR� Z�dS� Z�dT� Z��ddU�Z�dV� Z�dW� Z�dKe�d5ezfdX�Z�i a�dY� Z�dZ� Z�d[� Z�d\� Z�d]� Z�i a�d^� Z�d_� Z��dda�Z�i a��ddb�Z�dc� Z��ddd�Z��dde�Z� G df� dge[� � Z�dhe�die�d5e
e� fdj�Z�die�d5e e� fdk�Z��ddl�Z��ddm�Z�dn� Z�do� Z�i a�dp� Z��ddr�Z��dds�Z��d dt�Z�d d dqdqd g d fdu�Z�dv� Z��d!dw�Z�dx� Z�dy� Z�dz� Z�d{� Z�d|� Z�d}Z�d~Z�i Z�i Z�de e� d5e�fd��Z�d�� Z�d�� Z̐d"d��Z�d�d�d�d�d�d��a�d�Z�d�Z�e5d z d�z Z�d�� Z�d&a�d�� Z�d�� Z�d�� Z�d�� Z�d�� Zؐd"d��Z�d�� Z�d�Zېdd��Z�d�� Z�d d dqdqd d g d fd��Z�d�� Zߐd#d��Z�d#d��Z�d#d��Z�d#d��Z�d�� Z�d�e�d�e�d5e�fd��Z�dKed5ej� dz fd��Z� �d$d�e�d�e�d�ezd�ezd�e�e� dz d�ezd�e�e� dz d5e�fd��Z� �d%d�e�d�e�d�ezd�ezd5e�f
d��Z�d�� Z�d�� Z�d�� Z�d�� Z�d�� Z�d&d��Z�d�� Z�d�� Z�d�� Z�d�� Z�d�� Z�d�� Z�decfd��Z�d�� Z�d�� Z�d�� Z��d'd��Z�d�� Z�d�� Z�d�� Z��d"d��Z�d �Z dÄ �Zd�adĄ �Zd�adń �Zd�a�d(dDŽ�ZdȄ �ZdɄ �Z dʄ �Z
dːZd̐ez �Zd͐Z
dΐZdτ �Zi �adЄ �Zdф �Zd҄ �Z�d)dӄ�Zd�ad&�a�d*d�e�dz fdՄ�Z�d+d�e�dאee�e�e� f d�e�d�e�d�e�d�e�d�e�dz d�e�dz d�e�dz fdބ�Z �d,d�e�d�e�d�e�d�e�d�e�d�ee�e�e� f dאee�e�e� f d�ezd�e�d�ezd�ezd�e�dz d�e�dz fd��Z�dd�e�d�e�d�e�d�e�dz fd��Zd� �Zd�ad�ad�ad�a d� �Z!�d+d�e�dz fd��Z"�d-d��Z#�d"d��Z$i �a%d� �Z&d�Z'd� �Z(d�e�d�e�d5ee�e�f fd��Z)d�e�d�e�d5ee�e�f fd��Z*d�e�d�e�d5ee�e�f fd��Z+d�e e� d�e�d�e�d�ee�e�f d5df
d���Z,d�� �Z-d��Z.d�� �Z/d�� �Z0d�� �Z1d�� �Z2d�� �Z3d�a4�d � �Z5�d� �Z6�d� �Z7�d� �Z8�d� �Z9�d� �Z:�d� �Z;�d�Z<�d� �Z=�d � �Z>�d
� �Z?�d�d��Z@�d� �ZA�d.�d��ZB�d� �ZC�d� �ZD�d� �ZE�d� �ZF�d�d��ZG�d� �ZH e �jI d��� � �d� � � �ZJdS (/ � )�print_function)�absolute_import)�division)�unicode_literalsN)�AnyStr�Dict�List�Optional)�standard_library)�*)�read_file_secure�write_file_secure�
set_user_perm�open_file_not_symlink�
set_root_perm)�create_dir_secure�closefd�set_owner_dir_secure�set_perm_dir_secure)� root_flag�print_error�
get_groups�clpwd�SILENT_FLAG�logging�get_perm)�CL_ALT_NAME�ETC_CL_ALT_PATH�BASEDIR)�get_linksafe_gid�get_user_prefix)�UserNotFoundError)�make_userdir� read_file�read_file_cached��is_ea4_enabled)�get_alt_dirs)�get_website_id)�byteify�
unicodeify)�ClPwd� clcaptain)�Feature)�is_panel_feature_supported)�
sigterm_check)�ExternalProgramFailed�is_socket_file�mod_makedirs��get_boolean_param�CL_CONFIG_FILE)�loggerc � � e Zd Zd� ZdS )�CageFSExceptionc �0 � t j | g|�R i |�� d S �N)� Exception�__init__)�self�args�kwargss �]/builddir/build/BUILDROOT/cagefs-7.6.32-1.el8.cloudlinux.x86_64/usr/share/cagefs/cagefslib.pyr= zCageFSException.__init__E s) � ���4�1�$�1�1�1�&�1�1�1�1�1� N)�__name__�
__module__�__qualname__r= � rB rA r9 r9 D s# � � � � � �2� 2� 2� 2� 2rB r9 c � � e Zd ZdZdS )�SymlinkErrorz-Raised when symlink creation or repair fails.N)rC rD rE �__doc__rF rB rA rH rH I s � � � � � �7�7��DrB rH z.etc.version�/z/etc/cagefs/cagefs.iniz/etc/cl.selector/php.confz/usr/share/cagefsz/usr/share/cagefs/etc.newz/var/run/cagefsFz!/var/log/cagefs-php-opt-check.logz/etc/psa/psa.conf�/var/www/vhostsz/run/systemd/journal/dev-logz"/usr/share/cagefs-skeleton/dev/logz/dev/logz>/opt/cloudlinux/flags/available-flags.d/cagefs-no-dev-log.flagz</opt/cloudlinux/flags/enabled-flags.d/cagefs-no-dev-log.flagz/etc/sysconfig/syslogz -a z/etc/rsyslog.confz(/etc/rsyslog.d/cagefs-syslog-socket.confz/etc/rsyslog.d/schroot.confc � � t j | d� � dS # t $ r& t | d� � � � � Y dS w xY w)z�
/bin/touch analog - update timestamp of a file if it exists
or create a file otherwise
:param fname: file path
:type fname: string
N�a)�os�utime�OSError�open�close)�fnames rA �touchrT u s_ � �!�
����������� !� !� !��U�C����� � � � � � �!���s � �,A �A �returnc �� � d� } t t � � }t |� � D ]�\ }}|| � d� � r�|| � t
� � dk r_|| d dk s|| d dk r | || t
d� � }|||<