a
    Wa                     @   s   d Z ddlZddlZddlmZ ddlZddlmZm	Z	m
Z
 ddlmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZ ddlmZ ddlmZmZ G dd dejj j!Z"dS )z5
    Tests auth logging tests that exercise SamLogon
    N)SamDB)CredentialsDONT_USE_KERBEROSCLI_CRED_NTLMv2_AUTH)ntlmsspnetlogon)AS_SYSTEM_MAGIC_PATH_TOKEN)ndr_pack)system_session)delete_force)UF_WORKSTATION_TRUST_ACCOUNTUF_PASSWD_NOTREQD)SEC_CHAN_WKSTA)	text_typeEVT_ID_SUCCESSFUL_LOGONEVT_LOGON_NETWORKc                       s@   e Zd Z fddZ fddZdd Zdd Zd	d
 Z  ZS )AuthLogTestsSamLogonc                    st   t t|   tj | _t | _t	| j| jd| _
tjd | _d| _d| _t| _| j
 | _d| j| jf | _d S )N)Zsession_infolpZDOMAINZSamLogonTestZ
abcdefghijzcn=%s,cn=users,%s)superr   setUpsambatestsZenv_loadparmr   r
   Zsessionr   ldbosenvirondomainnetbios_namemachinepassr   ZremoteAddressZ	domain_dnZbase_dnsamlogon_dnself	__class__ ?/usr/lib/python3/dist-packages/samba/tests/auth_log_samlogon.pyr   /   s    
zAuthLogTestsSamLogon.setUpc                    s    t t|   t| j| j d S )N)r   r   tearDownr   r   r   r    r"   r$   r%   r&   ?   s    zAuthLogTestsSamLogon.tearDownc                 C   s  dd }|rd| }nd}t d| j d d}| j| jdd| j ttt	B |d	 t
 }||   |t || j || jd
  td| |  |}d}t }	d|	_t }
tj|
_| j|
_t }tj|_| j|_t }tj|_|
||g|	_t|	}|jt||d}d}tj }t!j"j# }dd |D |_$t% |_&t'|d |j&_(dd |d D |j&_)t!j"j* |_+|, \}}||j+j-_.||j+j/_.|0 |j+j1_.t!j"jj2}|3t4j5d |0 ||||}|\}}}| 6||}|| d S )Nc                 S   s\   | d dkoZ| d d dkoZ| d d dkoZ| d d dkoZ| d d	 t koZ| d d
 tkS )NtypeZAuthenticationserviceDescriptionZSamLogonZauthDescriptionZnetworkZpasswordTypeZNTLMv2ZeventIdZ	logonTyper   )msgr$   r$   r%   isLastExpectedMessageE   s    
zBAuthLogTestsSamLogon._test_samlogon.<locals>.isLastExpectedMessagez[schannel,%s]z
[schannel]"z	utf-16-leZcomputerz%s$)ZdnZobjectclassZsAMAccountNameZuserAccountControlZ
unicodePwd$z
ncalrpc:%ss   abcdefgh   )flags	challengetarget_infor   c                 S   s"   g | ]}t |tr|nt|qS r$   
isinstanceintord.0xr$   r$   r%   
<listcomp>   s   z7AuthLogTestsSamLogon._test_samlogon.<locals>.<listcomp>Znt_responsec                 S   s"   g | ]}t |tr|nt|qS r$   r1   r5   r$   r$   r%   r8      s   ZSERVER)7r   r   encoder   addr   r   strr   r   r   ZguessZget_loadparmZset_secure_channel_typer   Zset_passwordZset_usernamer   r   ZAV_PAIR_LISTcountZAV_PAIRZMsvAvNbDomainNameZAvIdr   ZValueZMsvAvNbComputerNameZMsvAvEOLZpairr	   Zget_ntlm_responser   Z$NetlogonNetworkTransitiveInformationr   ZdcerpcZnetr_NetworkInfor/   Znetr_ChallengeResponsentlenZlengthdataZnetr_IdentityInfoZidentity_infoZget_ntlm_username_domainZdomain_namestringZaccount_nameZget_workstationZworkstationZNetlogonValidationSamInfo4Znetr_LogonSamLogonExr   r   ZwaitForMessages)r!   ZbindingcredsZcheckFunctionr*   Zutf16pwZmachine_credsZnetlogon_connr/   r0   Z
domainnameZcomputernameZeolZtarget_info_blobZresponseZ
netr_flagsZlogon_levelZlogonZusernamer   Zvalidation_levelresultZ
validationZauthoritativeZnetr_flags_outmessagesr$   r$   r%   _test_samlogonC   s    










z#AuthLogTestsSamLogon._test_samlogonc                 C   s   |  |}d}| |t|d |d }| d|d  | d|d d  | d|d d	  | d
|d d  | | |d d  d S )N   z/Did not receive the expected number of messagesr   ZAuthorizationr'   zDCE/RPCr(   ZncalrpcZauthTypeZNONEZtransportProtectionZ	sessionId)Zremove_netlogon_messagesZassertEqualr>   Z
assertTrueZis_guid)r!   rC   Zexpected_messagesr)   r$   r$   r%   samlogon_check   s    

z#AuthLogTestsSamLogon.samlogon_checkc              
   C   sb   | j |  td}z| d|| j W n6 ty\ } z| dt|  W Y d }~n
d }~0 0 d S )N)templateZkerberos_stateZSEALzUnexpected exception: )Zinsta_credsZget_credentialsr   rD   rF   	ExceptionZfailr;   )r!   rA   er$   r$   r%   test_ncalrpc_samlogon   s    
z*AuthLogTestsSamLogon.test_ncalrpc_samlogon)	__name__
__module____qualname__r   r&   rD   rF   rJ   __classcell__r$   r$   r"   r%   r   -   s
   [r   )#__doc__Zsamba.testsr   r   Zsamba.samdbr   Zsamba.tests.auth_log_baseZsamba.credentialsr   r   r   Zsamba.dcerpcr   r   Zsamba.dcerpc.dcerpcr   Z	samba.ndrr	   Z
samba.authr
   r   Z
samba.dsdbr   r   Zsamba.dcerpc.miscr   Zsamba.compatr   Zsamba.dcerpc.windows_event_idsr   r   r   Zauth_log_baseZAuthLogTestBaser   r$   r$   r$   r%   <module>   s   