HEX
Server: LiteSpeed
System: Linux server3ir.xdlhost.com 4.18.0-553.30.1.lve.el8.x86_64 #1 SMP Tue Dec 3 01:21:19 UTC 2024 x86_64
User: gmparts (1037)
PHP: 8.1.34
Disabled: NONE
Upload Files
File: //opt/cloudlinux/venv/lib64/python3.11/site-packages/__pycache__/clsudo.cpython-311.opt-1.pyc
�

��TjZ���ddlZddlZddlZddlZddlZddlZddlZddlmZm	Z	ej
e��ZGd�de
��ZGd�de
��ZGd�de
��ZGd	�d
e
��ZdZgd�Zd
gZgd�Zejd��Zejd��Zejd��Zgd�ZdZdZdZGd�d��ZdS)�N)�S_IRUSR�S_IRGRPc��eZdZd�ZdS)�
NoSuchUserc�D�t�|d|�d���dS)NzNo such user (�)��	Exception�__init__)�self�users  ��/builddir/build/BUILDROOT/alt-python27-cllib-3.4.41-1.el8.cloudlinux.x86_64/opt/cloudlinux/venv/lib/python3.11/site-packages/clsudo.pyrzNoSuchUser.__init__s*�����4�!9�$�!9�!9�!9�:�:�:�:�:�N��__name__�
__module__�__qualname__r�rrrrs#������;�;�;�;�;rrc��eZdZd�ZdS)�NoSuchGroupc�D�t�|d|�d���dS)NzNo such group (rr	)r�groups  rrzNoSuchGroup.__init__s*�����4�!;�5�!;�!;�!;�<�<�<�<�<rNrrrrrr�#������=�=�=�=�=rrc��eZdZd�ZdS)�UnableToReadFilec�<�t�|d��dS)NzCannot read sudoers filer	�rs rrzUnableToReadFile.__init__s�����4�!;�<�<�<�<�<rNrrrrrrrrrc��eZdZd�ZdS)�UnableToWriteFilec�<�t�|d��dS)NzCannot modify sudoers filer	rs rrzUnableToWriteFile.__init__$s�����4�!=�>�>�>�>�>rNrrrrrr#s#������?�?�?�?�?rrz/etc/sudoers)�
/bin/ps ""�/bin/grep ""�/sbin/service ""z%/usr/bin/getcontrolpaneluserspackagesz/usr/sbin/lvectl lve-versionz>/usr/local/directadmin/plugins/new_lvemanager/admin/GetDomainsz0/usr/share/l.v.e-manager/utils/cloudlinux-cli.pyz5/usr/share/l.v.e-manager/utils/cloudlinux-cli-user.py)z/usr/sbin/cagefsctl ""r!r"r#z ^\s*Cmnd_Alias\s+CAGEFS_CMDS\s*=z"^\s*Cmnd_Alias\s+SELECTOR_CMDS\s*=z ^\s*Cmnd_Alias\s+LVECTL_CMDS\s*=)z/usr/bin/cl-selector ""z/usr/bin/piniset ""z/usr/sbin/lveps ""z/usr/bin/selectorctl ""zDefaults:%s !requirettyz-%%%s ALL=NOPASSWD: LVECTL_CMDS, SELECTOR_CMDSzDefaults:%%%s !requirettyc��eZdZdZefZdZgZdZdZ	dZ
dZdZdZ
dZdZdZdZeefd���Zeefd���Zeefd���Zeefd���Zeefd���Zeefd	���Zed
���Zed���Zed���Zed
���Zed���Zed���Zed���Zed���Z dS)�Clsudoz/
    Adds CloudLinux users to sudoers file
    NFc��t�d||tj��tj����t
�|��t
�|��t
�|��t
j	s:t
j
�dd�t��z��t
js:t
j
�dd�t��z��t
js:t
j
�dd�t"��z��t
js"t
j
�|�d���t
js"t
j
�|�d���t
js"t
j
�|�d���t
js(t
j
�t,|fz��t
���t�d	||��d
S)z@
        Adds username to sudoers file (for lvemanager)
        z@add_user: adding user '%s' to sudoers file '%s' (uid=%d, pid=%d)�Cmnd_Alias LVECTL_CMDS = �, zCmnd_Alias LVECTL_USER_CMDS = �Cmnd_Alias SELECTOR_CMDS = � ALL=NOPASSWD: LVECTL_CMDS�% ALL=(ALL) NOPASSWD: LVECTL_USER_CMDS� ALL=NOPASSWD: SELECTOR_CMDSz.add_user: successfully added user '%s' to '%s'N)�logger�info�os�getuid�getpidr%�update_commands_list�_check_user�
_get_contents�	has_alias�sudoers_list�append�join�ALIAS_LVECTL_CMDS�has_user_alias�ALIAS_LVECTL_USER_CMDS�has_selector_alias�ALIAS_SELECTOR_CMDS�
has_rights�has_user_rights�has_selector_rights�
has_action�DEFAULTS_REQUIRETTY�_write_contents�r
�sudoers_files  r�add_userzClsudo.add_userfs���
	���(�)-�|��Y�[�[�"�)�+�+�	/�	/�	/�	�#�#�L�1�1�1����4� � � ����T�"�"�"���	c���&�&�'B�T�Y�Y�O`�Ea�Ea�'a�b�b�b��$�	m���&�&�'G�$�)�)�Tj�Jk�Jk�'k�l�l�l��(�	g���&�&�'D�t�y�y�Qd�Ge�Ge�'e�f�f�f�� �	L���&�&�$�'J�'J�'J�K�K�K��%�	W���&�&�$�'U�'U�'U�V�V�V��)�	N���&�&�$�'L�'L�'L�M�M�M�� �	F���&�&�':�d�W�'D�E�E�E���� � � ����D��<�	)�	)�	)�	)�	)rc��t�d||tj��tj����|t
_t
�|��t
�|��t
j	s:t
j
�dd�t��z��t
js"t
j
�|�d���t
js(t
j
�t |fz��t
���t�d||��dS)z<
        Adds username to sudoers file (for cagefs)
        zGadd_cagefs_user: adding user '%s' to sudoers file '%s' (uid=%d, pid=%d)zCmnd_Alias CAGEFS_CMDS = r(� ALL=NOPASSWD: CAGEFS_CMDSz5add_cagefs_user: successfully added user '%s' to '%s'N)r-r.r/r0r1r%�filepathr3r4�has_cagefs_aliasr6r7r8�ALIAS_CAGEFS_CMDS�has_cagefs_rightsrArBrCrDs  r�add_cagefs_userzClsudo.add_cagefs_user�s-��
	���(�)-�|��Y�[�[�"�)�+�+�	/�	/�	/�'������4� � � ����T�"�"�"��&�	c���&�&�'B�T�Y�Y�O`�Ea�Ea�'a�b�b�b��'�	L���&�&�$�'J�'J�'J�K�K�K�� �	F���&�&�':�d�W�'D�E�E�E���� � � ����K��<�	)�	)�	)�	)�	)rc�t�t�d||tj��tj����t
�|��t
�|��t
�|��t
j	s:t
j
�dd�t��z��t
js:t
j
�dd�t��z��t
js(t
j
�t"|fz��t
js(t
j
�t&|fz��t
���t�d||��dS)zJ
        Adds group to sudoers file, grants access to LVE Manager
        zMadd_lvemanager_group: adding group '%s' to sudoers file '%s' (uid=%d, pid=%d)r'r(r)z;add_lvemanager_group: successfully added group '%s' to '%s'N)r-r.r/r0r1r%r2�_check_group�_get_contents_groupr5r6r7r8r9r<r=rA�GROUP_LVECTL_SELECTOR�has_group_action�GROUP_DEFAULTS_REQUIRETTYrC)�
group_namerEs  r�add_lvemanager_groupzClsudo.add_lvemanager_group�so��
	���(�)3�\��Y�[�[�"�)�+�+�	/�	/�	/�	�#�#�L�1�1�1����J�'�'�'��"�"�:�.�.�.���	c���&�&�'B�T�Y�Y�O`�Ea�Ea�'a�b�b�b��(�	g���&�&�'D�t�y�y�Qd�Ge�Ge�'e�f�f�f�� �	N���&�&�'<�
�}�'L�M�M�M��&�	R���&�&�'@�J�=�'P�Q�Q�Q���� � � ����Q���	/�	/�	/�	/�	/rc�"�t�d||tj��tj����|t
_	tt
jd���5}|����	��t
_
ddd��n#1swxYwYd}d}|tt
j
��kr�t
j
|}|�|�d���s6|�|�d���s|�t|fz��r>t�d	||��t
j
�|��d
}��|dz
}|tt
j
��k��|r7t
���t�d||��dSt�d
||��dS#t t"f$r}t%��|�d}~wwxYw)z5
         Removes username from sudoers file
        zGremove_user: removing user '%s' from sudoers file '%s' (uid=%d, pid=%d)�utf-8��encodingNrFz ALL=NOPASSWD:z ALL=(ALL) NOPASSWD:z4remove_user: removing sudoers rule for user '%s': %sT�z5remove_user: successfully removed user '%s' from '%s'z1remove_user: no rules found for user '%s' in '%s')r-r.r/r0r1r%rI�open�read�
splitlinesr6�len�
startswithrB�removerC�IOError�OSErrorr)r
rE�f�idx�removed�line�es       r�remove_userzClsudo.remove_user�sK��
	���(�)-�|��Y�[�[�"�)�+�+�	/�	/�	/�'���	,��f�o��8�8�8�
<�A�&'�f�f�h�h�&9�&9�&;�&;��#�
<�
<�
<�
<�
<�
<�
<�
<�
<�
<�
<����
<�
<�
<�
<��C��G���F�/�0�0�0�0��*�3�/���O�O�t�$;�$;�$;�<�<���?�?�d�+H�+H�+H�I�I���?�?�+>�$��+H�I�I���K�K� V� $�d�,�,�,��'�.�.�t�4�4�4�"�G���q���!��F�/�0�0�0�0�"�
1��&�&�(�(�(����S�!�<�1�1�1�1�1����O�!�<�1�1�1�1�1����!�	,�	,�	,�"�$�$�!�+�����	,���sC�G)�)1B&�G)�&B*�*G)�-B*�.DG)�G)�)H�:H	�	Hc�"�t�d||tj��tj����t
�|��t
�|��t
�|��dS)z�
        updates username in sudoers file
        :param user: username for caching
        :param sudoers_file: path to /etc/sudoers (only for tests)
        :return: None
        zEupdate_user: updating user '%s' in sudoers file '%s' (uid=%d, pid=%d)N)	r-r.r/r0r1r%r2r3r4rDs  r�update_userzClsudo.update_user�s{��	���(�)-�|��Y�[�[�"�)�+�+�	/�	/�	/�	�#�#�L�1�1�1�	���4� � � ����T�"�"�"�"�"rc��|t_tj�tj��t_t���tdtftdtff}d}ttj��D]k\}}|D]c\}}}|�
|��rHtj|}t�|||��tj||krd}n�d�l|rZt�d|tj��tj����t���dSdS)z�
        Update command lists for lvemanager plugin
        If any required command absent in file, add it
        :param sudoers_file: path to /etc/sudoers
        :return: None
        �LVECTL_CMDS�
SELECTOR_CMDSFTzGupdate_commands_list: updating command aliases in '%s' (uid=%d, pid=%d)N)r%rIr/�path�dirname�temp_dir�
_read_sudoers�LVECTL_ALIAS_REr9�SELECTOR_ALIAS_REr=�	enumerater6�match�_rewrite_aliasr-r.r0r1rC)	rE�alias_specs�is_sudoer_changerd�command_string�alias_re�
alias_name�
alias_list�befores	         rr2zClsudo.update_commands_list�sI��'����'�/�/�&�/�:�:���������(��8I�J�)�?�<O�P�R�� ��#,�V�-@�#A�#A�	�	��C��4?�
�
�0��*�j��>�>�.�1�1��#�0��5�F��)�)�#�z�:�F�F�F��*�3�/�6�9�9�+/�(��E����	%��K�K�,�-9�����b�i�k�k�
3�
3�
3�
�"�"�$�$�$�$�$�		%�	%rc�t�	tj|��dS#t$r}t|��|�d}~wwxYw)zZ
        Checks passwd database for username presence
        @param user: string
        N)�pwd�getpwnam�KeyErrorr)r
rgs  rr3zClsudo._check_usersL��	*��L���������	*�	*�	*��T�"�"��)�����	*������
7�2�7c�t�	tj|��dS#t$r}t|��|�d}~wwxYw)z_
        Checks grp database for group_name presence
        @param group_name: string
        N)�grp�getgrnamr�r)rTrgs  rrOzClsudo._check_groupsL��	1��L��$�$�$�$�$���	1�	1�	1��j�)�)�q�0�����	1���r�c���ttjd���5}|������t_ddd��dS#1swxYwYdS)NrWrX)r[r%rIr\r]r6)rcs rrqzClsudo._read_sudoers(s���
�&�/�G�
4�
4�
4�	8��"#�&�&�(�(�"5�"5�"7�"7�F��	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8����	8�	8�	8�	8�	8�	8s�1A�A�!Ac�b�tj}|}||�d��r8|dzt|��krdS|dz
}||�d���8d|�d�d�|��z}||kr ||���|krdS|g|||dz�<dS)a�Rewrite the existing `alias_name` Cmnd_Alias definition at
        sudoers_list[idx] to the single canonical argv-restricted line, in place.

        Shared by the CAGEFS_CMDS and SELECTOR_CMDS upgrade rewrites - both are
        lax bare-command aliases whose pre-fix on-disk form must be tightened to
        the argv-restricted `alias_cmds` join without duplicating or corrupting
        the definition.

        The definition may span several physical lines via visudo-legal
        backslash line-continuation (_read_sudoers splits on physical lines, so
        each continuation line is its own list element). Consume the whole span
        - the matched line plus every following line the preceding line
        continued onto - and replace it with one restricted line.

        Never-corrupt invariant: if the definition cannot be confidently and
        safely collapsed (a continuation whose trailing backslash runs off the
        end of the file - i.e. the file is already malformed), leave it exactly
        as-is. The worst case of the upgrade rewrite is a safe no-op (the file
        stays as valid as it was), never a corrupted sudoers file. The caller
        still sets the has_*_alias flag, so no duplicate definition is appended.
        �\rZNzCmnd_Alias z = r()r%r6�endswithr^r8�strip)rdr{�
alias_cmds�lines�end�
restricteds      rrvzClsudo._rewrite_alias-s���.�#����
�C�j�!�!�$�'�'�	��Q�w�#�e�*�*�$�$����1�H�C��C�j�!�!�$�'�'�	�3�:�2�2�2�T�Y�Y�z�5J�5J�J�
��#�:�:�%��*�*�*�,�,�
�:�:��F�)�\��c�#��'�k���rc�D�dt_dt_dt_dt_dt_dt_dt_dt_dt_	dt_
tjd|�d���}	t�
��ttj��D�]2\}}d|vr
dt_�d|vr
dt_�(t �|��r.t�|dt&��dt_	�p|�d�|vr
dt_��|�d	�|vr
dt_��|�d
�|vr
dt_
��d|vr$|�|��}|rdt_��t*�|��r/t�|dt,��dt_��|�d
�|vrdt_��2��4dS#t.t0f$r}t3��|�d}~wwxYw)zM
        Reads file into list of strings
        @param user: string
        FzDefaults:\s*z\s*!requiretty�Cmnd_Alias LVECTL_CMDSTzCmnd_Alias LVECTL_USER_CMDS�CAGEFS_CMDSr*r+rH�
requirettyrmr,N)r%rArRr5r:r>r?r<r@rJrL�re�compilerqrtr6�CAGEFS_ALIAS_RErurvrK�searchrsr=rarbr)r
�require_tty_patternrdry�
pattern_matchrgs      rr4zClsudo._get_contentsVs=��"���"'��� ��� %���!���!&���$)��!�%*��"�"'���#(�� � �j�)M��)M�)M�)M�N�N��-	,�� � �"�"�"�'0��1D�'E�'E�(
�(
�#��^�+�~�=�=�'+�F�$��0�N�B�B�,0�F�)��"�(�(��8�8���)�)�#�}�>O�P�P�P�.2�F�+���6�6�6�.�H�H�(,�F�%���A�A�A�^�S�S�-1�F�*���6�6�6�.�H�H�/3�F�,���>�1�1�$7�$>�$>�~�$N�$N�M�$�1�,0��)��$�*�*�>�:�:��
�)�)�#��@S�T�T�T�04�F�-���8�8�8�N�J�J�15�F�.��K�M(
�(
��R��!�	,�	,�	,�"�$�$�!�+�����	,���s�E&G:�:H�H�Hc���dt_dt_dt_dt_dt_dt_dt_dt_d|��}d|��}tj
|�d���}	t���ttj
��D�]\}}t�|��r.t�|dt"��dt_�Nd|vr
dt_�_t$�|��r.t�|dt&��dt_��|�|��r#|�|��}|rdt_|�|��rdt_��d	S#t,t.f$r}t1��|�d	}~wwxYw)
zS
        Reads file into list of strings
        @param group_name: string
        F�%z
Defaults:%z/\s*ALL=NOPASSWD:\s*LVECTL_CMDS,\s*SELECTOR_CMDSrmTr�r�N)r%rArRr5r>r<r@rJrLr�r�rqrtr6rsrurvr=r�rKr_r�rarbr)rT�group_prefix�group_action�
group_patternrdryr�rgs        rrPzClsudo._get_contents_group�s���"���"'��� ���!���$)��!�%*��"�"'���#(�� �'�:�'�'��0�J�0�0���
�z�#b�#b�#b�c�c�
�	,�� � �"�"�"�'0��1D�'E�'E�
3�
3�#��^�$�*�*�>�:�:���)�)�#��@S�T�T�T�04�F�-��+�~�=�=�'+�F�$��"�(�(��8�8���)�)�#�}�>O�P�P�P�.2�F�+��!�,�,�\�:�:�1�$1�$8�$8��$H�$H�M�$�1�,0��)�!�,�,�\�:�:�3�.2�F�+��+
3�
3��,��!�	,�	,�	,�"�$�$�!�+�����	,���s�D4F9�9G�
G�Gc��d�tjD��}tj�tj��|vrWt�dtjtj��tj	����t���	tj�tj��}d}tj
||���\}}tj|d��}|�d�tj��dz��|���t&t(z}tj||��t�|��st.�n�#t.t0f$r�}t�dtjtj��tj	����	tj�|��rtj|��n#t6$rYnwxYwt��|�d}~wwxYw	tj|tj��dS#t0$r]}t�d	tjtj��tj	����t��|�d}~wwxYw)
zX
        Writes data to temporary file then checks it and rewrites sudoers file
        c�L�h|]!}tj�|����"Sr)r/rn�realpath)�.0�ps  r�	<setcomp>z)Clsudo._write_contents.<locals>.<setcomp>�s(��N�N�N�1�2�7�#�#�A�&�&�N�N�NrzZ_write_contents: refusing to write sudoers to disallowed destination '%s' (uid=%d, pid=%d)�lve_sudoers_)�prefix�dir�w�
zC_write_contents: failed to write sudoers file '%s' (uid=%d, pid=%d)NzD_write_contents: failed to rename temp file to '%s' (uid=%d, pid=%d))r%�_ALLOWED_SUDOERS_PATHSr/rnr�rIr-�warningr0r1rro�tempfile�mkstemp�fdopen�writer8r6�closerr�chmod�_is_file_validrarb�exists�unlinkr
�rename)�allowedrp�temp_prefix�fd�	temp_path�fo�maskrgs        rrCzClsudo._write_contents�s`��O�N��0M�N�N�N��
�7���F�O�,�,�G�;�;��N�N�J�!�?�B�I�K�K�����
F�
F�
F�$�%�%�%�	-��w���v��7�7�H�(�K�$�,�K�X�N�N�N�M�B�	���2�s�#�#�B��H�H�T�Y�Y�v�2�3�3�d�:�;�;�;��H�H�J�J�J��W�$�D��H�Y��%�%�%��(�(��3�3�
��
�
����!�		-�		-�		-��N�N�.�/5���9�;�;��	���
5�
5�
5�
��7�>�>�)�,�,�)��I�i�(�(�(����
�
�
���
����#�%�%�1�,�����		-����	-��I�i���1�1�1�1�1���	-�	-�	-��N�N�.�/5���9�;�;��	���
5�
5�
5�$�%�%�1�,�����		-���sW�C'F�H5�A	H0�3H�H0�
H�H0�H�H0�0H5�9I�
K�$AJ<�<Kc�
�ddd|g}tj|tjtjtj���5}|���|jdkr	ddd��dS	ddd��n#1swxYwYdS)Nz/usr/sbin/visudoz-cz-f)�stdin�stdout�stderrrFT)�
subprocess�Popen�DEVNULL�PIPE�STDOUT�communicate�
returncode)�filename�cmd�procs   rr�zClsudo._is_file_valid�s���
���(�
��
�
���$��?��$�	
�
�
�	�
���������!�#�#��	�	�	�	�	�	�	�	�$�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��ts�!A8�8A<�?A<)!rrr�__doc__�SUDOERS_FILEr�rIr6rArRr5r:r>r?r<r@rJrL�staticmethodrFrMrUrhrjr2r3rOrqrvr4rPrCr�rrrr%r%Os��������+�_���H��L��J����I��N��J��O����������$0�)�)�)��\�)�<�+7�)�)�)��\�)�(�6B�/�/�/��\�/�0�'3�&,�&,�&,��\�&,�P�'3�#�#�#��\�#�"�*6�!%�!%�!%��\�!%�F�*�*��\�*��1�1��\�1��8�8��\�8��&*�&*��\�&*�P�?,�?,��\�?,�B�,,�,,��\�,,�\�)-�)-��\�)-�V����\���rr%)�loggingr/rr�r�r�r��statrr�	getLoggerrr-r
rrrrr�r9r;rKr�r�rsrrr=rBrQrSr%rrr�<module>r�s�������	�	�	�	�
�
�
�
�
�
�
�
�	�	�	�	���������!�!�!�!�!�!�!�!�	��	�8�	$�	$��;�;�;�;�;��;�;�;�
=�=�=�=�=�)�=�=�=�
=�=�=�=�=�y�=�=�=�
?�?�?�?�?�	�?�?�?�
��I�I�I��
R�R��a�`�`���"�*�@�A�A���B�J�D�E�E���"�*�@�A�A��H�H�H��0��G��7��t�t�t�t�t�t�t�t�t�tr