B
    u&`                  @   s0  d Z 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mZ dd
lmZmZmZ ddlmZ dZdZdZdZdZdZdZdZed e d e ZdZddiddiddiddidZdd Zd2d 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'dS )3zr
Now this package only cleans up old files and does not install new.
All new hooks must be installed using cllib.
    )absolute_import)division)print_function)unicode_literals)standard_library)*N)print_error)	getCPName
PLESK_NAMEDIRECTADMIN_NAME)"remove_hook_by_str_id_and_locationz#USERDEL_CMD /usr/bin/userdel.cagefsz/usr/share/cagefs-plugins/hookszuser_create_post.shzuser_restore_post.shzuser_destroy_post.shz?/usr/share/cagefs-plugins/hooks/directadmin/user_create_post.shz@/usr/share/cagefs-plugins/hooks/directadmin/user_restore_post.shz@/usr/share/cagefs-plugins/hooks/directadmin/user_destroy_post.shz/directadmin//z%/usr/share/cagefs-plugins/hooks/pleskZSCRIPT_FILEzcagefs_plesk_hs_created.shzcagefs_plesk_hs_updated.shzcagefs_plesk_hs_deleted.shzcagefs_plesk_dm_updated.sh)Zphys_hosting_createZphys_hosting_updateZphys_hosting_deleteZdomain_updatec             C   s   t | d}| }|  |S )Nr)open	readlinesclose)	file_namefcontent r    /usr/share/cagefs/cagefshooks.pyget_file_content3   s    
r   wc             C   s*   d |}t| |}|| |  d S )N )joinr   writer   )r   r   Zopen_methodr   r   r   r   write_file_content;   s    


r   c           
   C   sH  y
t dd} |  }|   d}d}d}xP|D ]H}|drT|| }td ||< P |drp|ddkrp|}|d	7 }q0W |ts
|dkrt|dkr|| }td ||< t|dkrtd| |ds|tdkrtd
|dd	  ntddt d d W n6 t
tfk
rB } ztdt| W d d }~X Y nX d S )Nz/etc/login.defsr   r   r   ZUSERDEL_CMD
#   z/etc/cagefs/userdel.oldaz#Failed to install USERDEL_CMD hook:)r   r   r   
startswithUSERDEL_COMMANDfindlenr   replacestripOSErrorIOErrorr   str)r   r   iuserdel_cmd_oldZ
na_userdellineer   r   r   user_del_hook_installC   s4    



r/   c           
   C   s   y&t dd} |  }|   d| }W n tk
r>   d}Y nX ytd W n tk
rb   Y nX y^t dd} |  }|   d}x0|D ](}|t	dkr|d ||< P |d	7 }qW t
d| W n4 ttfk
r } ztd
t| W d d }~X Y nX d S )Nz/etc/cagefs/userdel.oldr   zUSERDEL_CMD r   z/etc/login.defsr   r   r   r    z&Failed to remove hook for DirectAdmin:)r   readr   r)   osremover(   r   r$   r#   r   r   r*   )r   r,   r   r+   r-   r.   r   r   r   user_del_hook_removeg   s0    



r3   c           
   C   s   ddl m}  | tt | tt | tt ytj	
ts<d S tt}d}d}g }xN|D ]F}|ddkrld}|s~|||  |ddkr|rd}|d7 }qVW tt| W n4 ttfk
r } ztd	t| W d d }~X Y nX d S )
Nr   )remove_da_hookFz9/usr/sbin/cagefsctl --set-default-user-status "$username"r   TZfir    z*Failed to remove old hook for DirectAdmin:)Z(clcommon.public_hooks.bundle.directadminr4   DA_CREATE_USER_HOOK_FILENAMEDA_CREATE_USER_HOOK_CMDDA_REMOVE_USER_HOOK_FILENAMEDA_REMOVE_USER_HOOK_CMDDA_RESTORE_USER_HOOK_FILENAMEDA_RESTORE_USER_HOOK_CMDr1   pathisfileDA_HOOK_DESTr   r$   appendr   r(   r)   r   r*   )r4   r   r+   Zstart_deleteZnew_contentr-   r.   r   r   r   da_hooks_remove   s,    



r?   c              C   s   xt D ]} t| td qW dS )z;
    Remove all Plesk hooks installed by this package.
    )Zbin_dirN)_OLD_CAGEFS_PLESK_HOOKSr   _OLD_CAGEFS_PLESK_HOOKS_DIR)hookr   r   r   plesk_hooks_remove   s    
rC   c          
   C   sB  y t j| sd S d}|ddddtt|gd }t| d}| }|  d}xVt	t
|D ]D}||  }|d	sf| }	t
|	}
|
d
krf|	d dkrf|
d
kr|d tt| }|d ||< n|
dk r|d tt| }|d ||< n|
dkryt|	d }W n$ tk
r:   |||< d}P Y nX |t|kr||	d |	d |	d |	d
 tt|g}|
dkr|| ||	dd   }|d ||< d}P qfW |rt| d}x|D ]}|| qW |  nt| d}|| |  W n: ttfk
r< } ztd|  t| W d d }~X Y nX d S )Nz      ZsessionZrequiredz
pam_lve.so500r   r   Fr         z      500        z        Tr   r       r   r!   z!configure_pam_lve error for file )r1   r;   r<   r   r*   intr   r   r   ranger%   r'   r"   split
ValueErrorr   r)   r(   r   )Z
configfileenableZSPACEZDEFAULTr   linesfoundr+   r-   slvr.   r   r   r   configure_pam_lve   sZ     



,





rT   c             C   s,   t d|  t d|  t d|  t d|  d S )Nz/etc/pam.d/sshdz/etc/pam.d/suz/etc/pam.d/crondz/etc/pam.d/atd)rT   )rN   r   r   r   configure_pam_lve_for_cagefs   s    


rU   c              C   s4   t   td t } | tkr"t  | tkr0t  d S )NT)r/   rU   r	   r   r?   r
   rC   )Zcp_namer   r   r   HooksInstall   s    rV   c               C   s   t   td d S )NF)r3   rU   r   r   r   r   HooksRemove   s    rW   )r   )(__doc__Z
__future__r   r   r   r   Zfuturer   Zinstall_aliasesbuiltinsr1   Zsecureior   Zclcommon.cpapir	   r
   r   Z"clcommon.public_hooks.bundle.pleskr   r#   ZSOURCE_HOOKS_DIRr5   r9   r7   r6   r:   r8   r=   rA   r@   r   r   r/   r3   r?   rC   rT   rU   rV   rW   r   r   r   r   <module>
   sF   
$ 1