o
    ¯bL  ã                   @   sT   d Z ddlmZ ddgZG dd„ dƒZG dd„ dƒZG dd	„ d	ƒZG d
d„ dƒZdS )zM
L{twisted.python.fakepwd} provides a fake implementation of the L{pwd} API.
é    )ÚListÚUserDatabaseÚShadowDatabasec                   @   sP   e Zd ZdZdededededededed	d
fdd„Zd	efdd„Zdd„ Zd
S )Ú_UserRecordzÉ
    L{_UserRecord} holds the user data for a single user in L{UserDatabase}.
    It corresponds to the C{passwd} structure from the L{pwd} module.
    See that module for attribute documentation.
    ÚnameÚpasswordÚuidÚgidÚgecosÚhomeÚshellÚreturnNc                 C   s.   || _ || _|| _|| _|| _|| _|| _d S ©N©Úpw_nameÚ	pw_passwdÚpw_uidÚpw_gidÚpw_gecosÚpw_dirÚpw_shell)Úselfr   r   r   r	   r
   r   r   © r   ú8/usr/lib/python3/dist-packages/twisted/python/fakepwd.pyÚ__init__   s   

z_UserRecord.__init__c                 C   ó   dS )Né   r   ©r   r   r   r   Ú__len__'   ó   z_UserRecord.__len__c                 C   s$   | j | j| j| j| j| j| jf| S r   r   ©r   Úindexr   r   r   Ú__getitem__*   s   ùøz_UserRecord.__getitem__©	Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚintr   r   r"   r   r   r   r   r      s*    þýüûúùø	
÷r   c                   @   sˆ   e Zd ZU dZee ed< ddd„Zdeded	e	d
e	dedededdfdd„Z
d	e	defdd„Zdedefdd„Zdee fdd„ZdS )r   zí
    L{UserDatabase} holds a traditional POSIX user data in memory and makes it
    available via the same API as L{pwd}.

    @ivar _users: A C{list} of L{_UserRecord} instances holding all user data
        added to this database.
    Ú_usersr   Nc                 C   ó
   g | _ d S r   ©r*   r   r   r   r   r   A   ó   
zUserDatabase.__init__Úusernamer   r   r	   r
   r   r   c              
   C   s    | j  t|||||||ƒ¡ dS )aâ  
        Add a new user record to this database.

        @param username: The value for the C{pw_name} field of the user
            record to add.

        @param password: The value for the C{pw_passwd} field of the user
            record to add.

        @param uid: The value for the C{pw_uid} field of the user record to
            add.

        @param gid: The value for the C{pw_gid} field of the user record to
            add.

        @param gecos: The value for the C{pw_gecos} field of the user record
            to add.

        @param home: The value for the C{pw_dir} field of the user record to
            add.

        @param shell: The value for the C{pw_shell} field of the user record to
            add.
        N)r*   Úappendr   )r   r.   r   r   r	   r
   r   r   r   r   r   ÚaddUserD   s   "ÿzUserDatabase.addUserc                 C   s$   | j D ]}|j|kr|  S qtƒ ‚)zH
        Return the user record corresponding to the given uid.
        )r*   r   ÚKeyError)r   r   Úentryr   r   r   Úgetpwuidj   s
   

ÿzUserDatabase.getpwuidr   c                 C   s@   t |tƒstdt|ƒ› �ƒ‚| jD ]}|j|kr|  S qtƒ ‚)zM
        Return the user record corresponding to the given username.
        z%getpwuam() argument must be str, not )Ú
isinstancer(   Ú	TypeErrorÚtyper*   r   r1   )r   r   r2   r   r   r   Úgetpwnams   s   


ÿzUserDatabase.getpwnamc                 C   ó   | j S )z4
        Return a list of all user records.
        r,   r   r   r   r   Úgetpwall~   ó   zUserDatabase.getpwall©r   N)r$   r%   r&   r'   r   r   Ú__annotations__r   r(   r)   r0   r3   r7   r9   r   r   r   r   r   6   s0   
 
þýüûúùø	
÷&	c                   @   sX   e Zd ZdZdededededededed	ed
eddfdd„Zdefdd„Zdd„ ZdS )Ú_ShadowRecordzº
    L{_ShadowRecord} holds the shadow user data for a single user in
    L{ShadowDatabase}.  It corresponds to C{spwd.struct_spwd}.  See that class
    for attribute documentation.
    r.   r   Ú
lastChangeÚminÚmaxÚwarnÚinactÚexpireÚflagr   Nc
           
      C   s:   || _ || _|| _|| _|| _|| _|| _|| _|	| _d S r   ©	Úsp_namÚsp_pwdÚ	sp_lstchgÚsp_minÚsp_maxÚsp_warnÚsp_inactÚ	sp_expireÚsp_flag©
r   r.   r   r>   r?   r@   rA   rB   rC   rD   r   r   r   r   Œ   s   
z_ShadowRecord.__init__c                 C   r   )Né	   r   r   r   r   r   r   ¢   r   z_ShadowRecord.__len__c              	   C   s,   | j | j| j| j| j| j| j| j| jf	| S r   rE   r    r   r   r   r"   ¥   s   ÷
öz_ShadowRecord.__getitem__r#   r   r   r   r   r=   …   s2    þýüûúùø	÷
ö
õr=   c                   @   st   e Zd ZU dZee ed< ddd„Zdeded	e	d
e	de	de	de	de	de	ddfdd„Z
dedefdd„Zdd„ ZdS )r   zý
    L{ShadowDatabase} holds a shadow user database in memory and makes it
    available via the same API as C{spwd}.

    @ivar _users: A C{list} of L{_ShadowRecord} instances holding all user data
        added to this database.

    @since: 12.0
    r*   r   Nc                 C   r+   r   r,   r   r   r   r   r   À   r-   zShadowDatabase.__init__r.   r   r>   r?   r@   rA   rB   rC   rD   c
           
      C   s$   | j  t|||||||||	ƒ	¡ dS )a‘  
        Add a new user record to this database.

        @param username: The value for the C{sp_nam} field of the user record to
            add.

        @param password: The value for the C{sp_pwd} field of the user record to
            add.

        @param lastChange: The value for the C{sp_lstchg} field of the user
            record to add.

        @param min: The value for the C{sp_min} field of the user record to add.

        @param max: The value for the C{sp_max} field of the user record to add.

        @param warn: The value for the C{sp_warn} field of the user record to
            add.

        @param inact: The value for the C{sp_inact} field of the user record to
            add.

        @param expire: The value for the C{sp_expire} field of the user record
            to add.

        @param flag: The value for the C{sp_flag} field of the user record to
            add.
        N)r*   r/   r=   rO   r   r   r   r0   Ã   s
   (ÿÿzShadowDatabase.addUserc                 C   sB   t |tƒstdt|ƒ› �ƒ‚| jD ]}|j|kr|  S qt|ƒ‚)zT
        Return the shadow user record corresponding to the given username.
        z%getspnam() argument must be str, not )r4   r(   r5   r6   r*   rF   r1   )r   r.   r2   r   r   r   Úgetspnamñ   s   


ÿzShadowDatabase.getspnamc                 C   r8   )z;
        Return a list of all shadow user records.
        r,   r   r   r   r   Úgetspallü   r:   zShadowDatabase.getspallr;   )r$   r%   r&   r'   r   r=   r<   r   r(   r)   r0   rQ   rR   r   r   r   r   r   ³   s6   
 

þýüûúùø	÷
ö
õ.N)r'   Útypingr   Ú__all__r   r   r=   r   r   r   r   r   Ú<module>   s   (O.