B
    v&ù`{   ã               @   s  d dl mZ d dl mZ d dl mZ d dl mZ d dlmZ e ¡  d dlT d dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d d	lmZmZ d d
lmZ d dlmZ d dlmZmZ d dlmZm Z m!Z!m"Z" d dlm#Z# d dl$m%Z% dZ&ej' (e&¡ d dl)Z)d dl*Z*d dl*m+Z+m,Z,m-Z- d dl.m/Z/m0Z0m1Z1 d dl.m2Z2m3Z3m4Z4m5Z5m6Z6 dZ&ej' (e&¡ d dl)m7Z7 dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@dZAdZBd ZCd!ZDd"ZEd#ZFd$ZGd%ZHd&ZId'd(„ ZJd)d*„ ZKd+d,„ ZLd-d.„ ZMd/d0„ ZNd1d2„ ZOd3d4„ ZPdnd6d7„ZQd8d9„ ZRd:d;„ ZSdod=d>„ZTd?d@„ ZUdAdB„ ZVdCdD„ ZWdpdEdF„ZXdGdH„ ZYdIdJ„ ZZdKdL„ Z[dMdN„ Z\dqdPdQ„Z]dRdS„ Z^dTdU„ Z_dVdW„ Z`dXdY„ ZadZd[„ Zbd\d]„ Zcd^d_„ Zdd`da„ ZeG dbdc„ dcefƒZgddde„ Zhdfdg„ Zidhdi„ Zjdjdk„ Zkdlelkre m¡  egejnejoƒZpekejqdmd… ƒ dS )ré    )Úprint_function)Úabsolute_import)Údivision)Úunicode_literals)Ústandard_library)Ú*N)ÚCopyDirectory)Úexec_commandÚexec_command_null_input)Údelete_cagefs_module_plesk)Úprint_error)Údelete_line_from_fileÚwrite_file_lines)ÚadminsÚDIRECTADMIN_NAMEÚ	getCPNameÚNotSupported)Úmod_makedirs)ÚClsudoz/usr/share/cagefs)Ú
verCompareÚadd_syslog_socketÚremove_syslog_socket)Úlitespeed_enableLVE_configureÚlitespeed_config_writeÚlitespeed_lsphp5_path_change)ÚtouchÚadd_mount_to_cagefs_mpÚPOSTGRES_CONFÚPOSTGRES_CL7_FOLDERÚDEFAULT_POSTGRES_FOLDER)ÚEXCLUDE_PATHz7.3.1z1.el7.cloudlinuxz/usr/share/cagefs-skeletonz/usr/share/cagefs-plugins/z/usr/local/psa/admin/z#/usr/local/cpanel/whostmgr/docroot/z/usr/local/interworx/z/usr/local/ispmgr/z/usr/local/directadmin/plugins/z!/etc/cagefs/cagefs.plugin.disablez/etc/cron.d/cagefs_cronz$/etc/cron.d/cpanel_php_sessions_cronzC/etc/dnf/universal-hooks/multi_pkgs/transaction/ea-php__WILDCARD__/zA/etc/yum/universal-hooks/multi_pkgs/posttrans/ea-php__WILDCARD__/zsetup_multiphp_integration.shz2/etc/cron.hourly/clean_user_alt_php_sessions_pleskz/usr/share/cagefs/exclude.dz%/etc/cron.d/exclude_users_cagefs_cronc               C   s   t j d¡rtS tS dS )z1
    Get path where hook should be installed
    z	/etc/dnf/N)ÚosÚpathÚexistsÚUNIVERSAL_HOOK_EA_PHP_PATH_DNFÚUNIVERSAL_HOOK_EA_PHP_PATH_YUM© r&   r&   ú2/usr/share/cagefs-plugins/install-cagefs-plugin.pyÚget_universal_hook_ea_php_pathK   s    r(   c               C   s2   t tjdƒdk rtƒ  ntj t¡r.t t¡ d S )Nz55.9999r   )	r   ÚcpÚversionÚcreate_cron_multiphpr!   r"   ÚisfileÚCPANEL_CRON_PATHÚunlinkr&   r&   r&   r'   Úmanage_cron_fileU   s    r/   c          
   C   s‚   ddd„}y(ddl m}m}m} tƒ }| | ¡ W nJ tk
rN   |dƒ Y n0 |||fk
r| } z||ƒ W d d }~X Y nX d S )Né   c             S   s"   t j dt| ƒ ¡ t  |¡ d S )Nz%s
)ÚsysÚstderrÚwriteÚstrÚexit)ÚmessageZstatusr&   r&   r'   Úexit_with_error^   s    z'update_sudoers.<locals>.exit_with_errorr   )Ú
NoSuchUserÚUnableToReadFileÚUnableToWriteFilez=Cannot import Clsudo. Check if python-cllib package installed)r0   )Úclsudor8   r9   r:   r   Úadd_cagefs_userÚImportError)Úuserr7   r8   r9   r:   ZsudoÚer&   r&   r'   Úupdate_sudoers]   s    
r@   c              C   s,   t j t¡s(ttdƒ} |  d¡ |  ¡  dS )z@
    This func creates cron task which run every 10 minutes
    Úwzw*/10 * * * * root /usr/bin/flock -n /var/run/cloudlinux_multiphp.cronlock /usr/share/cagefs/setup_multiphp_integration
N)r!   r"   r#   r-   Úopenr3   Úclose)Úfr&   r&   r'   r+   n   s    

r+   c              C   s,   t j t¡s(ttdƒ} |  d¡ |  ¡  dS )zi
    This func creates cron task which runs every 30 minutes
    to clean php sessions inside cagefs
    rA   z€*/29 * * * * root /usr/bin/flock -n /var/run/cloudlinux_cleanuserphpsessions.cronlock /usr/share/cagefs/clean_user_php_sessions
N)r!   r"   r#   ÚCPANEL_PHP_SESSIONS_CRON_PATHrB   r3   rC   )rD   r&   r&   r'   Úcreate_cron_cpanel_sessionsx   s    

rF   c              C   s,   t j t¡s(ttdƒ} |  d¡ |  ¡  dS )zk
    This func creates cron task which runs every 10 minutes to actualize CageFS exclude users file(s)
    rA   z*/10 * * * * root /usr/bin/flock -n /var/run/cloudlinux_cagefs_exclude_users.cronlock /usr/share/cagefs/exclude_users_cleaner.py
N)r!   r"   r#   ÚEXCLUDE_USERS_CRON_FILErB   r3   rC   )rD   r&   r&   r'   Úcreate_exclude_users_cronƒ   s    

rH   c              C   sV   y<t ddƒ} d}x | D ]}| d¡dkrd}P qW |  ¡  |S  tk
rP   dS X d S )Nz/proc/self/mountinfoÚrFz shared:éÿÿÿÿT)rB   ÚfindrC   ÚIOError)rD   ÚfoundÚliner&   r&   r'   Úshared_mounts_are_found   s    

rO   Fc             C   s:   | s
t ƒ r6tdƒ tj d¡s&tdƒ tdƒ tdƒ dS )zØ
    Change shared mounts to private and remount CageFS when shared mounts are found. see CAG-520 for details
    :param force: do not search for shared mounts, make changes unconditionally
    :type force: bool
    z9/usr/sbin/cagefsctl --unmount-really-all > /dev/null 2>&1z/opt/suphp/sbin/suphpz,/bin/umount /opt/suphp/sbin > /dev/null 2>&1z-/bin/mount --make-rprivate / > /dev/null 2>&1zA/usr/sbin/cagefsctl --without-lock --remount-all > /dev/null 2>&1N)rO   r	   r!   r"   r,   )Úforcer&   r&   r'   Úfix_shared_mounts›   s    
rQ   c              C   s(  t jdkr:tt jdƒdkr:ttd tƒ} |  ¡  tƒ  nêt jdkr2ttd t	ƒ} |  ¡  t
j t	d ¡r–t
 t	d tjtjB tjB tjB tjB ¡ t jdkr$t
j d	¡s¸td	d
ƒ t jdkrtdt	 d ƒ t jdkrðt td d¡ nt td d¡ nt td d¡ tdƒ tdƒ tdƒ tƒ  nòt jdkrVttd tƒ} |  ¡  nÎt jdkrâtt jdƒdkr$d t¡}x,dD ]$}td ||¡d t|¡ƒ ¡  q„W tt jdƒdkrØtd |¡d t¡ƒ ¡  tdƒ nBt jd kr$ttd! tƒ} |  ¡  td"t d# ƒ td$t d% ƒ d S )&NÚPleskÚ10r   zplesk-cagefsÚcPanelz/cpanel-cagefs/usr/local/cpanel/whostmgr/docrootzcgi/addon_cagefs.cgiz11.38.1z/var/cpanel/appsií  z63.9999z(sed -i -e '/^#WHMADDON:cagefs:CageFS/d' z65.9999z"cpanel-cagefs/cagefs-cpanel66.confz/var/cpanel/apps/cagefs.confz"cpanel-cagefs/cagefs-cpanel64.confzcpanel-cagefs/cagefs.confz&chmod 600 /var/cpanel/apps/cagefs.confzE/usr/local/cpanel/bin/register_appconfig /var/cpanel/apps/cagefs.confz&/usr/local/cpanel/etc/init/startcpsrvdÚ	InterWorxz$interworx-cagefs/usr/local/interworxÚ
ISPManagerÚ5rJ   z&{0}ispmanager-cagefs/usr/local/ispmgr/)ZaddonZetczskins/siriusz{0}{1}z4.4.4z{}skins/mobilez/usr/bin/killall ispmgrÚDirectAdminz0directadmin-cagefs/usr/local/directadmin/pluginszchown -R diradmin:diradmin Úcagefszchmod -R 755 zcagefs/admin)r)   Únamer   r*   r   ÚSOURCE_PATHÚROOT_PLESK_DIRZprocessÚregister_cagefs_pluginÚROOT_CPANEL_DIRr!   r"   r#   ÚchmodÚstatÚS_IRWXUÚS_IRGRPÚS_IXGRPÚS_IROTHÚS_IXOTHÚisdirr   r	   ÚshutilÚcopyfiler/   ÚROOT_IWORX_DIRÚformatÚROOT_ISPMGR_DIRÚROOT_DA_DIR)ZcpdirZm_pathrZ   r&   r&   r'   Úinstall_plugin_web©   sL    
*




$
rm   c              C   sÚ  t jdkrœtt jdƒdkrœtƒ  tj td ¡r>t	 
td ¡ tj td ¡r\t	 
td ¡ tj td ¡rzt	 
td ¡ tj td ¡r˜t	 
td ¡ n:t jdkr¬tj td	 ¡rÆt td	 ¡ tj td
 ¡rät	 
td
 ¡ tj td ¡rt td ¡ tj td ¡r$t td ¡ tj td ¡rDt td ¡ t jdkrxtj d¡rxtdƒ t d¡ tdƒ tj t¡rt t¡ tj t¡rÖt t¡ n*t jdkrütj td ¡rØt	 
td ¡ tj td ¡rÖt	 
td ¡ nÚt jdkrªtt jdƒdkrÖtj td ¡r:t	 
td ¡ tj d¡rRt d¡ tj d¡rjt d¡ tj d¡r‚t d¡ tj d¡ršt d¡ tj d¡r²t d¡ tj d¡rÊt d¡ tj d¡rât d¡ tj d ¡rút d ¡ tj d!¡rt d!¡ tj d"¡r*t d"¡ tj d#¡rBt d#¡ tj d$¡rZt d$¡ tj d%¡rrt d%¡ t	 
d&d'¡ tjd(d)gd*td+ƒtjtjd'd,} |  ¡  n,t jd-krÖtj td. ¡rÖt	 
td. ¡ d S )/NrR   rS   r   z"htdocs/images/modules/plesk-cagefszhtdocs/modules/plesk-cagefszplib/modules/plesk-cagefsz#plib/templates/modules/plesk-cagefsrT   zcgi/addon_cagefs.cgiz
cgi/cageFSzthemes/x/icons/cagefs.gifzimages/CageOnly32.pngzimages/cagefs-32x32.pngz11.38.1z/var/cpanel/apps/cagefs.confzG/usr/local/cpanel/bin/unregister_appconfig /var/cpanel/apps/cagefs.confz&/usr/local/cpanel/etc/init/startcpsrvdrU   zplugins/cagefszhtml/images/cagefsrV   rW   rJ   zaddon/cagefsz"/usr/local/ispmgr/addon/CageFS.phpz&/usr/local/ispmgr/addon/CageFSUser.phpz*/usr/local/ispmgr/addon/CageFSUser_get.phpz(/usr/local/ispmgr/addon/CageFSBackup.phpz0/usr/local/ispmgr/etc/ispmgr_mod_cagefsusers.xmlz+/usr/local/ispmgr/etc/ispmgr_mod_cagefs.xmlz1/usr/local/ispmgr/etc/ispmgr_mod_cagefsbackup.xmlz,/usr/local/ispmgr/skins/mobile/mb-cagefs.pngz+/usr/local/ispmgr/skins/mobile/m-cagefs.pngz1/usr/local/ispmgr/skins/mobile/t-CagefsStatus.pngz,/usr/local/ispmgr/skins/sirius/mb-cagefs.pngz+/usr/local/ispmgr/skins/sirius/m-cagefs.pngz1/usr/local/ispmgr/skins/sirius/t-CagefsStatus.pngz&/usr/local/ispmgr/var/.xmlcache/ispmgrTZkillallZispmgrFz	/dev/null)ÚshellÚstdinÚstdoutr2   Z	close_fdsrX   rY   )r)   rZ   r   r*   r   r!   r"   r#   r\   rg   Úrmtreer^   Úremover	   r,   r-   r.   rE   ri   rk   Ú
subprocessÚPopenrB   ÚPIPEZSTDOUTÚwaitrl   )Úpr&   r&   r'   Údelete_plugin_webÙ   s    















rx   é¤  c             C   sJ   t j |¡}t j |¡s"t|dƒ t j |¡s:t | |¡ t  ||¡ d S )Nií  )	r!   r"   Údirnamerf   r   r,   rg   rh   r_   )ÚsrcÚdstZpermZbase_dirr&   r&   r'   Úinstall_file'  s    
r}   c             C   s   t t|  dƒ d S )Nz/etc/cl.selector/native.conf)r}   r[   )r"   r&   r&   r'   Úinstall_native_conf0  s    r~   c              C   s¢   t j} tj d¡ržt  ¡  t d¡}d}d}d}xT| D ]L}d| d }||kr6tj |¡r6|st||krt| 	|¡ d}| 	|¡ d}q6W |ržt 
d|¡ tdƒ d S )Nz/etc/cagefs/cagefs.mpFzl# Please add exclamation sign at the beginning of the line if you want to mount path read-only, like below.
ú!Ú
Tz/usr/share/cagefs/need.remount)Ú	cagefsctlÚREAD_ONLY_MOUNTSr!   r"   r,   Zcheck_mp_fileÚ	cagefslibZ	read_filerf   ÚappendZ
write_filer   )ZMOUNTSZmp_fileZcomment_addedÚcommentZ
mp_changedr"   rN   r&   r&   r'   Ú!add_read_only_mounts_to_cagefs_mp4  s$    



r†   c              C   s¶   t  ¡ } x¨| D ] }t|jƒdd … }|j}d| d | d }tj |¡ry,t |¡}|dkrtt 	|¡ t 
d|¡ W q tk
r¬ } ztdt|ƒtjd W d d }~X Y qX qW d S )	Néþÿÿÿz/var/cagefs/ú/z/etc/cl.selector/php.iniz/usr/selector/php.iniz/usr/selector.etc/php.inizError:)Úfile)ÚpwdZgetpwallr4   Zpw_uidZpw_namer!   r"   ÚislinkÚreadlinkr.   ÚsymlinkÚOSErrorÚprintr1   r2   )ZpwrN   Úprefixr>   r"   Zlinktor?   r&   r&   r'   Ú!switch_php_ini_symlinks_for_usersI  s    


r‘   c             C   sÀ   d}d}| st j t| ¡r¼tt j |¡ }t j |¡sBt|dƒ t j t| ¡r~t j t| ¡s~tdt | d t | ƒ t j t| ¡r¼tƒ  yt  	t| ¡ W n t
k
rº   Y nX d S )Nz/usr/selector/php.iniz/usr/selector.etc/php.iniií  z/bin/cp -p ú )r!   r"   r,   ÚSKELETONrz   rf   r   r	   r‘   r.   rŽ   )rP   Zold_ini_pathZnew_ini_pathZnew_dir_pathr&   r&   r'   Úmove_php_ini_to_selector_etcY  s    
 r”   c               C   s   t ddd d S )Nz/usr/local/easyT)Ú	read_only)r   r&   r&   r&   r'   Úadd_usr_local_easy_mountj  s    r–   c             C   s&   d}t j |¡r"t|| ƒr"tdƒ d S )Nz/etc/cagefs/cagefs.mpz/usr/share/cagefs/need.remount)r!   r"   r,   r   r   )rN   r"   r&   r&   r'   Údelete_mount_from_cagefs_mpn  s    
r—   c               C   s   t dƒ t ¡  d S )Nz/var/cpanel/php/sessions)r—   r   Zadd_mounts_for_ea_php_sessionsr&   r&   r&   r'   Úsetup_ea_php_sessionsu  s    r˜   c           
   C   sŒ   d} yNt ddƒ}x6|D ].}| d¡r| ¡ }|r|d dkr|d } qW | ¡  W n4 ttfk
r† } ztdt|ƒƒ W dd}~X Y nX | S )zD
    Return UID_MIN setting from /etc/login.defs file as string
    Nz/etc/login.defsrI   ZUID_MINr   r0   z5Error while reading UID_MIN from /etc/login.defs file)rB   Ú
startswithÚsplitrC   rŽ   rL   r   r4   )Úmin_uidrD   rN   Úar?   r&   r&   r'   Údetect_min_uidz  s    


 r   éô  c             C   s8   t j d¡s4tƒ }|r$td| ƒ ntdt| ƒ ƒ dS )z&
    Set min_uid value for CageFS
    z/etc/cagefs/cagefs.min.uidz"/usr/sbin/cagefsctl --set-min-uid=N)r!   r"   r,   r   r	   r4   )Údefaultr›   r&   r&   r'   Úset_min_uidŒ  s
    r    c              C   sº   t ƒ tkrtj td¡} ntj td¡} tƒ }y
tƒ }W n tk
rL   dS X x$|D ]}| 	|d ¡ t
 |¡ qTW |s|dS t| |dƒ t | d¡ t ƒ tkr¶tj td¡} t| dƒ dS )	zí
    Process control panel admins:
      - Add all admins to sudoers
      - Add all admins to /etc/cagefs/exclude/*.admins, which proceesed by hooks
      - Remove 'admin' from /etc/cagefs/exclude/directadminusers
    :return: None
    zdirectadmin.adminszpanel.adminsNr€   rA   i€  ÚdirectadminusersZadmin)r   r   r!   r"   Újoinr    Úlistr   r   r„   r   r<   r   r_   r   )Zadmins_list_fileZadmin_lines_for_writeZlist_panel_adminsZ
admin_namer&   r&   r'   Úsync_control_panel_admins˜  s$    



r¤   c              C   s@  t ƒ  tƒ  tj d¡sZtj d¡s.tddƒ tdƒ tj d¡rZtdƒ tdƒ tdƒ tj d¡sptdd	ƒ tj td
 ¡r¦tj t	j
¡r¦tj td ¡s¦tdƒ tƒ  tddd t	j d¡} tj | ¡sÚt| d	ƒ t| dd t	j d¡}tj |¡s
t|d	ƒ t|dd tdƒ tdƒ tdƒ tj t	j¡rHtdƒ ntdƒ tj t¡r¶tj t¡r¶tj t¡s¶yt t¡ d}W n tk
r¦   d}Y nX |r¶ttƒ tj d¡râtj d¡sât td d¡ tj d¡rút d¡ tj t¡stƒ  tjdkrÌt tj!dƒdkrÌtdƒ tdƒ t"dƒ tj t#¡s\tt#d ƒ t td! tj $t#d"¡¡ t %tj $t#d"¡d#¡ t&d$ƒ t'd%ƒ td&ƒ d'}t(d(|t)f ƒ td)|t)f ƒ nptjd*krÈt*ƒ  td+dd xt	j+D ]}t|dd qòW t,ƒ  tj d,¡r$td-ƒ t-d.ƒ t-d/ƒ t-d0ƒ t-d1ƒ t-d2ƒ td3ƒ td4ƒ td5ƒ t(d6ƒ td7ƒ t(d8ƒ td9ƒ tj t#¡sœtt#d ƒ t td: tj $t#d;¡¡ t %tj $t#d;¡d#¡ t&d<ƒ t.td= d>ƒ t'ƒ  tj t/d? ¡r$t %t/d? t0j1t0j2B t0j3B t0j4B t0j5B ¡ tj d@¡r:td@ƒ tj dA¡rPtdAƒ t6ƒ }tj |¡snt 7|¡ tj |t8 ¡st 9dB|t8 ¡ tj dC¡r¾tj t:t8 ¡r¾t ;t:t8 ¡ t<ƒ  nttjdDkrt"dEƒ tj t#¡sôtt#d ƒ t tdF tj $t#dG¡¡ t %tj $t#dG¡d#¡ t&dHƒ t'ƒ  tj dI¡r¶tj dJ¡shtj dK¡rht dKdJ¡ t dIdK¡ yt= >dL¡}t ?dKd|j@¡ W n tAk
r¨   Y nX t %dKdM¡ tj dN¡r<tj dO¡sìtj dP¡rìt dPdO¡ t dNdP¡ t ?dPdd¡ t %dPdQ¡ n&tjdRkr‚tj dS¡s@tdTƒ tdƒ tj dU¡r^tdVƒ tdUƒ t'ƒ  t BdWd¡ tdXƒ t&dYƒ nºtjdZkr td[ƒ t'ƒ  tj t#¡s´tt#d ƒ tj tC¡sÌttCdƒ t td\ tj $t#d]¡¡ tDƒ  t&d^ƒ t Ed_¡ n<t(d`tj da tj! ƒ tj tC¡s0ttCdƒ tDƒ  t'ƒ  dbS )cz(
    Install cagefs plugin on panel
    z"/etc/cagefs/etc.safe/disable.etcfsz/etc/cagefs/etc.safeié  z/usr/share/cagefs-skeleton/binz /usr/sbin/cagefsctl --update-etcz!/usr/share/cagefs/etc.update.donez/usr/share/cagefs/need.remountz	/etc/mailií  z/binz'/var/lve/lveinfo.ver.cagefs/lveinfo.verz/var/run/nscdF)r•   ZnodejsTÚpythonz
@/root,700z/tmp/lshttpdz#!/usr/local/awstats/wwwroot/cgi-binz/dev/shmz/etc/cron.dz/etc/cron.d/cp-cagefs-cronzplesk-cagefs-cronz/etc/cron.daily/cagefs.cronrR   rS   r   z)/bin/sed -i '/pam_lve.so/d' /etc/pam.d/suz+/bin/sed -i '/pam_sulve.so/d' /etc/pam.d/suZpsaadmiè  zplesk-cagefs/pleskuserlistÚpleskuserlisti€  zplesk-cagefs/plesk.native.confi'  z!/etc/cagefs/enable.duplicate.uidsz3/usr/share/cagefs/clean_user_alt_php_sessions_pleskz	%s --> %sz/bin/cp -f %s %srT   z/usr/local/cpanel/varz#/usr/share/cagefs-skeleton/bin/bashzJln -fs /bin/bash /usr/share/cagefs-skeleton/usr/local/cpanel/bin/jailshellz?/usr/bin/nohup /scripts/perlinstaller YAML::Syck &> /dev/null &zH/usr/bin/nohup /scripts/perlinstaller Template::Constants &> /dev/null &z@/usr/bin/nohup /scripts/perlinstaller XML::Simple &> /dev/null &z@/usr/bin/nohup /scripts/perlinstaller XML::LibXML &> /dev/null &z?/usr/bin/nohup /scripts/perlinstaller IO::Scalar &> /dev/null &z-/usr/share/cagefs/cpanel/cpanel-delete-cagefsz,/usr/share/cagefs/cpanel/cpanel-hooks-cagefsz2/usr/share/cagefs/cpanel/cpanel_hooks_manage.py -izRebuilding Apache's suexec...z&/usr/sbin/cpanel-compile-suexec.sh 500zRebuilding suphp...z#/usr/sbin/cpanel-compile-suphp.sh 1zcpanel-cagefs/cpaneluserlistÚcpaneluserlistz cpanel-cagefs/cpanel.native.confz!cpanel-cagefs/exclude_mounts.confz"/etc/container/exclude_mounts.confzcgi/addon_cagefs.cgiz=/usr/share/cagefs-plugins/hooks/cpanel/delete-unused-hooks.shz5/usr/share/cagefs-plugins/hooks/jail_shell_disable.shz,/usr/share/cagefs/setup_multiphp_integrationz	/etc/dnf/rU   Ziworxzinterworx-cagefs/iworxuserslistÚiworxuserslistz"interworx-cagefs/iworx.native.confz1/usr/share/cagefs-plugins/binary/inetrworx/suexecz/usr/sbin/suexec.bakz/usr/sbin/suexecÚapacheiH	  z0/usr/share/cagefs-plugins/binary/inetrworx/suphpz/usr/sbin/suphp.bakz/usr/sbin/suphpií	  rV   z!/etc/cagefs/cagefs.base.home.dirsz5echo "^/var/www/" > /etc/cagefs/cagefs.base.home.dirsz/var/www/php-binz/bin/chmod o-r /var/www/php-binz&/usr/local/ispmgr/var/.xmlcache/ispmgrz/usr/bin/killall ispmgrz(ispmanager-cagefs/ispmanager.native.confrX   z/var/www/htmlz#directadmin-cagefs/directadminusersr¡   z*directadmin-cagefs/directadmin.native.confz7/usr/local/directadmin/custombuild/build set cagefs yeszPanel name: z
 version: N)Fr”   rH   r!   r"   r#   r   r   r	   r“   r   ZLICENSE_TIMESTAMP_FILEr†   r   ZSELECTOR_CONF_DIR_TEMPLATErj   rf   r—   r,   ZDEV_SHM_OPTIONSr   r   r   ÚrmdirrŽ   rg   rh   r[   rr   ÚNEED_PLUGINrm   r)   rZ   r   r*   r@   ÚNEW_EXCLUDE_PATHr¢   r_   r~   r    r   Ú"PLESK_CRON_PHP_CLEANER_HOURLY_PATHr–   r‚   r˜   r
   r}   r^   r`   ra   rb   rc   rd   re   r(   ÚmakedirsÚEA_PHP_UNIVERSAL_HOOKr   r%   r.   rF   ÚgrpÚgetgrnamÚchownÚgr_gidÚKeyErrorrq   r    r¤   Úsystem)Znodejs_selector_conf_dirZpython_selector_conf_dirZremovedÚsourcer"   Zuniversal_hook_ea_php_pathÚgrr&   r&   r'   Úinstall_plugin»  s0   




*




*







r¸   c               C   sÎ  t ƒ  tj d¡rt d¡ tj d¡r2t d¡ tj t¡rHt t¡ tj t¡r^t t¡ tjdkr¼t	tj
dƒdkr¼tj tj td¡¡r¢t tj td¡¡ tj d¡r¸t d¡ nôtjdkr€td	ƒ td
ƒ tdƒ tdƒ tdƒ tdƒ tj tj td¡¡r$t tj td¡¡ tj d¡r<t d¡ tj tt ¡r\t tt ¡ tj tt ¡r°t tt ¡ n0tjdkrtj tj td¡¡r¸t tj td¡¡ tj d¡rÒt dd¡ tj d¡rìt dd¡ tj d¡r°t d¡ nªtjdkrFt	tj
dƒdkr°tdƒ tj d¡r°t d¡ njtjdkr˜tj tj td¡¡r~t tj td¡¡ tj d¡r°t d¡ ntd tj d! tj
 ƒ tdd" td#d$ tƒ  d%S )&z*
    Remove cagefs plugin from system
    z/etc/cron.d/cp-cagefs-cronz/etc/cron.daily/cagefs.cronrR   rS   r   r¦   z&/etc/cagefs/securelinks/plesk.htaccessrT   z-/usr/share/cagefs/cpanel/cpanel-delete-cagefsz2/usr/share/cagefs/cpanel/cpanel_hooks_manage.py -dzRebuilding Apache's suexec...z./usr/sbin/cpanel-compile-suexec.sh 500 restorezRebuilding suphp...z+/usr/sbin/cpanel-compile-suphp.sh 1 restorer§   z'/etc/cagefs/securelinks/cpanel.htaccessrU   r¨   z/usr/sbin/suexec.bakz/usr/sbin/suexecz/usr/sbin/suphp.bakz/usr/sbin/suphpz*/etc/cagefs/securelinks/interworx.htaccessrV   rW   rJ   z/usr/bin/killall ispmgrz+/etc/cagefs/securelinks/ispmanager.htaccessrX   r¡   z,/etc/cagefs/securelinks/directadmin.htaccessz'Current panel unsupported. Panel name: z
 version: )Zforce_valuez$SERVER_ROOT/fcgi-bin/lsphp5)Zlsphp5_pathN)rx   r!   r"   r#   rr   r­   rG   r)   rZ   r   r*   r¢   r¬   r	   r   r%   r¯   r.   r$   rg   rh   r   r   r   r&   r&   r&   r'   Údelete_plugin”  sh    






r¹   c               C   s0   t jdkrtt jdƒdkrdS t jdkr,dS dS )NrR   rS   r   T)rT   rU   rV   rX   F)r)   rZ   r   r*   r&   r&   r&   r'   Úcp_supportedà  s
    
rº   c           
   C   s€   d} t j| ddd}zXtj d¡s.tj d¡rjtdƒ tdƒ tj d	¡rRtd
ƒ tdƒ tdƒ tdƒ W dt  || ¡ X dS )z$
    Periodically update cagefs
    z*/var/run/cloudlinux_update_cagefs.cronlockFT)rv   Úquietz/etc/cagefs/users.disabledz/etc/cagefs/users.enabledzX/usr/bin/ionice -c 3 /usr/sbin/cagefsctl --update --do-not-ask --silent > /dev/null 2>&1z_/usr/bin/ionice -c 3 /usr/sbin/cagefsctl --skip-php-reload --setup-cl-selector > /dev/null 2>&1z/usr/share/cagefs/need.remountz2/usr/sbin/cagefsctl --remount-all > /dev/null 2>&1zL/usr/bin/ionice -c 3 /usr/sbin/cagefsctl --clean-var-cagefs > /dev/null 2>&1zM/usr/bin/ionice -c 3 /usr/sbin/cagefsctl --clean-config-dirs > /dev/null 2>&1zD/usr/bin/ionice -c 3 /usr/sbin/cagefsctl --tmpwatch > /dev/null 2>&1N)r   Úacquire_lockr!   r"   r#   r	   r,   Zunlock)ZlocknameZlockfiler&   r&   r'   Úcron_updateè  s    r½   c              C   sŠ   t jdkr†tj d¡r†tj d¡s:tj d¡r:t dd¡ t dd¡ yt d¡} t 	dd| j
¡ W n tk
rx   Y nX t dd¡ d S )NrU   z1/usr/share/cagefs-plugins/binary/inetrworx/suexecz/usr/sbin/suexec.bakz/usr/sbin/suexecr©   r   iH	  )r)   rZ   r!   r"   r#   rg   rh   r°   r±   r²   r³   r´   r_   )r·   r&   r&   r'   Úcall_triggerü  s    

r¾   c               C   sd   t jdkr`tj d¡r`tj d¡s:tj d¡r:t dd¡ t dd¡ t ddd¡ t dd¡ d S )NrU   z0/usr/share/cagefs-plugins/binary/inetrworx/suphpz/usr/sbin/suphp.bakz/usr/sbin/suphpr   ií	  )	r)   rZ   r!   r"   r#   rg   rh   r²   r_   r&   r&   r&   r'   Úcall_trigger2
  s    
r¿   c               C   s0   t j t¡rtƒ  t  t¡ ntƒ  ttƒ d S )N)r!   r"   r#   r«   rm   rr   rx   r   r&   r&   r&   r'   Útoggle_plugin  s
    rÀ   c               @   s   e Zd ZdZdZdd„ ZdS )ÚControlPanelÚ c             C   s   || _ || _d S )N)rZ   r*   )ÚselfrZ   r*   r&   r&   r'   Ú__init__!  s    zControlPanel.__init__N)Ú__name__Ú
__module__Ú__qualname__rZ   ZvarsionrÄ   r&   r&   r&   r'   rÁ     s   rÁ   c              C   s$  t  ¡ } | jddddd | jdt jdd | jddd	dd | jd
ddd | jddddd | jddt jdd | jddt jdd | jddt jdd | jddt jdd | jdt jdd | jdt jdd | jdt jdd | jdt jdd d}| jdd|d d}| jdd|d | S ) z9
    Build argument parser and parse input arguments
    z-iz	--installzinstall CageFS pluginÚ
store_true)ÚhelpÚactionz--install-plesk-wrapperz-dz--deletezdelete CageFS pluginz--uninstallz$do actions while uninstalling CageFSz-cz--cronupdatezcagefsctl --updatez-rz--httpdtriggerz-tz--suphptriggerz-pz--toggle-pluginz-nz--manage-multiphp-cron-filez--add-usr-local-easy-mountz--setup-ea-php-sessionsz--fix-shared-mountsz--force-fix-shared-mountszJadd /usr/share/cagefs-skeleton/dev/log to syslog config and restart syslogz--add-syslog-socket)rÊ   rÉ   zOremove /usr/share/cagefs-skeleton/dev/log from syslog config and restart syslogz--remove-syslog-socket)ÚargparseÚArgumentParserÚadd_argumentZSUPPRESS)ÚparserZ	help_textr&   r&   r'   Úbuild_parser&  sD    







rÏ   c              C   sH   t td dƒ} d}t d¡d }|  |jt|d¡ |  ¡  tdƒ d S )Nz"plib/modules/plesk-cagefs/meta.xmlrA   aB  <?xml version="1.0" encoding="utf-8"?>
<module>
<id>plesk-cagefs</id>
<name>CageFS</name>
<description>CageFS</description>
<url>http://cloudlinux.com/</url>
<version>{version}</version>
<release>{release}</release>
<vendor>Cloud Linux</vendor>
<icon>/images/modules/plesk-cagefs/addon_CloudLinux_logo.png</icon>
</module>Ú.r   )r*   Úreleasez4/usr/local/psa/bin/extension --register plesk-cagefs)	rB   r\   ÚCAGEFS_RELEASErš   r3   rj   ÚCAGEFS_VERSIONrC   r	   )ÚfdÚtextZrelease_numberr&   r&   r'   r]   R  s    r]   c               C   s   t jdkrt d¡ dS )zS
    This function is executed while uninstall (not upgrade) of cagefs package
    rX   z6/usr/local/directadmin/custombuild/build set cagefs noN)r)   rZ   r!   rµ   r&   r&   r&   r'   Úuninstall_cagefse  s    
rÖ   c             C   sæ   t ƒ }t| ƒdkr$| ¡  t d¡ | | ¡}|jr:tƒ  |jrHt	 ¡  |j
rTtƒ  |jr`tƒ  |jrltƒ  |jrxtƒ  |jr„tƒ  |jrtƒ  |jrœtƒ  |jr¨tƒ  |jr´tƒ  |jrÀtƒ  |jrÌtƒ  |jsØ|jrât|jƒ dS )z
    Script run function
    r   é   N)rÏ   ÚlenZ
print_helpr1   r5   Ú
parse_argsZinstallr¸   Zinstall_plesk_wrapperrƒ   Údeleter¹   Z	uninstallrÖ   Z
cronupdater½   Zhttpdtriggerr¾   Zsuphptriggerr¿   rÀ   r   r   Zmanage_multiphp_cron_filer/   r–   r˜   rQ   Zforce_fix_shared_mounts)ÚargvrÎ   Úargsr&   r&   r'   Úmainn  sB    

rÝ   Ú__main__r0   )F)ry   )F)rž   )rZ
__future__r   r   r   r   Zfuturer   Zinstall_aliasesÚbuiltinsrË   r°   r!   rŠ   rg   r`   r1   rs   ZcldetectlibZdetectZcopy_directoryr   r	   r
   Z	mysql_libr   Zsecureior   Zclcommon.utilsr   r   Zclcommon.cpapir   r   r   r   r   r;   r   ZLIBDIRr"   r„   r   rƒ   r   r   r   Zcagefsreconfigurer   r   r   r   r   r   r   r   r    rÓ   rÒ   r“   r[   r\   r^   ri   rk   rl   r«   r-   rE   r$   r%   r¯   r­   r¬   rG   r(   r/   r@   r+   rF   rH   rO   rQ   rm   rx   r}   r~   r†   r‘   r”   r–   r—   r˜   r   r    r¤   r¸   r¹   rº   r½   r¾   r¿   rÀ   ÚobjectrÁ   rÏ   r]   rÖ   rÝ   rÅ   ZgetCPZCP_NAMEZ
CP_VERSIONr)   rÛ   r&   r&   r&   r'   Ú<module>	   s²   



0N
	

# ZL
		,	)
