3 R��i%�@snddlZddlZddlZddlZddlZddlZddlTddlmZdZdZ dZ dZ dZ dZ ejeZde_d e_de_d e_d d �Zd d�Zdd�Zdd�Zdd�Zdd�Zdd�ZdDdd�ZdEdd�Zdd�Zdd �Zd!d"�Z d#d$�Z!d%d&�Z"d'd(�Z#d)d*�Z$d+d,�Z%d-d,�Z%d.d/�Z&d0d1�Z'd2d3�Z(d4d5�Z)d6d7�Z*d8d9�Z+d:d;�Z,dd?�Z.d@dA�Z/dBdC�Z0dS)F�N)�*)�PIPEz0.0.5����z/usr/local/lswsFcCstjddd�dS)Nz%(asctime)s.%(msecs)03dz [%(levelname)s] %(message)sz%Y-%m-%d %H:%M:%S)�formatZdatefmtz3%(asctime)s.%(msecs)03d [%(levelname)s] %(message)s)�loggingZ basicConfig�r r �"/usr/local/lsws/lsns/bin/common.py� init_loggingsr cCstjS)N)�this� serverRootr r r r � server_rootsrcCs |t_dS)N)r r)�rootr r r �set_server_rootsrcCst�d|S)Nz /lsns/conf/)r)�fileonlyr r r � get_conf_file!srcCst�d|S)Nz /lsns/bin/)r)rr r r � get_bin_file$srcCstj|�tjd�dS)Nr)r �error�sys�exit)�msgr r r � fatal_error's rcCsdddddgS)N�cpu�io�iops�mem�tasksr r r r r � get_options+srcCs|j�rdytjt|��}Wq�tk r`}z*|s@td||f�tjd||f�dSd}~Xq�XnVytj|�}WnFtk r�}z*|s�td||f�tjd||f�dSd}~XnX|j t �k�r�|s�td|j t �f�tjd|j t �f�dS|dfS) NzError getting UID for %s: %sFzError getting name for %s: %sz#Specified uid: %d < minimum uid: %dT)NF)NF)NF) �isdigit�pwd�getpwuid�int� Exceptionrr �debug�getpwnam�pw_uid� get_min_uid)Zparam�no_fatal� user_info�errr r r �get_user.s*r,cCs2g}x(|D] }t||�\}}|r |j|�q W|S)N)r,�append)�uidsr)�usersZuidr*Zgotr r r � get_usersFs  r0cCstjjd�rdSdS)Nz/etc/plesk-releaseTF)�os�path�existsr r r r � get_pleskNs r4cCst�r dSdS)Ni'i�)r4r r r r �get_def_min_uidSsr5cCstjdkrtjStd�}yt|d�}WnPtk rv}z4tjdkr^tjd||t�f�dt_t�t_tjSd}~XnXy |j �}WnRtk r�}z6tjdkr�tjd||t�f�dt_t t��}WYdd}~XnX|j �t |�t_tj dtj�tjS)Nrz lsns.conf�rz8Error opening %s: %s, continuing with default min uid %dTz8Error reading %s: %s, continuing with default min uid %dzUsing min uid: %d)r �min_uidr�openr$�loggedr �infor5�readline�str�closer#r%)Zfullfile�fr+Zuidstrr r r r(Xs,     r(cCs\i}g}tj�}xF|D]>}|jt�kr(q|j|kr4q|jdkr@q|||j<|j|�qW|S)NZnobody)r!�getpwallr'r(�pw_namer-)Zuid_dictZ final_usersr/�userr r r r?ps     r?cCs t�dS)Nz/lsns/conf/lscntr.txt)rr r r r �container_filesrBcCs t�dS)Nz/conf/httpd_config.conf)rr r r r � ols_conf_file�srCcCs t�dS)Nz/conf/httpd_config.xml)rr r r r �lsws_conf_file�srDcCs t�dS)Nz /lsns/conf/ns_disabled_uids.conf)rr r r r �get_disabled_uid_file�srEcCs t�dS)Nz /lsns/conf/ns_disabled_uids.conf)rr r r r rE�scCs t�dS)Nz/lsns/conf/packages)rr r r r � get_pkg_dir�srFcCsBtjjt��s4tjjt��s$td�tjt�dd�t�d|S)Nz3Missing LiteSpeed high level installation directoryi�)�modez/%s.conf)r1r2�isdirrFrr�mkdir)�pkgr r r �pkg_to_filename�s rKcCs t�dS)Nz"/lsns/conf/redis_package_size.conf)rr r r r �get_package_size_file�srLcCstjt�tj�std�dS)Nz5You must configure LiteSpeed for LiteSpeed Containers)r1�accessrB�F_OKrr r r r �ls_ok�srOcCs"tjdtj�rdt_dSt�dS)Nz/etc/cagefs/cagefs.mpT)r1rMrNr �clrOr r r r �ls_cl_ok�srQcCstjS)N)r rPr r r r �is_cl�srRcCsXtjd||f�tjd|gttd�}|jdkrTtd|jjd�d|j jd��dS)Nz restart_external %s by touch: %sZtouch)�stdout�stderrrz!Error in running: touch, errors: zutf-8� ) r r%� subprocess�runr� returncoderrS�decoderT)�fileZdesc�resultr r r �touch_restart_external�s r\c Cs i}y�tjjt��dkr�tt�d�}tj|�}|j�x`|dD]T}tjj|�}x"|D]}|j |krV|||j <PqVWtjj |�s�tj |�t |d�q@W|r�t dd�n*x(|D] }|j |kr�q�t |j dd�q�WWn0tk �r}ztd |�WYdd}~XnXdS) Nrr6Z reset_listz in lscntr.txtz,/usr/local/lsws/admin/tmp/.lsphp_restart.txtzfor allz/.lsphp_restart.txtzfor homezError managing restart: %s)r1r2�getsizerBr8�json�loadr=�dirname�pw_dirr@r3rIr\r$r) r/�allZ users_usedr>�datarZZdironlyrAr+r r r �restart_external�s.           rdc Cs�i}i}tjd�}g}x�|D]�}t|�dkr<|dd�dkst|�dkrX|dd�dkst|�dkr�|dd�dks|dd�dkr�qd |}tj|�}t|j�d krtjd |d t|��|j |�|||<qWxn|D]f}d }x\|�r@d}xL|D]D} || k�rq�t|�t| �kr�|| dt|��kr�|j | �d }Pq�Wq�Wq�WxL|D]D}tj ||j �} tj ||j �} | |k�r�i|| <||| | <�qLWtjdt|�dt|��||fS)Nz/devrZloop�ZcdromrZdm�srz/dev/rz filename: z statinfo: TFzFinal devices: z Block Devices: )r1�listdir�len�stat�S_ISBLK�st_moder r%r<r-�remove�major�st_rdev�minor) Z block_devicesZ statinfo_dev�filesZdevicesrZ�filenameZstatinfoZdeviceZretryZinnerrmror r r � get_devices�s@  d      $   rrcCs�|dkr dSt|�}|dkr&d}d}n:|dkr8d}d}n(|dkrJd}d}n|dkr\d}d }n|St||�d kr�d ||tt||d d ��|f}nd |||f}tt|��|kr�|Stjd tt|��||f�|S)N�l�Ti@�Gi�Mi�K� z%d.%d%sz%d%sz%s != %s use %s)�float�roundr#r<�int_num_valuesr r%)�valstr�valZdivisorZ qualifierZstr_numr r r �str_num_values�s.(r~cCs$|dks|dkrdS|j�r$t|�St|�dkrsT0    "