Edit File: clpwd.cpython-311.opt-1.pyc
� �����eJ����������������������������d�dl�mZ�d�dl�mZ�d�dl�mZ�d�dlZd�dlZd�dlZd�dlmZ�ddl m Z ��G�d��d ������������Zdd�Zed����������������Z d ��Zdd�ZdS�)�����)�absolute_import)�division)�print_functionN)�contextmanager����)�FormattedExceptionc��������������������z�����e�Zd�ZdZ�G�d��de������������Zdd�Zd��Zd��Zd��Z d ��Z d ��Zd��Zd��Z d ��Zd��Zd��Zdd�ZdS�)�ClPwdz/etc/login.defsc���������������������������e�Zd�Z��fd�Z��xZS�)�ClPwd.NoSuchUserExceptionc������������������d�������t����������t����������j��������|�������������j��������dd|id�g|�R�i�|���d�S�)NzNo such user (%(user)s)�user��message�context)�superr ����NoSuchUserException�__init__)�selfr����args�kwargs� __class__s��� ���/builddir/build/BUILDROOT/alt-python27-cllib-3.3.5-1.el8.cloudlinux.x86_64/opt/cloudlinux/venv/lib/python3.11/site-packages/clcommon/clpwd.pyr���z"ClPwd.NoSuchUserException.__init__���sc�������;�E�%�+�T�2�2�;�4�"�D�>�=��=�� ��� �� �� ��� �� �� �� �� �����)�__name__� __module__�__qualname__r���� __classcell__)r���s���@r���r���r������s8��������������� �� �� �� �� �� �� �� �� r���r���Nc�����������������������i�|�_���������i�|�_��������i�|�_��������i�|�_��������|�|����������������������d������������|�_��������d�S�||�_��������d�S�)N����)� _user_key_map�_uid_key_map�_user_full_map� _uid_full_map�get_sys_min_uid�_min_uid)r����min_uids��� r���r���zClPwd.__init__ ���sK������������ �������?� �0�0��5�5�D�M�M�M�#�D�M�M�Mr���c������������������8�����|��������������������������������������|�j��������S��N)�_load_passwd_databaser!����r���s��� r���� get_user_dictzClPwd.get_user_dict*�����������"�"�$�$�$��!�!r���c������������������8�����|��������������������������������������|�j��������S�r)���)r*���r"���r+���s��� r����get_uid_dictzClPwd.get_uid_dict.���s�������"�"�$�$�$�� � r���c������������������8�����|��������������������������������������|�j��������S�r)���)r*���r#���r+���s��� r����get_user_full_dictzClPwd.get_user_full_dict2���s�������"�"�$�$�$��"�"r���c������������������8�����|��������������������������������������|�j��������S�r)���)r*���r$���r+���s��� r����get_uid_full_dictzClPwd.get_uid_full_dict6���r-���r���c����������������������� �|�������������������������������������|���������S�#�t����������$�r�t�������������������������������|�������������w�xY�w)z* Return pw_entry for user )r1����KeyErrorr ���r����r���r���s��� r����get_pw_by_namezClPwd.get_pw_by_name:���sM������ 2��*�*�,�,�T�2�2���� 2�� 2�� 2��+�+�D�1�1�1� 2���� ������%Ac����������������������� �|�������������������������������������|���������S�#�t����������$�r�t�������������������������������|�������������w�xY�w)z7 Return list of passwd entries for uid �r3���r5���r ���r���)r����uids��� r���� get_pw_by_uidzClPwd.get_pw_by_uidC���sM������ 1��)�)�+�+�C�0�0���� 1�� 1�� 1��+�+�C�0�0�0� 1���r8���c����������������������� �|�������������������������������������|���������j��������S�#�t����������$�r�t�������������������������������|�������������w�xY�w)z& Returns uid for user )r1����pw_uidr5���r ���r���r6���s��� r����get_uidz ClPwd.get_uidL���sP������ 2��*�*�,�,�T�2�9�9���� 2�� 2�� 2��+�+�D�1�1�1� 2���� ����!��%Ac����������������������� �|�������������������������������������|���������j��������S�#�t����������$�r�t�������������������������������|�������������w�xY�w)z` Returns homedir for a user @param user: string @return: string )r1����pw_dirr5���r ���r���r6���s��� r����get_homedirzClPwd.get_homedirU���sP������ 2��*�*�,�,�T�2�9�9���� 2�� 2�� 2��+�+�D�1�1�1� 2���r@���c����������������������|�j���������s�t����������j����������������������D�]�}||�j��������|j��������<���|j��������|�j���������vrg�|�j���������|j��������<���|�j���������|j��������������������������������������|�������������|j��������|�j��������k����rQ||�j��������|j��������<���|j��������|�j ��������vrg�|�j ��������|j��������<���|�j ��������|j��������������������������������������|���������������dS�dS�)zZ Loads the passwd database and fills user_to_uid and user_to_homedir maps N) r$����pwd�getpwallr#����pw_namer>����appendr&���r!���r"���)r����entrys��� r���r*���zClPwd._load_passwd_database`���s���������!�� B������ B�� B��5:��#�E�M�2��<�t�'9�9�9�79�D�&�u�|�4��"�5�<�0�7�7��>�>�>��<�4�=�0�0�8=�D�&�u�}�5��|�4�+<�<�<�:<��)�%�,�7��%�e�l�3�:�:�5�A�A�A�� B�� B� B�� Br���c����������������������� �|�������������������������������������|���������}n(#�t����������$�r�t�������������������������������|�������������w�xY�wd��|D���������������S�)zs Return names of users with uid specified @param uid: int @return: list of strings c�����������������������g�|�] }|j����������� S���)rG���)�.0rI���s��� r���� <listcomp>z#ClPwd.get_names.<locals>.<listcomp>{���s������3�3�3�%�� �3�3�3r���r:���)r���r;����entriess��� r���� get_nameszClPwd.get_namesp���sd������ 1��,�,�.�.�s�3�G�G���� 1�� 1�� 1��+�+�C�0�0�0� 1�����4�3�7�3�3�3�3s ������%Ar ���c����������������������t�����������j�����������������������������|�j��������������������r�t ����������|�j��������d������������5�}|�����������������������������������}ddd�������������n#�1�swxY�w�Y���|D�]d}|���������������������d������������rM �t����������|���������������������d������������d���������� ����������������������������������������������c�S�#�t����������$�r�Y��`w�xY�w�e|S�)z� Return system defined MIN_UID from /etc/login.def or def_min_uid @param def_min_uid: int @return: MIN_UID: int �rN�UID_MINr���)�os�path�exists�LOGIN_DEF_FILE�open� readlines� startswith�int�split�strip� ValueError)r����def_min_uid�f�lines�lines��� r���r%���zClPwd.get_sys_min_uid}���s�������7�>�>�$�-�.�.�� ��d�)�3�/�/�� &�1���� � �� &�� &�� &�� &�� &�� &�� &�� &�� &�� &�� &����� &�� &�� &�� &��� �� ���?�?�9�-�-����"�4�:�:�i�#8�#8��#;�#A�#A�#C�#C�D�D�D�D�D��%����������������s#����A�A�"A��9B<�< C �C r)���)r ���)r���r���r���rW���r���r���r���r,���r/���r1���r3���r7���r<���r?���rC���r*���rP���r%���rL���r���r���r ���r ������s�������������&�N� �� �� �� �� �0�� �� �� �$��$��$��$�"��"��"�!��!��!�#��#��#�"��"��"�2��2��2�1��1��1�2��2��2� 2�� 2�� 2�B��B��B� 4��4��4�����������r���r ���Tc������������������0������t����������j����������������������}|dk����r���r�t����������j����������������������}��fd�t ����������j����������������������D���������������}|j��������}||vr|���������������������|�������������t����������j��������|�������������|r3t����������j ��������|j���������������������t����������j ��������|j���������������������n2t����������j��������|j���������������������t����������j ��������|j���������������������|r)��t�����������j��������d<���|j��������t�����������j��������d<���dS�dS�dS�dS�)z� Drop current root privileges to user :param effective_or_real: if True - drop euid, else - drop ruid :param user: name of unix user :param set_env: bool -> if true set $HOME and $USER env variables :return: None r���c������������������0������g�|�]}�|j���������v��|j����������S�rL���)�gr_mem�gr_gid)rM����groupr���s��� �r���rN���z(drop_user_privileges.<locals>.<listcomp>����s'�������X�X�X��4�5�<�CW�CW�u�|�CW�CW�CWr����USER�HOMEN)rT����geteuidrE����getpwnam�grp�getgrall�pw_gidrH���� setgroups�setegid�seteuidr>����setgid�setuid�environrB���)r����effective_or_real�set_env�current_euid�user_pwd�user_groups�main_user_groups���` r����drop_user_privilegesr{�������s��������:�<�<�L��q���T���<��%�%��X�X�X�X�����X�X�X��"�/���+�-�-�����/�/�/� ��[�!�!�!��� '��J�x��'�'�'��J�x��'�'�'�'��I�h�o�&�&�&��I�h�o�&�&�&��� 1�!%�B�J�v��!)��B�J�v����%����� 1�� 1r���c��������������#������K����t����������j����������������������t����������j����������������������t����������j����������������������}}} �t ����������|�dd��������������n(#�t ����������$�r�t�������������������������������|��������������w�xY�w �dV���t����������j��������|�������������t����������j ��������|�������������t����������j ��������|�������������dS�#�t����������j��������|�������������t����������j ��������|�������������t����������j ��������|�������������w�xY�w)zk Temporary drop privileges to some user :type user: str :raises: ClPwd.NoSuchUserException TF)ru���rv���N)rT����getuid�getgid� getgroupsr{���r5���r ���r���rq���rp���ro���)r����old_uid�old_gid� old_groupss��� r����drop_privilegesr��������s������������$&�9�;�;�� ���R�\�^�^�j�W�G�.��T�T�5�I�I�I�I�I����.��.��.��'�'��-�-�-�.����!� ���� � �7���� � �7���� ��Z� � � � � ��� � �7���� � �7���� ��Z� � � � ���s����A��%A5�9B;��;>C9c�����������������������|��t����������d�������������ddlm}�ddlm}��||�������������} �|d���������\��}}n#�t ����������$�r��|dd|�id ��������������w�xY�w|S�) zw Resolve document root by username :param user: str -> name of unix user :return: str -> document root Nz-Cannot resolve docroot without specified userr���)�userdomains)�NoDomainr���z!No domain for user %(user)s foundr���r���)r����cpapir�����cpapi.cpapiexceptionsr����� IndexError)r���r����r�����domains_list�_�results��� r����_resolve_doc_root_by_userr��������s���������|� �!P�Q�Q�Q��#�"�"�"�"�"�/�/�/�/�/�/��;�t�$�$�L�� ��O� ��6�6����������h�:���~� �� ������ ����� ��Ms ����6��Ac������������������&����ddl�m}�ddlm}�|�}d}t ����������j����������������������}|�'�||������������\��}}|��|}n|�|k����r�|d�������������|}nB|��t ����������|��������������}n/|dk����r)t����������j��������|������������j ��������}t ����������|�������������}||fS�)a�� Resolve username and doc_root by domain, or resolve document root by username, or resolve document root and username by effective uid :param user: str -> name of unix user :param domain: str -> domain of panel user :return: tuple -> user, doc_root r���)�docroot)� IncorrectDataNzUser and domain are in conflict)r���r���) r����r����r����r����rT���rj���r����rE����getpwuidrG���) r����domainr����r�����result_user�result_doc_rootrw����doc_root�domain_users ��� r����resolve_username_and_doc_rootr��������s��������������4�4�4�4�4�4��K��O��:�<�<�L� �� '�������+��<�%�K�K� �[� � ��-� A�B�B�B�"��� � �3��>�>�>��� �� � ��l�<�0�0�8��3��E�E�E����'�'r���)NTT)NN)� __future__r���r���r���rT���rE���rl���� contextlibr����clexceptionr���r ���r{���r����r����r����rL���r���r����<module>r�������s �����'��&��&��&��&��&��������������%��%��%��%��%��%�� � � � �� � � � �� � � � ��%��%��%��%��%��%��+��+��+��+��+��+�y��y��y��y��y��y��y��y�x1��1��1��1�<��!��!����!�&�����4(��(��(��(��(��(r���