JFIF$        dd7 

Viewing File: /usr/share/cagefs/__pycache__/generic_hook_lib.cpython-311.opt-1.pyc

�

O�`�Udi�����ddlmZddlmZddlmZddlmZddlmZej��ddlTddl	Z	ddl
Z
ddlZddlZddl
mZdd	lmZmZmZmZmZmZdd
lmZddlmZmZmZmZddlmZej� d
��ddl!m"Z"m#Z#m$Z$m%Z%e��dkrdZ&ndZ&dZ'dZ(ej)d��Z*d�Z+d�Z,d�Z-d�Z.d�Z/d�Z0d�Z1de2fd�Z3d�Z4d#d�Z5d �Z6d!�Z7d$d"�Z8dS)%�)�print_function)�absolute_import)�division)�unicode_literals)�standard_library)�*N)�Feature)�	getCPName�
PLESK_NAME�is_admin�DIRECTADMIN_NAME�CPANEL_NAME�is_panel_feature_supported)�ClPwd)�get_file_lines�run_command�ExternalProgramFailed�is_user_present)�write_file_via_tempfilez/usr/share/cagefs)�get_min_uid�MIN_UID�get_user_prefix�is_user_enabled�DirectAdminz&/etc/cagefs/exclude/directadmin.adminsz /etc/cagefs/exclude/panel.adminsz/usr/sbin/cagefsctlz/usr/share/cagefs-skeleton/binzclcommon.public_hooksc�\�tj|tjtjdd�|��}|���\}}t�d|��|jdkrt�d||��n#t�d||j||��|jS)a
    This file is mostly a copy-paste from bash where
    return code of process was ignored. In order not to
    break servers, we decided to ignore exit codes in python too.

    This method runs subprocess and silently logs errors
    if exit code was not zero. No errors raised.
    T)�stderr�stdout�textzExecuting %srzstdout: `%s`
stderr:`%s`z>process %s dies with exit code %s and stdout: `%s`
stderr:`%s`)	�
subprocess�Popen�PIPE�communicate�logger�info�
returncode�debug�error)�args�kwargs�prrs     �d/builddir/build/BUILDROOT/cagefs-7.6.28-1.el9.cloudlinux.x86_64/usr/share/cagefs/generic_hook_lib.py�_call_with_loggingr,2s���	��	
�j�o���T�	5�	5�-3�	5�	5�A��]�]�_�_�N�F�F�
�K�K���%�%�%��|�q������0�&�&�A�A�A�A������q�|�V�V�	=�	=�	=�
�<��c��	t���|��}n(#tj$rtd|z��YdSwxYwt	��|t
krtd||t
fz��dSdS)z}
    Checks if user can be places inside cage by his uid.
    :param username: unix user name
    :return: True or False
    zERROR: No such user %sFz2SKIP: User %s uid is %d - too small. min_uid is %dT)r�get_uid�NoSuchUserException�printrr)�username�uids  r+� _is_user_uid_suitable_for_cagefsr4Js�����g�g�o�o�h�'�'�����$����
�&��1�2�2�2��u�u������M�M�M�
�W�}�}�
�B�h�PS�U\�E]�]�^�^�^��u��4s�!$�!A	�A	c��tj�t��s
dtzSt	t��}|dz}||vr@|�|��t
d�|��tdd���dS)zV
    Remove admin name from cagefs exclude file
    :param admin_name: admin name
    z'WARNING: exclude list %s does not exist�
���tmp��suffix�OK)�os�path�exists�_CAGEFS_EXCLUDE_FILEr�remover�join)�
admin_name�f_lines�line_for_writes   r+�post_delete_admin_handlerrF\s���
�7�>�>�.�/�/�P�8�;O�O�O��1�2�2�G��$�&�N��� � ����~�&�&�&������ 0� 0�2F��W\�]�]�]�]��4r-c�D�tt��}|dz}||vr@|�|��td�|��tdd���	ttd|g��n)#t$r}dt|��zcYd}~Sd}~wwxYwd	S)
z]
    Triggered after creating new UNIX user for admin.
    :param admin_name: admin name
    r6r7r8r9r:z	--disablezcagefsctl utility failed: %sNr<)	rr@�appendrrBr�_CAGEFS_BINARYr�str)rCrDrE�es    r+�post_create_admin_handlerrLls����1�2�2�G��$�&�N��W�$�$����~�&�&�&������ 0� 0�2F��W\�]�]�]�]�7��^�[�*�=�>�>�>�>�� �7�7�7�-��A���6�6�6�6�6�6�6�����7�����4s�A7�7
B�B�B�Bc�x�t��tko#tj�dd��dkS)a
    cPanel calls post_create_user_handler during restore process
    (transferring or restoring from backup)
    But we should not do some actions in that case.

    Detect restoration process by control panel name and
    env variable that we set in cllib.
    :return: boolean
    �CPANEL_RESTORE�0�1)r
rr=�environ�get�r-r+�_is_cpanel_restore_processrT�s/���;�;�+�%�V�"�*�.�.�9I�3�*O�*O�SV�*V�Vr-c���t|��rd|zSt|��sdSttdd|g��t	��slttj��sttd|g��tj	�
t��rttdd|g��t��tkrttdd|g��dS)	ay
    Triggered after creating new user.
    :param username: account name

    It is important to have in mind that current handler
    is called twice during account restoring process on cPanel:
    first time - after account creation ("post_create_user" hook with envvar CPANEL_RESTORE = 1),
    second time - after the actual restore process ("post_restore_user" hook).
    zSKIP: User %s is admin�SKIP�--wait-lockz--set-default-user-statusz--create-namespace�--cpetc�--remount-virtmpr<)rr4r,rIrTrr	�LVEr=r>�isdir�_CAGEFS_SKELETON_BINr
r�r2s r+�post_create_user_handlerr^�s�������3�'�(�2�2�
,�H�5�5���v���
�7R�T\�]�^�^�^�%�'�'�U�*�'�+�6�6�	Q���0D�h�O�P�P�P��7�=�=�-�.�.�	U���
�y�(�S�T�T�T��{�{�j� � ��N�M�;M�x�X�Y�Y�Y��4r-c��t��tkr tdt��z��dStj�t��rttdd|g��ttdd|g��dS)z�
    Triggered after creating additional domains in control panel.
    :param username: owner of the domain
    :param domain: name of the domain
    zgWARNING: post create domain cagefs hook is not implemented for %s control panel and used only for PleskNrWrXrYr<)	r
rr1r=r>r[r\r,rI�r2�domains  r+�post_create_domain_handlerrb�s����{�{�j� � �
�I�KT�;�;�W�	X�	X�	X���

�w�}�}�)�*�*�Q��N�M�9�h�O�P�P�P���
�7I�8�T�U�U�U��4r-r2c��tj�t��sdSt	|��}d�||���}tj�|d��}tj�|d��}tdd|g��tdd|g��t|��rttdd	|g��d
S)z{
    Post restore action for directadmin. Cleans
    and rebuilds cl.selector files.
    :param username: account name
    zSKIP: no working cagefsz/var/cagefs/{prefix}/{username})�prefixr2zetc/cl.selectorzetc/cl.php.d�rmz-rfrWrXr<)
r=r>r[r\r�formatrBr,rrI)r2�user_prefix�cagefs_user_dir�cl_selector_path�
cl_php_d_paths     r+�_post_restore_user_directadminrk�s����7�=�=�-�.�.�)�(�(�!�(�+�+�K�7�>�>��X�?�/�/�O��w�|�|�O�5F�G�G���G�L�L��.�A�A�M���e�%5�6�7�7�7���e�]�3�4�4�4��x� � �Q��N�M�9�h�O�P�P�P��4r-c��t��tkrt|��St��tkrt	|��SdS)zK
    Triggered after restoring user.
    :param username: account name
    N)r
r
rkrr^r]s r+�post_restore_user_handlerrm�sI���{�{�&�&�&�-�h�7�7�7�
���
�	"�	"�'��1�1�1�
#�	"r-c�N�t|p|��sdS|�&t��tkrt|��S|�4t	t
dd|p|g��t	t
dd|p|g��|�1t��tkrt	t
dd|p|g��dS)z8
    Triggered after any modifications made to user
    rVNrW�--update-etcz	--remountr<)r4r
rr^r,rI)r2�new_name�	new_owners   r+�post_modify_user_handlerrr�s���,�H�,@��A�A���v���	���z� 9� 9�(��1�1�1�	�	��N�M�>�8�K_�W_�`�a�a�a��N�M�;��H\�T\�]�^�^�^���I�K�K�:�5�5��N�M�>�8�K_�W_�`�a�a�a��4r-c��t|��sdSttd|g��t|��st�d|��dSdS)zf
    Triggered before control panel actually removes account.
    :param username: unix user name
    Nz	--unmountz*User %s does no longer exist after unmount)r4r,rIrr#r'r]s r+�pre_delete_user_handlerrtsh��
,�H�5�5�������X�>�?�?�?��8�$�$�M����A�8�L�L�L�L�L�M�Mr-c���t��tkr tdt��z��dSt|��sdSt	t
dd|g��dS)a
    Triggered after deleting domain owned by system account.
    Not it is used only for plesk because of virt.mp file used
    to add domain-related data into cagefs and we should remount
    user on any change.
    :param username: account name
    :param domain: domain name
    z`WARNING: post delete domain hook is not implemented for %s control panel and used only for PleskNrWrY�r
rr1r4r,rIr`s  r+�post_delete_domain_handlerrw*ss���{�{�j� � �
�I�KT�;�;�W�	X�	X�	X���+�H�5�5������
�7I�8�T�U�U�U�U�Ur-c�0�t��tkr tdt��z��dSt|��sdSt	t
dd|g��||krt	t
dd|g��dStd|�d|����dS)aJ
    Triggered after deleting domain owned by system account.
    Not it is used only for plesk because of virt.mp file used
    to add domain-related data into cagefs and we should remount
    user on any change.
    :param username: account name
    :param old_domain: old domain name
    :param new_domain: new domain name
    zgWARNING: post modify domain cagefs hook is not implemented for %s control panel and used only for PleskNrWrorYz*INFO: Omitting remount because old_domain=z equals to new_domain=rv)r2�
old_domain�
new_domains   r+�post_modify_domain_handlerr{=s����{�{�j� � �
�I�KT�;�;�W�	X�	X�	X���+�H�5�5����
��
�~�x�P�Q�Q�Q��Z����N�M�;M�x�X�Y�Y�Y�Y�Y�
���J�J�
�
�,�	-�	-�	-�	-�	-r-)NN)N)9�
__future__rrrr�futurer�install_aliases�builtinsr=r�sys�logging�clcommon.constr	�clcommon.cpapir
rrr
rr�clcommon.clpwdr�clcommon.utilsrrrr�secureiorr>rH�	cagefsctlrrrrr@rIr\�	getLoggerr#r,r4rFrLrTr^rbrJrkrmrrrtrwr{rSr-r+�<module>r�s���&�%�%�%�%�%�&�&�&�&�&�&�������'�'�'�'�'�'�#�#�#�#�#�#� �� �"�"�"�����	�	�	�	�����
�
�
�
�����"�"�"�"�"�"����������������� � � � � � �������������-�,�,�,�,�,�����#�$�$�$�L�L�L�L�L�L�L�L�L�L�L�L�
�9�;�;�-���C���=��&��7��	��	�2�	3�	3�����0���$
�
�
� ���*
W�
W�
W�)�)�)�X���6�S�����,
2�
2�
2� ����>
M�
M�
M� V�V�V�&-�-�-�-�-�-r-
Back to Directory  nL+D550H?Mx ,D"v]qv;6*Zqn)ZP0!1 A "#a$2Qr D8 a Ri[f\mIykIw0cuFcRı?lO7к_f˓[C$殷WF<_W ԣsKcëIzyQy/_LKℂ;C",pFA:/]=H  ~,ls/9ć:[=/#f;)x{ٛEQ )~ =𘙲r*2~ a _V=' kumFD}KYYC)({ *g&f`툪ry`=^cJ.I](*`wq1dđ#̩͑0;H]u搂@:~וKL Nsh}OIR*8:2 !lDJVo(3=M(zȰ+i*NAr6KnSl)!JJӁ* %݉?|D}d5:eP0R;{$X'xF@.ÊB {,WJuQɲRI;9QE琯62fT.DUJ;*cP A\ILNj!J۱+O\͔]ޒS߼Jȧc%ANolՎprULZԛerE2=XDXgVQeӓk yP7U*omQIs,K`)6\G3t?pgjrmۛجwluGtfh9uyP0D;Uڽ"OXlif$)&|ML0Zrm1[HXPlPR0'G=i2N+0e2]]9VTPO׮7h(F*癈'=QVZDF,d߬~TX G[`le69CR(!S2!P <0x<!1AQ "Raq02Br#SCTb ?Ζ"]mH5WR7k.ۛ!}Q~+yԏz|@T20S~Kek *zFf^2X*(@8r?CIuI|֓>^ExLgNUY+{.RѪ τV׸YTD I62'8Y27'\TP.6d&˦@Vqi|8-OΕ]ʔ U=TL8=;6c| !qfF3aů&~$l}'NWUs$Uk^SV:U# 6w++s&r+nڐ{@29 gL u"TÙM=6(^"7r}=6YݾlCuhquympǦ GjhsǜNlɻ}o7#S6aw4!OSrD57%|?x>L |/nD6?/8w#[)L7+6〼T ATg!%5MmZ/c-{1_Je"|^$'O&ޱմTrb$w)R$& N1EtdU3Uȉ1pM"N*(DNyd96.(jQ)X 5cQɎMyW?Q*!R>6=7)Xj5`J]e8%t!+'!1Q5 !1 AQaqё#2"0BRb?Gt^## .llQT $v,,m㵜5ubV =sY+@d{N! dnO<.-B;_wJt6;QJd.Qc%p{ 1,sNDdFHI0ГoXшe黅XۢF:)[FGXƹ/w_cMeD,ʡcc.WDtA$j@:) -# u c1<@ۗ9F)KJ-hpP]_x[qBlbpʖw q"LFGdƶ*s+ډ_Zc"?%t[IP 6J]#=ɺVvvCGsGh1 >)6|ey?Lӣm,4GWUi`]uJVoVDG< SB6ϏQ@ TiUlyOU0kfV~~}SZ@*WUUi##; s/[=!7}"WN]'(L! ~y5g9T̅JkbM' +s:S +B)v@Mj e Cf jE 0Y\QnzG1д~Wo{T9?`Rmyhsy3!HAD]mc1~2LSu7xT;j$`}4->L#vzŏILS ֭T{rjGKC;bpU=-`BsK.SFw4Mq]ZdHS0)tLg