
    bn                         d Z ddlZddlZddlZddlmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZmZmZ ddlmZ dd	lmZ  G d
 de          ZdS )z$Tests for samba.dcerpc.samr.password    N)cryptogenerate_random_passwordgenerate_random_bytesntstatus)system_session)Credentials)SMB_ENCRYPTION_REQUIRED)samrsecuritylsa)SamDB)RpcInterfaceTestCasec                   V     e Zd Z fdZ fdZd Zd Zd Zd Zd Z	dd	Z
dd
Z xZS )SamrPasswordTestsc                    t          t          |                                            |                                  |                     d           t
          j                            d          | _        t
          j                            d          | _	        t
          j                            d          | _
        t
          j                            d          | _        d| j        z  | _        t                      | _        | j                            | j                   | j                            | j
                   | j                            | j                   d S )Ni'  SERVERDOMAINUSERNAMEPASSWORDzncacn_np:%s[krb5])superr   setUp
open_samdbcreate_user_accountsambatestsenv_get_var_valueremote_serverremote_domainremote_userremote_passwordremote_binding_stringr   remote_credsguesslpset_usernameset_passwordself	__class__s    I/usr/lib/python3/dist-packages/samba/tests/dcerpc/samr_change_password.pyr   zSamrPasswordTests.setUp#   s   &&,,...  '''"[::8DD"[::8DD ;88DD${<<ZHH%8D<N%O"'MM(((&&t'7888&&t';<<<<<    c                 @   t          t          |                                            t          j        | j                   t          j        | j                   t          j        | j                   t          j	        
                    | j        | j                   d S N)r   r   tearDownr
   Closeuser_handledomain_handlehandler   r   delete_forcesamdbuser_dnr'   s    r*   r.   zSamrPasswordTests.tearDown4   sz    &&//111
4#$$$
4%&&&
4;  T\:::::r+   c                 "   t           j                                        | _        t	                      | _        | j                            | j                   t                      | _        t          | j        | j        | j                  | _
        d S )N)session_infocredentialsr$   )r   r   env_loadparmr$   r   local_credsr#   r   sessionr   r4   r(   s    r*   r   zSamrPasswordTests.open_samdb@   sr    +**,,&==tw'''%'''+'7"g' ' '


r+   c                 <   | j                             d t          j                  | _        | j                             | j        t          j        | j                            | _	        | j         
                    | j        t          j        | j	                  | _        d S r-   )connConnect2r   SEC_FLAG_MAXIMUM_ALLOWEDr2   LookupDomainr   Stringr   
domain_sid
OpenDomainr1   r<   s    r*   open_domain_handlez$SamrPasswordTests.open_domain_handleM   s    i(()1)JL L )0014D<N1O1OQ Q "Y11$+2:2S26/C Cr+   c                     t          j        | j                  }| j                            | j        |g          }| j                            | j        t          j        |d         j	        d                   | _
        d S )Nr   )r   rB   	user_namer>   LookupNamesr1   OpenUserr   r@   idsr0   )r(   nameridss      r*   open_user_handlez"SamrPasswordTests.open_user_handleX   sg    z$.))y$$T%7$@@9--d.@.6.O.21gk!n> >r+   c                 v   d|z  | _         t          dd          | _        d| j         d| j                                        | _        t          j                            | j        | j                   | j        	                    | j         | j        d| j         z   dz   | j        z   | j         | j                    d S )NzSAMR_USER_%d    zcn=z
,cn=users,zPassword for z is )description	givennamesurname)
rG   r   	user_passr4   	domain_dnr5   r   r   r3   newuser)r(   user_ids     r*   r   z%SamrPasswordTests.create_user_accountc   s    (721"b99.2nnndj>R>R>T>T>TU  T\:::
4>>'6'G&'PSWSa'a%)^#'>	 	 	3 	3 	3 	3 	3r+   c                    d }	 t          j                     t          j        | ||                    }t          j                     n# t          j                     w xY wt          j                    }t          |          |_        |S )Nc                 :   t          dgdz            }t          j        |                     d                    }t	          |          }t          d|z
            }d|z
  }||d|<   |||||z   <   |                    dd          |dd<   t          |          S )Nr   i  z	utf-16-lei      little)	byteorder)	bytearrayr   string_to_byte_arrayencodelenr   to_bytesbytes)passworddatapplenbis         r*   encode_pw_bufferzCSamrPasswordTests.init_samr_CryptPassword.<locals>.encode_pw_buffers   s    aS3Y''D*8??;+G+GHHAq66D%cDj11Ad
AD1ID1T6N MM!xM@@DSM;;r+   )	r   set_relax_moder   arcfour_encryptset_strict_moder
   CryptPasswordlistrc   )r(   rb   session_keyrh   encrypted_blobout_blobs         r*   init_samr_CryptPasswordz)SamrPasswordTests.init_samr_CryptPasswordq   s    	 	 	 	%!###"2;@P@PQY@Z@Z[[N"$$$$F"$$$$%''^,,s   1A
 
AP@ssw0rdc                 r   t          j         | j        |                                 | j                  | _        |                                  |                                  d}d}t          j                    }d|_        | 	                    || j        j
                  |_        	 | j                            | j        ||           d S # t          j        $ r`}t!          j        |j        d                   j        }t)          |           |t*          j        k    r| j        j        dk    rn Y d }~d S d }~ww xY w)Nrr      r   
disallowed)r
   r!   get_loadparmr"   r>   rE   rM   
UserInfo24password_expiredrq   rn   rb   SetUserInfo2r0   r   NTSTATUSErrorctypesc_uint32argsvalueprintr   NT_STATUS_ACCESS_DENIEDr$   weak_crypto)r(   rb   levelinfoecodes         r*   test_setUserInfo2_Passwordz,SamrPasswordTests.test_setUserInfo2_Password   s0   Id8"//11"/1 1	 	!!!   !44Xty?TUU		I""4#3UDAAAAA" 	 	 	?16!9--3D$KKK999$44 	s   $!C D6AD11D6c                    | j                             t                     t          j        | j        |                                 | j                   | _        |                                  |                                  d}d}t          j	                    }d|_
        |                     || j        j                  |_        | j                            | j        ||           d S )Nrr   rt   r   )r"   set_smb_encryptionr	   r
   r!   rv   r>   rE   rM   rw   rx   rq   rn   rb   ry   r0   )r(   rb   r   r   s       r*   $test_setUserInfo2_Password_Encryptedz6SamrPasswordTests.test_setUserInfo2_Password_Encrypted   s    ,,-DEEEId8"//11"/1 1	 	!!!   !44Xty?TUU	t/=====r+   )rr   )__name__
__module____qualname__r   r.   r   rE   rM   r   rq   r   r   __classcell__)r)   s   @r*   r   r   "   s        = = = = ="; ; ; ; ;' ' '	C 	C 	C> > >3 3 3  <   8> > > > > > > >r+   r   )__doc__osr{   samba.testsr   r   r   r   r   
samba.authr   samba.credentialsr   r	   samba.dcerpcr
   r   r   samba.samdbr   r   r    r+   r*   <module>r      s  & + * 				      S S S S S S S S S S S S % % % % % % ) ) ) ) ) ) 5 5 5 5 5 5 , , , , , , , , , ,       , , , , , ,Z> Z> Z> Z> Z>, Z> Z> Z> Z> Z>r+   