<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
mi;                 @   s"   d dl Z d dlZG dd dZdS )    Nc               @   s   e Zd ZG dd deZdddZdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdddZdS )ClPwdc               @   s   e Zd Zdd ZdS )zClPwd.NoSuchUserExceptionc             C   s   t j| d|f  d S )NzNo such user (%s))	Exception__init__)selfuser r   /usr/lib/python3.6/clpwd.pyr      s    z"ClPwd.NoSuchUserException.__init__N)__name__
__module____qualname__r   r   r   r   r   NoSuchUserException   s   r   Nc             C   s8   i | _ i | _i | _i | _|d kr.| jd| _n|| _d S )Ni  )_user_key_map_uid_key_map_user_full_map_uid_full_mapget_sys_min_uid_min_uid)r   Zmin_uidr   r   r   r   	   s    zClPwd.__init__c             C   s   | j   | jS )N)_load_passwd_databaser   )r   r   r   r   get_user_dict   s    zClPwd.get_user_dictc             C   s   | j   | jS )N)r   r   )r   r   r   r   get_uid_dict   s    zClPwd.get_uid_dictc             C   s   | j   | jS )N)r   r   )r   r   r   r   get_user_full_dict   s    zClPwd.get_user_full_dictc             C   s   | j   | jS )N)r   r   )r   r   r   r   get_uid_full_dict   s    zClPwd.get_uid_full_dictc             C   s0   y| j  | S  tk
r*   tj|Y nX dS )z*
        Return pw_entry for user
        N)r   KeyErrorr   r   )r   r   r   r   r   get_pw_by_name#   s    zClPwd.get_pw_by_namec             C   s0   y| j  | S  tk
r*   tj|Y nX dS )z7
        Return list of passwd entries for uid
        N)r   r   r   r   )r   uidr   r   r   get_pw_by_uid,   s    zClPwd.get_pw_by_uidc             C   s2   y| j  | jS  tk
r,   tj|Y nX dS )z&
        Returns uid for user
        N)r   pw_uidr   r   r   )r   r   r   r   r   get_uid5   s    zClPwd.get_uidc             C   s2   y| j  | jS  tk
r,   tj|Y nX dS )z`
        Returns homedir for a user
        @param user: string
        @return: string
        N)r   pw_dirr   r   r   )r   r   r   r   r   get_homedir>   s    zClPwd.get_homedirc             C   s   | j sxtj D ]|}|| j|j< |j| j kr8g | j |j< | j |j j| |j| jkr|| j|j< |j| j	krzg | j	|j< | j	|j j| qW dS )zZ
        Loads the passwd database and fills user_to_uid and user_to_homedir maps
        N)
r   pwdZgetpwallr   pw_namer   appendr   r   r   )r   entryr   r   r   r   I   s    zClPwd._load_passwd_databasec             C   s>   y| j  | }W n tk
r.   tj|Y nX dd |D S )zs
        Return names of users with uid specified
        @param uid: int
        @return: list of strings
        c             S   s   g | ]
}|j qS r   )r!   ).0r#   r   r   r   
<listcomp>d   s    z#ClPwd.get_names.<locals>.<listcomp>)r   r   r   r   )r   r   Zentriesr   r   r   	get_namesY   s
    zClPwd.get_names  c             C   sn   d}t jj|rjt|dJ}xB|D ]:}|jdr"yt|jdd j S  tk
rZ   Y q"X q"W W dQ R X |S )z
        Return system defined MIN_UID from /etc/login.def or def_min_uid
        @param def_min_uid: int
        @return: MIN_UID: int
        z/etc/login.defsrZUID_MIN   N)	ospathexistsopen
startswithintsplitstrip
ValueError)r   Zdef_min_uidZLOGIN_DEF_FILElinesliner   r   r   r   g   s    

zClPwd.get_sys_min_uid)N)r'   )r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r&   r   r   r   r   r   r      s   

			r   )r    r*   r   r   r   r   r   <module>   s   