
    bL                         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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)AuthLogTestBaseWBALUc                   R     e Zd Zd Zd Z fdZ fdZd Zd Zd Z	d Z
d	 Z xZS )
AuthLogTestsWinbindc                     t          j                    \  }}t          j                    }|dk    r|S t           j        d         }t	                      }|                    |           d } fd}t          d|          }|                    t                     |d f}	|	                    |	t                     g  _        t          j                    }
t          j                    |
z
  dk     r/|                    d	           t          j                    |
z
  dk     /t          t          | j                            }|r+|D ]'}t          j        |t#          |d
z                        (n"t          j        |t#          d                     t          j        |           |                    |	t                     |                    t                     t          j        d           d S )Nr   DC_SERVERCONFFILEc                 n    | dS t          j        |           }|d         dk    o|d         d         dk    S )NFtypeAuthenticationserviceDescriptionSamLogon)jsonloads)mmsgs     >/usr/lib/python3/dist-packages/samba/tests/auth_log_winbind.pyis_sam_logonz4AuthLogTestsWinbind.dc_watcher.<locals>.is_sam_logon>   sF    yu*Q--CF// J$%&:;zIK    c                 Z    t          |           j                            |           d S N)printdc_msgsappend)contextmsgTypesrcmessageselfs       r   message_handlerz7AuthLogTestsWinbind.dc_watcher.<locals>.message_handlerH   s,     'NNNL(((((r!   )   )lp_ctx)msg_typer-   g?
zNone
)ospipeforkenvironr   loadr
   irpc_add_namer   registerr   r%   time	loop_oncelistfilterwriter   close
deregisterirpc_remove_name_exit)r+   r1w1pidconfig_filer.   r    r,   msg_ctxmsg_handler_and_context
start_timemsgsr   s   `            r   
dc_watcherzAuthLogTestsWinbind.dc_watcher.   s   799Rgii!88I j!45K   	K 	K 	K	) 	) 	) 	) 	) D000o...#2D"90<HHH
 Y[[
y{{Z'!++c""" y{{Z'!++ F<6677 	. 0 0Yqv..////0 HR8,,---
2\JJJ  111
r!   c                 B    d }t          t          ||                    S )Nc                 j    | d         dk    r&| d         d         dk    r| d         d         dk    rdS dS )	Nr   Authorizationr   zDCE/RPCauthTypencacn_npFT r   s    r   keepz1AuthLogTestsWinbind.filter_messages.<locals>.keepp   sF    F..O$%9:iGGO$Z0J>> 5tr!   )r:   r;   )r+   messagesrQ   s      r   filter_messagesz#AuthLogTestsWinbind.filter_messageso   s+    	 	 	 F4**+++r!   c                    t          t          |                                            t          j        d         | _        t          j        d         | _        t          j        d         | _        |                                 | _	        | 
                                | _        t                      | _        t          d                    | j                  | j        | j        | j	                  | _        |                                  d S )NDOMAINSERVER	DC_SERVERz
ldap://{0})urlsession_infocredentialslp)superr   setUpr1   r4   domainhostdcget_loadparmr[   get_credentialsrZ   r   sessionr   formatldbcreate_user_accountr+   	__class__s    r   r]   zAuthLogTestsWinbind.setUpz   s    !4((..000j*Jx(	*[)##%%//11%''##DG,,(w	  
 	  """""r!   c                     t          t          |                                            t          | j        | j                   d S r#   )r\   r   tearDownr   re   user_dnrg   s    r   rj   zAuthLogTestsWinbind.tearDown   s:    !4((11333TXt|,,,,,r!   c                    |                                  | _        t          | _        d| j        d| j                                        | _        t          | j        | j                   dt          | j                  z  	                    d          }| j        
                    | j        dd| j        z  t          t                    |d           t                      | _        | j                            |                                            | j                            | j                   | j                            | j                   | j                            | j                   d S )Nzcn=,z"%s"z	utf-16-leuserz%s)dnobjectclasssAMAccountNameuserAccountControl
unicodePwd)random_password	user_pass	USER_NAME	user_namere   	domain_dnrk   r   r   encodeaddstrr	   r   
user_credsguessra   set_passwordset_usernameset_workstationserver)r+   utf16pws     r   rf   z'AuthLogTestsWinbind.create_user_account   s9   --//"%)^^^TX5G5G5I5I5IJ 	TXt|,,,Jt~666>>{KK !DN2!$%6!7!7 " " 	# 	# 	# &--d//11222$$T^444$$T^444''44444r!   c                 ~   t          j        |d          }t          |          }t          |          dk    s|dk    r|                     d           d }|                    d          D ]9}t          j        t          |                    }||d         d         k    r nd }:||                     d           |                     d|d                    |                     ||d         d                    |                     d	|d         d
                    |                     ||d         d                    d S )Ni    r   Nonez'No Domain server authentication messager0   r   logonIdr   r   r   authDescription)	r1   readr   lenfailsplitr   r   assertEqual)r+   r2   logon_iddescriptionrR   r   r*   s          r   "check_domain_server_authenticationz6AuthLogTestsWinbind.check_domain_server_authentication   sc   74&&h''x==AV!3!3II?@@@ ~~d++ 	 	G*Z0011C3/0;;;CC;II?@@@
 	)3v;7773'7#8#CDDD./0DE	G 	G 	G./0AB	D 	D 	D 	D 	Dr!   c                    d }|                                  }d}|                     d                    || j                                        | j                                                  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                     d}| d         dk    oB| d         d         dk    o0| d         d         d uo | d         d                              |          S )NzPAM_AUTH, ntlm_authr   r   r   winbindr   
startswithr   DESCs     r   isLastExpectedMessagezAAuthLogTestsWinbind.test_ntlm_auth.<locals>.isLastExpectedMessage   ss    (DF// J$%&:;yHJ$%&78DJ $%&78CCDII	Kr!   zbin/ntlm_authz!{0} --username={1} --password={2}ntlm_auth failedrP   r-   /Did not receive the expected number of messagesr   r   r   r   zPAM_AUTH, ntlm_auth,r   r   	PlaintextpasswordType   	logonType  eventIdunix:remoteAddresslocalAddressclientDomainNT_STATUS_OKstatusclientAccountworkstationr   interactive)rI   	check_runrd   rZ   get_usernameget_passwordwaitForMessagesrS   r   r   
assertTruer   r^   
get_domainr   r+   r   r2   COMMANDrR   expected_messagesr   r   s           r   test_ntlm_authz"AuthLogTestsWinbind.test_ntlm_auth   s   	K 	K 	K   !:AA))++))++- - #	 	 	$ 	$ 	$ ''(=>>''11*h--K	M 	M 	M
 qk)3v;777 !"34??&( (	) 	) 	) 	./0DE	G 	G 	Gc*:&;N&KLLLC 01+>???s#34Y?@@@#&6"7"HIII#&6"7"GHHHc*:&;N&KLLL-=)>x)HIII)6688./@	B 	B 	B)4466./?	A 	A 	A,-m<DEEE'(3
 	//hNNNNNr!   c                    d }|                                  }d}	 |                     d                    || j                                        | j                                                  d           n# t          $ r Y nw xY w|                     |          }|                     |          }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                     d}| d         dk    oB| d         d         dk    o0| d         d         d uo | d         d                              |          S NzNTLM_AUTH, wbinfor   r   r   r   r   r   r   s     r   r   z>AuthLogTestsWinbind.test_wbinfo.<locals>.isLastExpectedMessage   s    &DF// J$%&:;yHJ$%&78DJ $%&78CCDII	Kr!   
bin/wbinfoz{0} -a {1}%{2}r   rP      r   r   r   r   r   PASSDB, wbinfo,r   r      r     r   r   r   r    r   NT_STATUS_NO_SUCH_USERr   NTLMv2r   r   r   r-   PAM_AUTHr   NTLM_AUTH, wbinfo,r   r   networkrI   r   rd   rZ   r   r   r   r   rS   r   r   r   r   r   r   r   s           r   test_wbinfozAuthLogTestsWinbind.test_wbinfo   s   	K 	K 	K   	NN+22 --// --//1 1 '	  ( ( ( (
 $ 	 	 	D	 ''(=>>''11*h--K	M 	M 	M qk)3v;777,-.?@KK  	  	  	 ./0DE	G 	G 	G 	C 01+>???s#34Y?@@@#&6"7"HIII#&6"7"GHHHS!12>BCCC1./9	; 	; 	;3'7#8#HIII)6688./@	B 	B 	BS!12>BCCC'(3 qk)3v;777,-.?@KK  	 	 	./0DE	G 	G 	G3'7#8#CDDDC 01+>???s#34Y?@@@#&6"7"HIII#&6"7"GHHHS!12>BCCC1./9	; 	; 	;)6688./@	B 	B 	BS!12>BCCC qk)3v;777,-.?@KK " " 	# 	# 	#./0DE	G 	G 	G 	C 01+>???-=)>x)HIIIs#34Y?@@@3'7#8#HIII#&6"7"HIII#&6"7"GHHH)6688./@	B 	B 	B)4466./?	A 	A 	A '(3
 	//h	JJJJJ   AA6 6
BBc                    d }|                                  }d}	 |                     d                    || j                                        | j                                                  d           n# t          $ r Y nw xY w|                     |          }|                     |          }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                     d}| d         dk    oB| d         d         dk    o0| d         d         d uo | d         d                              |          S r   r   r   s     r   r   zEAuthLogTestsWinbind.test_wbinfo_ntlmv1.<locals>.isLastExpectedMessagef  r   r!   r   z{0} --ntlmv1 -a {1}%{2}r   rP   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r-   r   r   r   r   NTLMv1r   r   r   r   r   s           r   test_wbinfo_ntlmv1z&AuthLogTestsWinbind.test_wbinfo_ntlmv1e  s   	K 	K 	K   	NN4;; --// --//1 1 '	  ( ( ( (
 $ 	 	 	D	 ''(=>>''11*h--K	M 	M 	M qk)3v;777,-.?@KK  	  	  	 ./0DE	G 	G 	G 	C 01+>???s#34Y?@@@#&6"7"HIII#&6"7"GHHHS!12>BCCC1./9	; 	; 	;3'7#8#HIII)6688./@	B 	B 	BS!12>BCCC'(3 qk)3v;777,-.?@KK  	 	 	./0DE	G 	G 	G3'7#8#CDDDc*:&;N&KLLLC 01+>???s#34Y?@@@#&6"7"HIII#&6"7"GHHHS!12>BCCC1./9	; 	; 	;)6688./@	B 	B 	BS!12>BCCC qk)3v;777,-.?@KK " " 	# 	# 	#./0DE	G 	G 	G./?	A 	A 	A 	C 01+>???-=)>x)HIIIs#34Y?@@@#&6"7"HIII#&6"7"GHHH)6688./@	B 	B 	B)4466./?	A 	A 	A '(3 	//h	JJJJJr   )__name__
__module____qualname__rI   rS   r]   rj   rf   r   r   r   r   __classcell__)rh   s   @r   r   r   (   s        ; ; ;B	, 	, 	,# # # # # - - - - -5 5 56D D D:5O 5O 5OndK dK dKLeK eK eK eK eK eK eKr!   r   )__doc__r   r1   r8   
samba.authr   samba.credentialsr   samba.commonr   r   samba.dcerpc.messagingr   r   
samba.dsdbr	   samba.messagingr
   samba.paramr   samba.samdbr   samba.testsr   r   r   samba.tests.auth_log_baser   rv   r   rO   r!   r   <module>r      sH  $   				  % % % % % % ) ) ) ) ) ) . . . . . . . . @ @ @ @ @ @ @ @ ( ( ( ( ( ( % % % % % %                   L L L L L L L L L L 5 5 5 5 5 5	bK bK bK bK bK/+; bK bK bK bK bKr!   