a
    W×aL  ć                   @   s¾   d Z ddlZddlZddlZddlmZ ddlmZ ddl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mZ ddlmZ dZG dd deeZdS )z.
    auth logging tests that exercise winbind
é    N)Śsystem_session)ŚCredentials)Ś
get_stringŚ	get_bytes)ŚAUTH_EVENT_NAMEŚMSG_AUTH_LOG)ŚUF_NORMAL_ACCOUNT)Ś	Messaging)ŚLoadParm)ŚSamDB)Śdelete_forceŚBlackboxProcessErrorŚBlackboxTestCase)ŚAuthLogTestBaseZWBALUc                       s`   e Zd Zdd Zdd Z fddZ fddZd	d
 Zdd Zdd Z	dd Z
dd Z  ZS )ŚAuthLogTestsWinbindc                    s  t  ” \}}t  ” }|dkr |S t jd }t }| |” dd } fdd}td|d}| t” |d f}	|j	|	t
d	 g  _t ” }
t ” |
 d
k r¤| d” qtt| j}|rŲ|D ]}t  |t|d ” q¼nt  |td” t  |” |j|	t
d	 | t” t  d” d S )Nr   ZDC_SERVERCONFFILEc                 S   s2   | d u rdS t  | ”}|d dko0|d d dkS )NFŚtypeŚAuthenticationŚserviceDescriptionŚSamLogon)ŚjsonŚloads)ŚmŚmsg© r   ś>/usr/lib/python3/dist-packages/samba/tests/auth_log_winbind.pyŚis_sam_logon>   s    
žz4AuthLogTestsWinbind.dc_watcher.<locals>.is_sam_logonc                    s   t |  j |” d S ©N)ŚprintŚdc_msgsŚappend)ŚcontextZmsgTypeŚsrcŚmessage©Śselfr   r   Śmessage_handlerH   s    z7AuthLogTestsWinbind.dc_watcher.<locals>.message_handler)é   )Ślp_ctx)Zmsg_typer&   g¹?Ś
zNone
)ŚosŚpipeŚforkŚenvironr
   Śloadr	   Zirpc_add_namer   Śregisterr   r   ŚtimeZ	loop_onceŚlistŚfilterŚwriter   ŚcloseZ
deregisterZirpc_remove_nameŚ_exit)r$   Zr1Zw1ŚpidZconfig_filer'   r   r%   Zmsg_ctxZmsg_handler_and_contextZ
start_timeZmsgsr   r   r#   r   Ś
dc_watcher.   s4    





zAuthLogTestsWinbind.dc_watcherc                 C   s   dd }t t||S )Nc                 S   s8   | d dkr0| d d dkr0| d d dkr0dS dS d S )	Nr   ZAuthorizationr   zDCE/RPCZauthTypeZncacn_npFTr   ©r   r   r   r   Śkeepp   s    ’žz1AuthLogTestsWinbind.filter_messages.<locals>.keep)r0   r1   )r$   Śmessagesr8   r   r   r   Śfilter_messageso   s    z#AuthLogTestsWinbind.filter_messagesc                    sz   t t|  ”  tjd | _tjd | _tjd | _|  ” | _	|  
” | _t | _td | j”| j| j| j	d| _|  ”  d S )NZDOMAINZSERVERZ	DC_SERVERz
ldap://{0})ZurlZsession_infoŚcredentialsŚlp)Śsuperr   ŚsetUpr)   r,   ŚdomainZhostZdcŚget_loadparmr<   Zget_credentialsr;   r   Zsessionr   ŚformatŚldbŚcreate_user_accountr#   ©Ś	__class__r   r   r>   z   s    


üzAuthLogTestsWinbind.setUpc                    s    t t|  ”  t| j| j d S r   )r=   r   ŚtearDownr   rB   Śuser_dnr#   rD   r   r   rF      s    zAuthLogTestsWinbind.tearDownc                 C   s²   |   ” | _t| _d| j| j ” f | _t| j| j dt| j  	d”}| j 
| jdd| j tt|d” t | _| j |  ” ” | j | j” | j | j” | j | j” d S )Nzcn=%s,%sz"%s"z	utf-16-leŚuserz%s)ZdnZobjectclassZsAMAccountNameZuserAccountControlZ
unicodePwd)Zrandom_passwordZ	user_passŚ	USER_NAMEZ	user_namerB   Z	domain_dnrG   r   r   ŚencodeŚaddŚstrr   r   Z
user_credsZguessr@   Zset_passwordZset_usernameZset_workstationZserver)r$   Zutf16pwr   r   r   rC      s"    
ūz'AuthLogTestsWinbind.create_user_accountc                 C   sĪ   t  |d”}t|}t|dks(|dkr2|  d” d }| d”D ]*}t t|”}||d d krf qld }q@|d u r~|  d” |  d|d ” |  ||d d ” |  d	|d d
 ” |  ||d d ” d S )Ni    r   ŚNonez'No Domain server authentication messager(   r   ŚlogonIdr   r   r   ŚauthDescription)	r)   Śreadr   ŚlenZfailŚsplitr   r   ŚassertEqual)r$   r*   Ślogon_idZdescriptionr9   r   r"   r   r   r   Ś"check_domain_server_authentication«   s(    


’
’z6AuthLogTestsWinbind.check_domain_server_authenticationc                 C   s  dd }|   ” }d}| jd || j ” | j ” ”dd |  |”}|  |”}d}|  |t	|d” |d	 }|  d
|d ” |  
|d
 d  d”” |  d|d
 d ” |  d|d
 d ” |  d|d
 d ” |  d|d
 d ” |  d|d
 d ” |  d|d
 d ” |  | j|d
 d ” |  d|d
 d ” |  | j ” |d
 d ” |  | j ” |d
 d ” |  
|d
 d d u ” |d
 d }|  ||d” d S ) Nc                 S   sB   d}| d dko@| d d dko@| d d d uo@| d d   |”S )NzPAM_AUTH, ntlm_authr   r   r   ŚwinbindrO   ©Ś
startswith©r   ZDESCr   r   r   ŚisLastExpectedMessageŹ   s    ’žüzAAuthLogTestsWinbind.test_ntlm_auth.<locals>.isLastExpectedMessagezbin/ntlm_authz!{0} --username={1} --password={2}śntlm_auth failedr7   r&   ś/Did not receive the expected number of messagesr   r   r   rO   zPAM_AUTH, ntlm_auth,rV   r   Ś	PlaintextŚpasswordTypeé   Ś	logonTypeé  ŚeventIdśunix:ŚremoteAddressŚlocalAddressŚclientDomainŚNT_STATUS_OKŚstatusŚclientAccountZworkstationrN   Śinteractive)r6   Ś	check_runrA   r;   Śget_usernameŚget_passwordŚwaitForMessagesr:   rS   rQ   Ś
assertTruerX   r?   Ś
get_domainrU   ©r$   rZ   r*   ZCOMMANDr9   Zexpected_messagesr   rT   r   r   r   Śtest_ntlm_authČ   sV    żü

ž’’
’
’
’z"AuthLogTestsWinbind.test_ntlm_authc                 C   s  dd }|   ” }d}z(| jd || j ” | j ” ”dd W n tyN   Y n0 |  |”}|  |”}d}|  	|t
|d” |d	 }|  	d
|d ” |  |d
 d  d”” |  	d|d
 d ” |  	d|d
 d ” |  	d|d
 d ” |  	d|d
 d ” |  	d|d
 d ” |  	d|d
 d ” |  	d|d
 d ” |  	d|d
 d ” |  	| j ” |d
 d ” |  	d|d
 d ” |d
 d }|d }|  	d
|d ” |  |d
 d  d ”” |  	d|d
 d ” |  	||d
 d ” |  	d!|d
 d ” |  	d|d
 d ” |  	d|d
 d ” |  	d|d
 d ” |  	d|d
 d ” |  	d|d
 d ” |  	| j ” |d
 d ” |  	d|d
 d ” |d }|  	d
|d ” |  |d
 d  d"”” |  	d|d
 d ” |  	d|d
 d ” |  	d#|d
 d ” |  	d$|d
 d ” |  	d|d
 d ” |  	d|d
 d ” |  	d|d
 d ” |  	| j ” |d
 d ” |  	| j ” |d
 d ” |d
 d }|  ||d%” d S )&Nc                 S   sB   d}| d dko@| d d dko@| d d d uo@| d d   |”S ©NzNTLM_AUTH, wbinfor   r   r   rV   rO   rW   rY   r   r   r   rZ      s    ’žüz>AuthLogTestsWinbind.test_wbinfo.<locals>.isLastExpectedMessageś
bin/wbinfoz{0} -a {1}%{2}r[   r7   é   r\   r   r   r   rO   śPASSDB, wbinfo,rV   r   é   r`   é  rb   rc   rd   re   Ś rf   ŚNT_STATUS_NO_SUCH_USERrh   ŚNTLMv2r^   ri   rN   r&   ŚPAM_AUTHr_   śNTLM_AUTH, wbinfo,rg   ra   Śnetwork©r6   rk   rA   r;   rl   rm   r   rn   r:   rS   rQ   ro   rX   rp   rU   rq   r   r   r   Śtest_wbinfo’   sŖ    żü


ž’
’
’
’’
’
’
’’
’
’
’zAuthLogTestsWinbind.test_wbinfoc                 C   s¤  dd }|   ” }d}z(| jd || j ” | j ” ”dd W n tyN   Y n0 |  |”}|  |”}d}|  	|t
|d” |d	 }|  	d
|d ” |  |d
 d  d”” |  	d|d
 d ” |  	d|d
 d ” |  	d|d
 d ” |  	d|d
 d ” |  	d|d
 d ” |  	d|d
 d ” |  	d|d
 d ” |  	d|d
 d ” |  	| j ” |d
 d ” |  	d|d
 d ” |d
 d }|d }|  	d
|d ” |  |d
 d  d ”” |  	d|d
 d ” |  	||d
 d ” |  	d!|d
 d ” |  	d"|d
 d ” |  	d|d
 d ” |  	d|d
 d ” |  	d|d
 d ” |  	d|d
 d ” |  	d|d
 d ” |  	| j ” |d
 d ” |  	d|d
 d ” |d }|  	d
|d ” |  |d
 d  d#”” |  	d|d
 d ” |  	d$|d
 d ” |  	d|d
 d ” |  	d%|d
 d ” |  	d&|d
 d ” |  	d|d
 d ” |  	d|d
 d ” |  	| j ” |d
 d ” |  	| j ” |d
 d ” |d
 d }|  ||d'” d S )(Nc                 S   sB   d}| d dko@| d d dko@| d d d uo@| d d   |”S rs   rW   rY   r   r   r   rZ   f  s    ’žüzEAuthLogTestsWinbind.test_wbinfo_ntlmv1.<locals>.isLastExpectedMessagert   z{0} --ntlmv1 -a {1}%{2}r[   r7   ru   r\   r   r   r   rO   rv   rV   r   rw   r`   rx   rb   rc   rd   re   ry   rf   rz   rh   r{   r^   ri   rN   r&   r|   r]   r_   r}   ZNTLMv1rg   ra   r~   r   rq   r   r   r   Śtest_wbinfo_ntlmv1e  s°    żü


ž’
’
’
’’
’
’
’’
’
’
’
’z&AuthLogTestsWinbind.test_wbinfo_ntlmv1)Ś__name__Ś
__module__Ś__qualname__r6   r:   r>   rF   rC   rU   rr   r   r   Ś__classcell__r   r   rD   r   r   (   s   A7fr   )Ś__doc__r   r)   r/   Z
samba.authr   Zsamba.credentialsr   Zsamba.compatr   r   Zsamba.dcerpc.messagingr   r   Z
samba.dsdbr   Zsamba.messagingr	   Zsamba.paramr
   Zsamba.samdbr   Zsamba.testsr   r   r   Zsamba.tests.auth_log_baser   rI   r   r   r   r   r   Ś<module>   s   