
    Fc                     H   d dl Z d dlZe j                            d d           dej        d<   d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlZd d	lmZ d d
lmZ d dlmZ d dlZd dlmZmZmZmZmZmZmZ d dlmZmZ d dl m!Z!m"Z"m#Z#m$Z$ d dl%m&Z&m'Z' d dl(m)Z) d dl*m+Z+m,Z,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7c m8c m9Z: d dl;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA dZBdZC G d de          ZD	 d#dZEd ZFd ZGd ZHd ZI G d  d!e3          ZJeKd"k    rdZBdZCd dlLZL eLjM                     dS dS )$    Nz
bin/python1PYTHONUNBUFFERED)futures)Enum)partial)Pipe)default_backend)Cipher)
algorithms)NTSTATUSErrordsdbgenerate_random_bytesgenerate_random_passwordntstatusunix2nttimewerror)DONT_USE_KERBEROSMUST_USE_KERBEROS)!aead_aes_256_cbc_hmac_sha512_blobdes_crypt_blob_16md4_hash_blobsha512_pbkdf2)lsasamr)SamDB)connect_samdbenv_get_var_valueenv_loadparm)AsReqBaseTest)kcrypto)KDCBaseTest)KerberosCredentials)KDC_ERR_CLIENT_REVOKEDKDC_ERR_PREAUTH_FAILED
KRB_AS_REP	KRB_ERRORNT_PRINCIPALNT_SRV_INSTFc                       e Zd ZdZdZdZdS )ConnectionResult         N)__name__
__module____qualname__
LOCKED_OUTWRONG_PASSWORDSUCCESS     @/usr/lib/python3/dist-packages/samba/tests/krb5/lockout_tests.pyr*   r*   M   s        JNGGGr5   r*   Tc
                 j   t          j                     t                      }
|
                                 t                      }|                    |           |                    |           |                    |           |                    |           |                    |           |	                    t                     |                                }|
                    t          |                    d                    }|
                                }|j        }|                                }|                                }|
                    t$          ||g          }|                                }|
                    d          }t+          j        d          }|
                    |t0          j        j                  }|
                    |          }|g}|
                    |          }|
                                }|	rt<          t>          f}nd}tA          |
          `!| "                    d           | #                    d	          stI          d
          |
%                    ||||||||||||||||||d          \  }}|
&                    |           |d         }|	r|tN          k    s|	s|tP          k    rtI          d|           |	stR          j*        S |d         }|t<          k    rtR          j+        S |t>          k    rtR          j,        S tI          d|           )N/)	name_typenamesi  )offset	postdatedr      0   timeout)main process failed to indicate readinessT)cnamerealmsnametillclient_as_etypesexpected_error_modeexpected_crealmexpected_cnameexpected_srealmexpected_snameexpected_saltetypespadatakdc_optionsexpected_supported_etypesexpected_account_namepreauth_keyticket_decryption_keypac_requestzmsg-typezwrong message type z
error-codezwrong error code )-r   
setUpClasssetUpr"   set_usernameset_password
set_domain	set_realmset_workstationset_kerberos_stater   get_usernamePrincipalName_creater'   splitget_krbtgt_credstgs_supported_enctypes	get_realmr(   get_saltget_KerberosTime	krb5_asn1
KDCOptionsPasswordKey_from_credsr    EnctypeAES256"get_enc_timestamp_pa_data_from_keyTicketDecryptionKey_from_credsget_default_enctypesr#   r$   type_ldb
send_bytespollAssertionError_test_as_exchangeassertIsNotNoner&   r%   r*   r3   r1   r2   )pipeurlhostnameusernamepassworddomainrC   workstationdnexpect_erroras_req_base
user_creds	user_namerB   krbtgt_credskrbtgt_supported_etypeskrbtgt_accountrD   rL   rE   rO   rR   ts_enc_padatarN   krbtgt_decryption_keyrM   expected_error_modesas_repkdc_exchange_dictmsg_type
error_codes                                  r6   connect_kdcr   S   su    //K$&&JH%%%H%%%&!!!{+++!!"3444''))I,,|3<??33G3G - I IE //11L*A""$$E!..00N,,{4BE3J - L LE ''))M''u'55D&{33K44Z5<_5KM MK  BB;OOM_F 	22<@@  --//F ! 6 6 8  ! 	[ 	OOD 99Q9 JHIII !, = =0#"9'3' !> ! !F( '''j!H ?I-- .!)Z!7!7=8==>>> (''%J+++**	-	-	-..===>>>r5   c	                    t                      }	|	                    |           |	                    |           |	                    |           |	                    |           |	                    t                     |                     d           |                     d          st          d          	 t          ||	t                                 t          j        S # t          j        $ r}
|
j        \  }}|t          j        k    rt          d|
 d          dt$          j        d	d
|v rt          j        cY d }
~
S dt$          j        d	d
|v rt          j        cY d }
~
S t          d| d          d }
~
ww xY w)Nr=   r>   r?   rA   ru   credentialslpz$connection raised wrong error code ()zdata x,)r"   rW   rX   rY   r[   r\   r   ro   rp   rq   r   r   r*   r3   ldbLdbErrorargsERR_INVALID_CREDENTIALSr   WERR_ACCOUNT_LOCKED_OUTr1   WERR_LOGON_FAILUREr2   )rt   ru   rv   rw   rx   ry   rC   rz   r{   r~   errnumestrs                r6   connect_ntlmr      s    %&&JH%%%H%%%&!!!{+++!!"3444 	OOD 99Q9 JHIII( 	#$	! 	! 	! 	!$  '' < . . .H	T#---  ",%(", ", ", - - - 7616666$>>#.......3V.3333t;;#2222222  "-%)"- "- "- . . ..s1   8C" "E>1AE9<E>E9 E>&E99E>c	           
      $   t                      }	|	                    |           |	                                }
t          dd          }|                    d          }t          |          }t          |          }d|z
  }t          |          |z   }|t          	                    |dd          z  }t          t          j        |
          d t                                                                }|                    |          }|d d         }t!          |
|          }t#          j                    }||_        t#          j                    }||_        t)          j                    }t-          |          |_        t)          j                    }t-          |          |_        t)          j        d| d	          }|                     d
           |                     d          st9          d          	 |                    ||||dd d d            t<          j        S # t@          $ re}|j!        \  }}|tD          j#        k    rt<          j$        cY d }~S |tD          j%        k    rt<          j&        cY d }~S t9          d|dd          d }~ww xY w)N    utf-16lei      littlelength	byteorder   	ncacn_np:[krb5,seal,smb2]r=   r>   r?   rA   T)serveraccountnt_passwordnt_verifier	lm_changelm_passwordlm_verifier	password3$pwd change raised wrong error code (08Xr   )'r"   rX   get_nt_hashr   encoder   lenbytesintto_bytesr
   r   ARC4r	   	encryptorupdater   r   Stringstringr   CryptPasswordlistdataPasswordhashro   rp   rq   ChangePasswordUser3r*   r3   r   r   r   NT_STATUS_ACCOUNT_LOCKED_OUTr1   NT_STATUS_WRONG_PASSWORDr2   )rt   ru   rv   rw   rx   ry   rC   rz   r{   r~   nt_hashnew_passwordnew_password_md4new_password_lenremaining_lenr   keyverifierr   r   r   r   connr   r   r   s                             r6   connect_samrr      s    %&&JH%%%$$&&G ,B33L&&z22L %\22 <((**M'',6L CLL!1()+3 ! 5 5 5L
 zw//&((* **3)++  ##L11L 3B3
C !#..HZ\\FFMjllGGN$&&KL))K-//KH~~K9;;;;<<D 	OOD 99Q9 JHIII( 	  )0-8-8+/-1-1+/ 	! 	1 	1 	1&  ''  	1 	1 	1H	T(777#.......H555#2222222  "0%("0 "0 "0 1 1 1	1s0   7H   
J*%J
JJ
0J6J

Jc	                    t                      }	|	                    |           |	                                }
t          dd          }|                    d          }t
                              t          |          dd          }||z   }t          j	                    }||_
        t          j	                    }||_
        t          d          }d}t          |
||          }d}d	}t          |||||          \  }}t          j                    }t!          |          |_        t!          |          |_        t          |          |_        t!          |          |_        ||_        t          j        d
| d          }|                     d           |                     d          st1          d          	 |                    |||           t4          j        S # t8          $ re}|j        \  }}|t<          j        k    rt4          j         cY d }~S |t<          j!        k    rt4          j"        cY d }~S t1          d|dd          d }~ww xY w)Nr   r   r,   r   r      i  s=   Microsoft SAM encryption key AEAD-AES-256-CBC-HMAC-SHA512 16 s6   Microsoft SAM MAC key AEAD-AES-256-CBC-HMAC-SHA512 16 r   r   r=   r>   r?   rA   )r   r   rx   r   r   r   )#r"   rX   r   r   r   r   r   r   r   r   r   r   r   r   r   EncryptedPasswordAESr   	auth_datasalt
cipher_lencipherPBKDF2Iterationsro   rp   rq   ChangePasswordUser4r*   r3   r   r   r   r   r1   r   r2   )rt   ru   rv   rw   rx   ry   rC   rz   r{   r~   r   r   r   r   r   iv
iterationscekenc_key_saltmac_key_salt
ciphertextr   pwd_bufr   r   r   r   s                              r6   connect_samr_aesr   J  s    %&&JH%%%$$&&G ,B33L&&z22L ||C$5$5+,.6 $ 8 8 $l2LZ\\FFMjllGGN 
r	"	"BJ
Z
0
0C9L9L >l>A>J>J>@	B BJ	 '))GYG88GLZG*%%GN)G9;;;;<<D 	OOD 99Q9 JHIII( 	  )0*1 	! 	3 	3 	3  ''  	1 	1 	1H	T(777#.......H555#2222222  "0%("0 "0 "0 1 1 1	1s0   9G 
I'%III-I3IIc	                    t                      }	t                      }
|
                    |	           |
                    t	          d                     |
                    t	          d                     |
                    t                     t          ||
|	          }d| d	                    d          }t          dd          }d| d	                    d          }t          j        t          j        ||                    }t          j        |t          j        d          |d<   t          j        |t          j        d          |d	<   |                     d
           |                     d          st'          d          	 |                    |           t*          j        S # t          j        $ r}|j        \  }}|t          j        k    rt'          d| d          dt4          j        dd|v rt*          j        cY d }~S dt4          j        dd|v rt*          j        cY d }~S t'          d| d          d }~ww xY w)NADMIN_USERNAMEADMIN_PASSWORDr   "r   r   
unicodePwd0r   r=   r>   r?   rA   r   r   <r   :)r   r"   guessrW   r   rX   r\   r   r   r   r   r   MessageDnMessageElementFLAG_MOD_DELETEFLAG_MOD_ADDro   rp   rq   modifyr*   r3   r   r   ERR_CONSTRAINT_VIOLATIONr   r   r1   WERR_INVALID_PASSWORDr2   )rt   ru   rv   rw   rx   ry   rC   rz   r{   r   admin_credssamdbold_utf16pwr   new_utf16pwmsgr   r   r   s                      r6   ldap_pwd_changer     s    
B%''Kb./?@@AAA./?@@AAA""#4555c)  E "h///((44K+B33L%l%%%,,Z88K
+cfUB''
(
(C!+"%"5".0 0CH !+"%"2".0 0CH 	OOD 99Q9 JHIII(S  '' < . . .H	T#... !N!N!N!NOOO4v-4444<<#.......4-4444<<#2222222  "-%)"- "- "- . . ..s1   F- -I	<AII	I+I	1II	c                       e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&	 	 d+d'Z'd,d(Z(d) Z)d* Z* xZ+S )-LockoutTestsc                    t                                                       t          | _        t          | _        |                                 t          j        	                                          fd}
                    t          j        g d          }|                     dt          |                     |d                             dd          }|                     |d|            |dd           |d                             dd          }|                     |d|           d	| _         |d| j                   |d                             d
d          }|                     |d
|            |d
d                                           }|                     j        |                               d           d S )Nc                     |g }t           j        }d S t          |          }t           j        }t          j                  }t          j        |||           || <                       |           d S N)r   r   strFLAG_MOD_REPLACEr   r   r   )attrvalueflagr   base_dnr   s       r6   modify_attrz'LockoutTests.setUp.<locals>.modify_attr  sp    }*E

+k'**.4' 'D	S!!!!!r5   )lockoutDurationlockoutThresholdmsDS-LogonTimeSyncIntervalscopeattrsr+   r   r  idxr  r-   r  r   )superrV   global_asn1_printdo_asn1_printglobal_hexdump
do_hexdump	get_samdbr   r   	domain_dnsearch
SCOPE_BASEassertEqualr   get
addCleanuplockout_thresholdget_minPwdAgeset_minPwdAge)
selfr   reslockout_durationr  sync_interval	minPwdAger   r   	__class__s
          @@r6   rV   zLockoutTests.setUp  s   .(  & 1 122	" 	" 	" 	" 	" 	" ll7!$"@ "@ "@  A A
 	CHH%%% q6::&7Q:??%68HIII 	%q)))  FJJ'9qJAA%79JKKK "#&(>??? A

#?Q
GG4%	' 	' 	' 	0!444 ''))	 	+Y777 	C     r5   c                     |j                             d          rd S |j                             d          rd S |                     d|j          d           d S )Nztdb://zmdb://zconnection to z is not local!)ru   
startswithfail)r  r   s     r6   assertLocalSamDBzLockoutTests.assertLocalSamDB  sb    9)) 	F9)) 	F		<59<<<=====r5   c                     |                     d          rd S |                                r|                    d          }|||                     d           d S )Nr>   r?   r   z!test failed to indicate readiness)rp   done	exceptionr   )r  rt   futurer$  s       r6   wait_for_readyzLockoutTests.wait_for_ready'  si    99Q9 	F ;;== 	 (((33I$		566666r5   c                 :    |                      t                     d S r   do_lockout_transactionr   r  s    r6   test_lockout_transaction_kdcz)LockoutTests.test_lockout_transaction_kdc4  s    ##K00000r5   c                 :    |                      t                     d S r   r)  r   r*  s    r6   test_lockout_transaction_ntlmz*LockoutTests.test_lockout_transaction_ntlm7      ##L11111r5   c                 :    |                      t                     d S r   r)  r   r*  s    r6   test_lockout_transaction_samrz*LockoutTests.test_lockout_transaction_samr:  r/  r5   c                 r    | j         s|                     d           |                     t                     d S N gnutls_pbkdf2() is not availablegnutls_pbkdf2_supportskipTestr)  r   r*  s    r6   !test_lockout_transaction_samr_aesz.LockoutTests.test_lockout_transaction_samr_aes=  s;    ) 	>MM<===##$455555r5   c                 :    |                      t                     d S r   r)  r   r*  s    r6   'test_lockout_transaction_ldap_pw_changez4LockoutTests.test_lockout_transaction_ldap_pw_changeB  s    ##O44444r5   c                 >    |                      t          d           d S NT)renamer(  r*  s    r6   #test_lockout_transaction_rename_kdcz0LockoutTests.test_lockout_transaction_rename_kdcL  s!    ##K#=====r5   c                 >    |                      t          d           d S r>  r-  r*  s    r6   $test_lockout_transaction_rename_ntlmz1LockoutTests.test_lockout_transaction_rename_ntlmO  s!    ##L#>>>>>r5   c                 >    |                      t          d           d S r>  r;  r*  s    r6   .test_lockout_transaction_rename_ldap_pw_changez;LockoutTests.test_lockout_transaction_rename_ldap_pw_changeR  s!    ##OD#AAAAAr5   c                 >    |                      t          d           d S NF
correct_pwr(  r*  s    r6   $test_lockout_transaction_bad_pwd_kdcz1LockoutTests.test_lockout_transaction_bad_pwd_kdcU  s!    ##KE#BBBBBr5   c                 >    |                      t          d           d S rF  r-  r*  s    r6   %test_lockout_transaction_bad_pwd_ntlmz2LockoutTests.test_lockout_transaction_bad_pwd_ntlmX  !    ##LU#CCCCCr5   c                 >    |                      t          d           d S rF  r1  r*  s    r6   %test_lockout_transaction_bad_pwd_samrz2LockoutTests.test_lockout_transaction_bad_pwd_samr[  rL  r5   c                 v    | j         s|                     d           |                     t          d           d S )Nr5  FrG  r6  r*  s    r6   )test_lockout_transaction_bad_pwd_samr_aesz6LockoutTests.test_lockout_transaction_bad_pwd_samr_aes^  s@    ) 	>MM<===##$4#GGGGGr5   c                 >    |                      t          d           d S rF  r;  r*  s    r6   /test_lockout_transaction_bad_pwd_ldap_pw_changez<LockoutTests.test_lockout_transaction_bad_pwd_ldap_pw_changec  s!    ##O#FFFFFr5   c                 :    |                      t                     d S r   do_bad_pwd_count_transactionr   r*  s    r6   "test_bad_pwd_count_transaction_kdcz/LockoutTests.test_bad_pwd_count_transaction_kdcf  s    ))+66666r5   c                 :    |                      t                     d S r   rU  r   r*  s    r6   #test_bad_pwd_count_transaction_ntlmz0LockoutTests.test_bad_pwd_count_transaction_ntlmi      )),77777r5   c                 :    |                      t                     d S r   )rU  r   r*  s    r6   #test_bad_pwd_count_transaction_samrz0LockoutTests.test_bad_pwd_count_transaction_samrl  rZ  r5   c                 r    | j         s|                     d           |                     t                     d S r4  )r7  r8  rU  r   r*  s    r6   'test_bad_pwd_count_transaction_samr_aesz4LockoutTests.test_bad_pwd_count_transaction_samr_aeso  s;    ) 	>MM<===))*:;;;;;r5   c                 :    |                      t                     d S r   rU  r   r*  s    r6   -test_bad_pwd_count_transaction_ldap_pw_changez:LockoutTests.test_bad_pwd_count_transaction_ldap_pw_changet  s    ))/:::::r5   c                 >    |                      t          d           d S r>  rT  r*  s    r6   )test_bad_pwd_count_transaction_rename_kdcz6LockoutTests.test_bad_pwd_count_transaction_rename_kdcw  s!    ))+d)CCCCCr5   c                 >    |                      t          d           d S r>  rX  r*  s    r6   *test_bad_pwd_count_transaction_rename_ntlmz7LockoutTests.test_bad_pwd_count_transaction_rename_ntlmz  s!    )),t)DDDDDr5   c                 >    |                      t          d           d S r>  r`  r*  s    r6   4test_bad_pwd_count_transaction_rename_ldap_pw_changezALockoutTests.test_bad_pwd_count_transaction_rename_ldap_pw_change}  s!    ))/$)GGGGGr5   c                 :    |                      t                     d S r   )do_lockout_racer   r*  s    r6   test_lockout_race_kdcz"LockoutTests.test_lockout_race_kdc  s    [)))))r5   c                 :    |                      t                     d S r   )ri  r   r*  s    r6   test_lockout_race_ntlmz#LockoutTests.test_lockout_race_ntlm      \*****r5   c                 :    |                      t                     d S r   )ri  r   r*  s    r6   test_lockout_race_samrz#LockoutTests.test_lockout_race_samr  rm  r5   c                 r    | j         s|                     d           |                     t                     d S r4  )r7  r8  ri  r   r*  s    r6   test_lockout_race_samr_aesz'LockoutTests.test_lockout_race_samr_aes  s;    ) 	>MM<===-.....r5   c                 :    |                      t                     d S r   )ri  r   r*  s    r6    test_lockout_race_ldap_pw_changez-LockoutTests.test_lockout_race_ldap_pw_change  s    _-----r5   c                 :    |                      t                     d S r   )do_logon_without_transactionr   r*  s    r6   #test_logon_without_transaction_ntlmz0LockoutTests.test_logon_without_transaction_ntlm  rZ  r5   c                 X    |                      t          t          d                     d S )NF)r|   )do_logonr   r   r*  s    r6   test_logon_kdczLockoutTests.test_logon_kdc  s'    gk>>>?????r5   c                 :    |                      t                     d S r   )rx  r   r*  s    r6   test_logon_ntlmzLockoutTests.test_logon_ntlm      l#####r5   c                 :    |                      t                     d S r   )rx  r   r*  s    r6   test_logon_samrzLockoutTests.test_logon_samr  r|  r5   c                 r    | j         s|                     d           |                     t                     d S r4  )r7  r8  rx  r   r*  s    r6   test_logon_samr_aesz LockoutTests.test_logon_samr_aes  s9    ) 	>MM<===&'''''r5   c                 :    |                      t                     d S r   )rx  r   r*  s    r6   test_logon_ldap_pw_changez&LockoutTests.test_logon_ldap_pw_change  s    o&&&&&r5   c                 
   |                      | j        j        d          }|                                }|                                 }|                                 }t          |                                ||          }|                     |           |	                                }t          d          \  }}	|                    d            ||	d|                                 |                                |                                ||                                |                                |                                t#          |          	  	        }
|                     |
t&          j                   d S )	NFaccount_type	use_cache	samdb_urlr   r   Tduplexr=   ldap://	rt   ru   rv   rw   rx   ry   rC   rz   r{   )get_cached_credsAccountTypeUSERget_dnget_admin_credsget_lpr   r  r!  get_passwordr   ro   host_dns_namer]   
get_domainrb   get_workstationr   r  r*   r3   )r  
connect_fnr~   user_dnr   r   r   rx   our_pipe
their_piperesults              r6   rx  zLockoutTests.do_logon  su   **8H8M5: + < <
##%%**,,[[]] 2*57 7 7e$$$**,,  $4000* 	D!!! A%*=*=*?*? A A%*%8%8%:%:%/%<%<%>%>%-#-#8#8#:#:","6"6"8"8(2(B(B(D(D"7||- - - 	!1!9:::::r5   FTc                    |                      | j        j        d          }|                                }|                                 }|                                 }t          |                                ||          }|                     |           |	                                }	|s
|	d d         }	t          j        d          5 }
t          d          \  }}|
                    ||d	|                                 |                                |                                |	|                                |                                |                                t'          |          

  
        }|                     ||           |                                 	 d                    d          }d                    d          }t/          j        |          }t/          j        |t.          j        d          |d<   t/          j        |t.          j        d          |d<   t9          | j                  D ]}	 |                    |           |                     d           .# t.          j         $ rJ}|j!        \  }}| "                    |t.          j#                   | "                    d|           Y d }~d }~ww xY w|$                    |t.          j%        dg          }| "                    dtM          |                     tO          |d         (                    dd                    }| )                    |tT          j+        z             |,                    d           t[          j.        d           |r`t/          j        |          }| /                                }t/          j        |t.          j0        d          |d<   |                    |           n## tb          $ r |2                                  w xY w|3                                 |4                    d          }| "                    |tj          j6                   d d d            d S # 1 swxY w Y   d S )NFr  r  r+   max_workersTr  r  r  z"Secret007"r   z"Secret008"r   r   r   zpwd change should have failedzOFailed to obtain remote address for the LDAP client while changing the password"msDS-User-Account-Control-Computedr  r   r  r=   sAMAccountNamer>   r?   )7r  r  r  r  r  r  r   r  r!  r  r   ProcessPoolExecutorr   submitr  r]   r  rb   r  r   r&  transaction_startr   r   r   r   r   r   ranger  r   r   r   r   r  ERR_OPERATIONS_ERRORr  r  r   r   r  
assertTruer   
UF_LOCKOUTro   timesleepget_new_usernamer   	Exceptiontransaction_canceltransaction_commitr  r*   r1   )r  r  r?  rH  r~   r  r   r   r   rx   executorr  r  connect_futurer   r   r   ir   r   r   r  uacnew_usernamer  s                            r6   r)  z#LockoutTests.do_lockout_transaction  s    **8H8M5: + < <
##%%**,,[[]] 2*57 7 7e$$$**,, 	%}H (Q777 Z	B8#'t#4#4#4 Hj%__5e113355,,..#0022!!,,.. **,,&6688w<< - 
! 
!N .999 ##%%%A -33J??,33J??k'**-k.1.A.:< <C -k.1.>.:< <C t566 C CACS))) 		"ABBBB < 	/ 	/ 	/$'H	T ((c.FGGG(( *4 *./ / / / / / / /	/ ll3>?@ # B B   CHH---#a&**%I)* % , , - -do 5666 ##D))) 
1 	& +g..C#'#8#8#:#:L,/,>$,(-* -*C() LL%%%   ((***
 $$&&&#**1*55FV%5%@AAAuZ	B Z	B Z	B Z	B Z	B Z	B Z	B Z	B Z	B Z	B Z	B Z	B Z	B Z	B Z	B Z	B Z	B Z	BsY   CQ &BO&I,O&,K;A K ;O& KD O&%Q & PAQ  Q$'Q$c                    |                      | j        j        d          }|                                }|                                 }|                                 }t          |                                ||          }|                     |           t          j
        d          5 }t          d          \  }	}
|                    ||
d|                                 |                                |                                |                                d d	         |                                |                                |                                t'          |          

  
        }|                     |	|           |                                 	 |	                    d           t/          j        d           t3          j        |          }t7          t/          j                              }t9          |          }t3          j        dt2          j        d          |d<   t3          j        t'          |          t2          j        d          |d<   |r7|                                 }t3          j        |t2          j        d          |d<   |                     |           |!                    |t2          j"        dg          }| #                    dtI          |                     t7          |d         %                    dd                    }| &                    |tN          j(        z             n## tR          $ r |*                                  w xY w|+                                 |,                    d          }| #                    |tZ          j.        |           d d d            n# 1 swxY w Y   |!                    |t2          j"        dg          }| #                    dtI          |                     t7          |d         %                    dd                    }| #                    d|           d S )NFr  r  r+   r  Tr  r  r  r  r=   r   badPwdCountbadPasswordTimer  r  r  r   r  r>   r?   r,   )/r  r  r  r  r  r  r   r  r!  r   r  r   r  r  r]   r  r  rb   r  r   r&  r  ro   r  r  r   r   r   r   r   r   r  r   r  r  r  r   r  assertFalser   r  r  r  r  r  r*   r2   )r  r  r?  r~   r  r   r   r   r  r  r  r  r   nowbad_pwd_timer  r  r  r  bad_pwd_counts                       r6   rU  z)LockoutTests.do_bad_pwd_count_transactionH  s   **8H8M5: + < <
##%%**,,[[]] 2*57 7 7e$$$ (Q777 C	N8#'t#4#4#4 Hj%__5e113355,,..#0022#00223B37!,,.. **,,&6688w<< - 
! 
!N .999 ##%%%*##D))) 
1 k'**$)++&&*3//%(%7(!&# &#M" *-);%%(%*' *'%&  * $(#8#8#:#:L,/,>$,(-* -*C() S!!! ll3>?@ # B B   CHH---#a&**%I)* % , , - -  t!67777   ((***
 $$&&&#**1*55FV%5%DfMMMGC	N C	N C	N C	N C	N C	N C	N C	N C	N C	N C	N C	N C	N C	N C	NN ll7!$"/  2 2 	CHH%%%CFJJ}!J<<==M*****s-   ,C3N: FM ?N:  M  AN::N>N>c                    |                      | j        j        d          }|                                }|                                 }|                                 }t          |                                ||          }|                     |           | j	        dz   }t          j        |          5 }g }	g }
t          |          D ]}t          d          \  }}|
                    |           |                    ||d|                                 |                                |                                |                                d d	         |                                |                                |                                t-          |          

  
        }|	                    |           |                     ||           |                                 	 |
D ]}|                    d           t5          j        d           n## t8          $ r |                                  w xY w|                                 d}d}t?          |	          D ]b\  }}|                     d          }|tB          j"        k    r|dz  }1|tB          j#        k    r|dz  }G| $                    d| d|            c| %                    || j	                   | %                    ||| j	        z
             d d d            n# 1 swxY w Y   |&                    |tN          j(        ddg          }| %                    dtS          |                     tU          |d         +                    dd                    }| %                    | j	        |           tU          |d         +                    dd                    }| ,                    |tZ          j.        z             d S )NFr  r  r+   r  Tr  r  r  r  r=   r   r>   r?   zprocess z gave an unexpected result r  r  r  r  )/r  r  r  r  r  r  r   r  r!  r  r   r  r  r   appendr  r  r]   r  r  rb   r  r   r&  r  ro   r  r  r  r  r  	enumerater  r*   r1   r2   r   r  r  r   r  r   r   r  r  r   r  )r  r  r~   r  r   r   r   num_attemptsr  connect_futures	our_pipesr  r  r  r  lockoutswrong_passwordsr  r  r  r  s                        r6   ri  zLockoutTests.do_lockout_race  sz   **8H8M5: + < <
##%%**,,[[]] 2*57 7 7e$$$
 -1(\BBB 5	Nh OI<(( > >'+4'8'8'8$*  ***!)#9%"5"5"7"799"0022'4466'4466ss;%0022$..00 * : : < <7|| "1 
"% 
"%  &&~666 ##Hn==== ##%%%
 ) . .H''---- 
1   ((***
 $$&&&HO%.%?%? + +!>'..q.99-888MHH/>>>#q(OOII * * *!'* * + + + + _d.DEEEX|d6L'LMMMk5	N 5	N 5	N 5	N 5	N 5	N 5	N 5	N 5	N 5	N 5	N 5	N 5	N 5	N 5	Nr ll3> 79  : : 	CHH%%%CFJJ}!J<<==/???#a&**A!"  $ $ % %do-.....s,   6D5L,.HL H;;CLLLc                 n   |                      | j        j        d          }|                                }|                                 }|                                 }t          |                                ||          }|                     |           |	                                }t          j        d          5 }t          d          \  }	}
|                    ||
d|                                 |                                |                                ||                                |                                |                                t'          |          	
  
        }|                     |	|           |                                 	 |	                    d
           |                    d          }|                     |t2          j                   n## t6          $ r |                                  w xY w|                                 d d d            d S # 1 swxY w Y   d S )NFr  r  r+   r  Tr  r  r  r=   r>   r?   )r  r  r  r  r  r  r   r  r!  r  r   r  r   r  r  r]   r  rb   r  r   r&  r  ro   r  r  r*   r3   r  r  r  )r  r  r~   r  r   r   r   rx   r  r  r  r  r  s                r6   ru  z)LockoutTests.do_logon_without_transaction	  sw   **8H8M5: + < <
##%%**,,[[]] 2*57 7 7e$$$**,, (Q777  	'8#'t#4#4#4 Hj%__5e113355,,..#0022!!,,.. **,,&6688w<< - 
! 
!N .999 ##%%%
##D))) (..q.99  )9)ABBBB   ((***
 $$&&&A 	'  	'  	'  	'  	'  	'  	'  	'  	'  	'  	'  	'  	'  	'  	'  	'  	'  	's,    CH*AG&%H*& HH**H.1H.)FT)F),r.   r/   r0   rV   r!  r&  r+  r.  r2  r9  r<  r@  rB  rD  rI  rK  rN  rP  rR  rV  rY  r\  r^  ra  rc  re  rg  rj  rl  ro  rq  rs  rv  ry  r{  r~  r  r  rx  r)  rU  ri  ru  __classcell__)r  s   @r6   r   r     s       >! >! >! >! >!@> > >7 7 71 1 12 2 22 2 26 6 6
5 5 5> > >? ? ?B B BC C CD D DD D DH H H
G G G7 7 78 8 88 8 8< < <
; ; ;D D DE E EH H H* * *+ + ++ + +/ / /
. . .8 8 8@ @ @$ $ $$ $ $( ( (
' ' '!; !; !;R ',*.oB oB oB oBn\+ \+ \+ \+DV/ V/ V/~1' 1' 1' 1' 1' 1' 1'r5   r   __main__)T)Nsysospathinsertenviron
concurrentr   enumr   	functoolsr   multiprocessingr   r  cryptography.hazmat.backendsr	   +cryptography.hazmat.primitives.ciphers.baser
   &cryptography.hazmat.primitives.ciphersr   r   sambar   r   r   r   r   r   r   samba.credentialsr   r   samba.cryptor   r   r   r   samba.dcerpcr   r   samba.samdbr   samba.testsr   r   r   samba.tests.krb5.as_req_testsr   samba.tests.krb5r    samba.tests.krb5.kdc_base_testr!   samba.tests.krb5.raw_testcaser"   samba.tests.krb5.rfc4120_pyasn1testskrb5rfc4120_pyasn1re   "samba.tests.krb5.rfc4120_constantsr#   r$   r%   r&   r'   r(   r
  r  r*   r   r   r   r   r   r   r.   unittestmainr4   r5   r6   <module>r     s  ( 


 				 <      !$
                                 8 8 8 8 8 8 > > > > > > = = = = = = 



                  C B B B B B B B            # " " " " " " "       F F F F F F F F F F 7 7 7 7 7 7 $ $ $ $ $ $ 6 6 6 6 6 6 = = = = = = 3 3 3 3 3 3 3 3 3 3 3 3                     t    "j? j? j? j?Z-( -( -(`W( W( W(tR( R( R(j;( ;( ;(|]	' ]	' ]	' ]	' ]	'; ]	' ]	' ]	'@ zNOOOHMOOOOO	 r5   