
    \dL                         d Z ddlmZ ddgZ G d d          Z G d d          Z G d d	          Z G d
 d          ZdS )zM
L{twisted.python.fakepwd} provides a fake implementation of the L{pwd} API.
    )ListUserDatabaseShadowDatabasec                   L    e Zd ZdZdededededededed	d
fdZd	efdZ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                 h    || _         || _        || _        || _        || _        || _        || _        d S Npw_name	pw_passwdpw_uidpw_gidpw_gecospw_dirpw_shell)selfr   r	   r
   r   r   r   r   s           6lib/python3.11/site-packages/twisted/python/fakepwd.py__init__z_UserRecord.__init__   s9     !    c                     dS )N    r   s    r   __len__z_UserRecord.__len__'       qr   c                 f    | j         | j        | j        | j        | j        | j        | j        f|         S r   r   r   indexs     r   __getitem__z_UserRecord.__getitem__*   s9    LNKKMKM
  	r   	__name__
__module____qualname____doc__strintr   r"   r'   r    r   r   r   r      s           	
     
   $    	 	 	 	 	r   r   c                       e Zd ZU dZee         ed<   ddZdedede	d	e	d
edededdfdZ
de	defdZdedefdZdee         f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                     g | _         d S r   r0   r!   s    r   r   zUserDatabase.__init__A       r   usernamer	   r
   r   r   r   r   c                 `    | 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)r0   appendr   )r   r4   r	   r
   r   r   r   r   s           r   addUserzUserDatabase.addUserD   s@    D 	(CeT5II	
 	
 	
 	
 	
r   c                 P    | j         D ]}|j        |k    r|c S t                      )zH
        Return the user record corresponding to the given uid.
        )r0   r   KeyError)r   r
   entrys      r   getpwuidzUserDatabase.getpwuidj   s:     [ 	 	E|s"" #jjr   r   c                     t          |t                    st          dt          |                     | j        D ]}|j        |k    r|c S t                      )zM
        Return the user record corresponding to the given username.
        z%getpwuam() argument must be str, not )
isinstancer-   	TypeErrortyper0   r   r9   )r   r   r:   s      r   getpwnamzUserDatabase.getpwnams   sj     $$$ 	RPDJJPPQQQ[ 	 	E}$$ %jjr   c                     | j         S )z4
        Return a list of all user records.
        r2   r!   s    r   getpwallzUserDatabase.getpwall~        {r   r   N)r)   r*   r+   r,   r   r   __annotations__r   r-   r.   r7   r;   r@   rB   r    r   r   r   r   6   s             $
$
 $
 	$

 $
 $
 $
 $
 
$
 $
 $
 $
LC K    	S 	[ 	 	 	 	${+      r   c                   T    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ZdefdZ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.
    r4   r	   
lastChangeminmaxwarninactexpireflagr   Nc
                     || _         || _        || _        || _        || _        || _        || _        || _        |	| _        d S r   	sp_namsp_pwd	sp_lstchgsp_minsp_maxsp_warnsp_inact	sp_expiresp_flag
r   r4   r	   rH   rI   rJ   rK   rL   rM   rN   s
             r   r   z_ShadowRecord.__init__   sG     #r   c                     dS )N	   r    r!   s    r   r"   z_ShadowRecord.__len__   r#   r   c           	      ~    | j         | j        | j        | j        | j        | j        | j        | j        | j        f	|         S r   rP   r%   s     r   r'   z_ShadowRecord.__getitem__   sC    KKNKKLMNL

 
 
	r   r(   r    r   r   rG   rG      s           	
       
   ,        r   rG   c                   x    e Zd ZU dZee         e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Z
dedefdZ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
    r0   r   Nc                     g | _         d S r   r2   r!   s    r   r   zShadowDatabase.__init__   r3   r   r4   r	   rH   rI   rJ   rK   rL   rM   rN   c
                 d    | 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)r0   r6   rG   rZ   s
             r   r7   zShadowDatabase.addUser   sI    P 	(JS$vt 	
 	
 	
 	
 	
r   c                     t          |t                    st          dt          |                     | j        D ]}|j        |k    r|c S t          |          )zT
        Return the shadow user record corresponding to the given username.
        z%getspnam() argument must be str, not )r=   r-   r>   r?   r0   rQ   r9   )r   r4   r:   s      r   getspnamzShadowDatabase.getspnam   sn     (C(( 	VTDNNTTUUU[ 	 	E|x'' (x   r   c                     | j         S )z;
        Return a list of all shadow user records.
        r2   r!   s    r   getspallzShadowDatabase.getspall   rC   r   rD   )r)   r*   r+   r,   r   rG   rE   r   r-   r.   r7   rb   rd   r    r   r   r   r      s              ,
,
 ,
 	,

 ,
 ,
 ,
 ,
 ,
 ,
 
,
 ,
 ,
 ,
\	! 	! 	! 	! 	! 	!    r   N)r,   typingr   __all__r   r   rG   r   r    r   r   <module>rg      s   
       +
,% % % % % % % %PL L L L L L L L^+ + + + + + + +\M M M M M M M M M Mr   