
    b/                     r    d 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
Z
ddlmZ ddlZ G d de          ZdS )	a  
Tests for source4/dsdb/samdb/ldb_modules/password_hash.c
These tests need to be run in an environment in which
io->ac->gpg_key_ids != NULL, so that the gpg supplemental credentials
are generated. The functional level needs to be >= 2008 so that the
kerberos newer keys are generated.
    )PassWordHashTestsget_package	USER_PASS	USER_NAME)
ndr_unpack)drsblobsN)PasswordSettingsc                   D     e Zd Z fdZd Zd Zd	dZd Zd Zd Z	 xZ
S )
PassWordHashGpgmeTestsc                 V    t          t          |                                            d S N)superr   setUp)self	__class__s    A/usr/lib/python3/dist-packages/samba/tests/password_hash_gpgme.pyr   zPassWordHashGpgmeTests.setUp+   s&    $d++1133333    c                 F   |                                   | j                            d          s|                     d           |                                 }t          |j        j                  }|                     d|           t          |d          \  }}|                     d|           |                     d|j
                   t          |d          \  }}|                     d|           |                     d|j
                   t          |d          \  }}|                     d	|           |                     d|j
                   t          |d
          \  }}|                     d|           |                     d
|j
                   t          |d          \  }}|                     d|           |                     d|j
                   t          t          j        t          j        |j                            }|                     |           d S )Npassword hash gpg key idsDNo password hash gpg key ids, Primary:SambaGPG will not be generated   Primary:Kerberos-Newer-Keys   Primary:Kerberos   Primary:WDigest   Packages   Primary:SambaGPG)add_userlpgetskipTestget_supplemental_credslensubpackagesassertEqualr   namer   r   package_PrimaryWDigestBlobbinasciia2b_hexdatacheck_wdigests)r   scsizepospackage
wd_packagedigestss          r   $test_default_supplementalCredentialsz;PassWordHashGpgmeTests.test_default_supplementalCredentials.   s   w{{677 	DMM C D D D ((** 26?##D!!!$R)FGGgC   6EEE$R);<<gC   +W\:::',=>>jC   *JO<<<$R44gC   W\222$R);<<gC   +W\::: X@%-jo>>@ @G$$$$$r   c                    |                      d           | j                            d          s|                     d           |                                 }t          |j        j                  }|                     d|           t          |d          \  }}|                     d|           |                     d|j
                   t          |d          \  }}|                     d	|           |                     d|j
                   t          |d
          \  }}|                     d|           |                     d
|j
                   t          |d          \  }}|                     d|           |                     d|j
                   t          |d          \  }}|                     d|           |                     d|j
                   t          |d          \  }}|                     d|           |                     d|j
                   t          t          j        t          j        |j                            }|                     |           t          t          j        t          j        |j                            }|                     t'          j        d          |j                   d S )NT
clear_textr   r      r   r   r   r   r   r   Primary:CLEARTEXTr   r   r   r    	utf-16-le)r!   r"   r#   r$   r%   r&   r'   r(   r)   r   r*   r   r   r+   r,   r-   r.   r/   package_PrimaryCLEARTEXTBlobr   encode	cleartext)	r   r0   r1   r2   r3   r4   
ct_packager5   cts	            r   &test_supplementalCredentials_cleartextz=PassWordHashGpgmeTests.test_supplementalCredentials_cleartextT   s   &&&w{{677 	DMM C D D D ((** 26?##D!!!$R)FGGgC   6EEE$R);<<gC   +W\:::',=>>jC   *JO<<<',?@@jC   ,jo>>>$R44gC   W\222$R);<<gC   +W\::: X@%-jo>>@ @G$$$ = (99; ;)+66EEEEEr   Nc                    |                                  }|rt          |d          \  }}|                     |dud           t          t          j        t          j        |j                            }| 	                    |
                    d          |j                   dS t          |d          }|                     |du d           dS )z3Checks cleartext is (or isn't) returned as expectedr;   NzFailed to retrieve cleartextr<   z$Got cleartext when we shouldn't have)r%   r   
assertTruer   r   r=   r,   r-   r.   r)   r>   r?   )r   expect_cleartextpasswordr0   r2   r@   rA   s          r   assert_cleartextz'PassWordHashGpgmeTests.assert_cleartext   s    ((** 	D +B0C D DS*OOJd24RSSS HA$,Z_==? ?BX__[992<HHHHH$R)<==JOOJ$.BD D D D Dr   c                    |                      d           |                     dt                     t          d| j        dd          }|                     | j        j        |j                   dt          z   d	z   | j	        z   }|
                    |           t          j        d
d
          }| j                            dt          z  |           |                     d           |                    |           t          j        d
d
          }| j                            dt          z  |           |                     d|           |                     d           t          j        d
d
          }| j                            dt          z  |           |                     d           t          d| j        dd          }|                     | j        j        |j                   |
                    |           t          j        d
d
          }| j                            dt          z  |           |                     d|           dS )z?Checks that a PSO's cleartext setting can override the domain'sTr8   )rE   rF   zno-plaintext-PSO   F)
precedencestore_plaintextzcn=z
,cn=users,    z(sAMAccountName=%s))rE   zplaintext-PSOd   N)r!   rG   r   r	   ldb
addCleanupdeletednr   base_dnapply_tosambagenerate_random_passwordsetpasswordunapplyset_store_cleartext)r   no_plaintext_psouserdnnew_passwordplaintext_psos        r   *test_supplementalCredentials_cleartext_psozAPassWordHashGpgmeTests.test_supplementalCredentials_cleartext_pso   sK    	&&& 	tiHHH ,,>7:<AC C C 	)9)<==="\1DL@!!&))) 5b"==2Y>MMM 	u555 	  (((5b"==2Y>MMMtlKKK 	  '''5b"==2Y>MMMu555 )$(47O O O)9:::v&&&5b"==2Y>MMMtlKKKKKr   c                 R   |                      dg           |                                 }t          |j        j                  }|                     d|           t          |d          \  }}|                     d|           |                     d|j                   t          |d          \  }}|                     d|           |                     d|j                   t          |d          \  }}|                     d	|           |                     d|j                   t          |d
          \  }}|                     d|           |                     d
|j                   t          |d          \  }}|                     d|           |                     d|j                   t          |d          \  }}|                     d|           |                     d|j                   t          t          j
        t          j        |j                            }|                     |           t          t          j        t          j        |j                            }|                     |g d           |                     t$          |j        j                   d S )N)"password hash userPassword schemesz#CryptSHA512 CryptSHA256 CryptSHA512optionsr:   r   r   r   r   r   r   Primary:userPasswordr   r   r   r    ){CRYPT}6N)rd   5Nrc   r!   r%   r&   r'   r(   r)   r   r*   r   r   r+   r,   r-   r.   r/   package_PrimaryUserPasswordBlobcheckUserPasswordcheckNtHashr   current_nt_hashhash	r   r0   r1   r2   r3   
wp_package
up_packager5   ups	            r   !test_userPassword_multiple_hashesz8PassWordHashGpgmeTests.test_userPassword_multiple_hashes   s     3 4 	5 	5 	5 ((** 26?##D!!!$R)FGGgC   6EEE$R);<<gC   +W\:::',=>>jC   *JO<<<',BCCjC   /AAA$R44gC   W\222$R);<<gC   +W\::: X@%-jo>>@ @G$$$ @ (99; ;r $
 $
 $
 	 	 	
 	B$6$;<<<<<r   c                 R   |                      dg           |                                 }t          |j        j                  }|                     d|           t          |d          \  }}|                     d|           |                     d|j                   t          |d          \  }}|                     d|           |                     d|j                   t          |d          \  }}|                     d	|           |                     d|j                   t          |d
          \  }}|                     d|           |                     d
|j                   t          |d          \  }}|                     d|           |                     d|j                   t          |d          \  }}|                     d|           |                     d|j                   t          t          j
        t          j        |j                            }|                     |           t          t          j        t          j        |j                            }|                     |g d           |                     t$          |j        j                   d S )N)r_   zGCryptSHA512:rounds=5120 CryptSHA256:rounds=2560 CryptSHA512:rounds=5122r`   r:   r   r   r   r   r   r   rb   r   r   r   r    ))rd   re   i   )rd   rf   i 
  )rd   re   i  rg   rm   s	            r   2test_userPassword_multiple_hashes_rounds_specifiedzIPassWordHashGpgmeTests.test_userPassword_multiple_hashes_rounds_specified   s     W X 	Y 	Y 	Y ((** 26?##D!!!$R)FGGgC   6EEE$R);<<gC   +W\:::',=>>jC   *JO<<<',BCCjC   /AAA$R44gC   W\222$R);<<gC   +W\::: X@%-jo>>@ @G$$$ @ (99; ;r $
 $
 $
 	 	 	
 	B$6$;<<<<<r   r   )__name__
__module____qualname__r   r6   rB   rG   r]   rq   rs   __classcell__)r   s   @r   r   r   )   s        4 4 4 4 4$% $% $%L-F -F -F^D D D D +L +L +LZ3= 3= 3=j3= 3= 3= 3= 3= 3= 3=r   r   )__doc__samba.tests.password_hashr   r   r   r   	samba.ndrr   samba.dcerpcr   r,   samba.tests.psor	   rT   r    r   r   <module>r~      s   &             !           ! ! ! ! ! !  , , , , , , = = = = =. = = = = =r   