a
    œcl_Ö  ã                   @   s‚   d dl 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
mZ d dlmZ d dlmZ ddd	„ZG d
d„ deƒZdS )é    N)ÚDNSTKeyTest)ÚDCJoinContext)ÚdrsuapiÚmiscÚdns)ÚCredentials)Úinterface_ips_v4Úsubunitc                 C   s(   ddl }| | ¡}| | tj¡¡ |S )zGet a logger object.r   N)ÚloggingZ	getLoggerZ
addHandlerZStreamHandlerÚsysÚstderr)Únamer
   Úlogger© r   ú2/usr/lib/python3/dist-packages/samba/tests/join.pyÚ
get_logger   s    
r   c                       s8   e Zd Z‡ fdd„Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )	ÚJoinTestCasec              
      sÔ   t j d¡| _t j d¡| _tt| ƒ ¡  t j ¡ | _	|  
¡ | _d| _tƒ }t| j| j|  ¡ | j| jd |dd| _t jjt jjB | j_| j jtjtjB O  _| jj| j_tj| j_| j ¡  d| j_| j  ¡  d S )NZSERVERZ	SERVER_IPZ	jointest1ZSAMBA_INTERNAL)ÚserverÚcredsÚlpÚnetbios_nameZ	targetdirZdomainr   Zdns_backendT)!ÚsambaZtestsZenv_get_var_valuer   Ú	server_ipÚsuperr   ÚsetUpZenv_loadparmr   Zget_credentialsr   r   r   r   Zget_loadparmÚtempdirÚjoin_ctxZdsdbZUF_SERVER_TRUST_ACCOUNTZUF_TRUSTED_FOR_DELEGATIONZuserAccountControlZreplica_flagsr   ZDRSUAPI_DRS_WRIT_REPZ!DRSUAPI_DRS_FULL_SYNC_IN_PROGRESSZdomain_replica_flagsr   ZSEC_CHAN_BDCZsecure_channel_typeÚcleanup_old_joinZforce_all_ipsZdo_join)Úselfr   ©Ú	__class__r   r   r   '   s2    

ûÿÿ

zJoinTestCase.setUpc                    s¼   z| j j}W n ty"   d }Y n0 |d urœt |j¡ t |j¡ t tj 	| j
d¡¡ t tj 	| j
d¡¡ t tj 	| j
d¡¡ t tj 	| j
d¡¡ | j jdd tt| ƒ ¡  d S )NÚetczmsg.lockz	names.tdbzbind-dnsT)Zforce)r   ÚpathsÚAttributeErrorÚshutilZrmtreeZprivate_dirZ	state_dirÚosÚpathÚjoinr   Úunlinkr   r   r   ÚtearDown)r   r"   r   r   r   r)   D   s    
zJoinTestCase.tearDownc                 C   s^  |   tj¡}g }| jj}|  |tjtj¡}| |¡ t	| j
dd}|  ||¡ | j|| jd\}}|  |tj¡ |  |tj¡ |  |jt|ƒ¡ g }d| jj| jjf }|  |tjtj¡}| |¡ |  ||¡ | j|| jd\}}|  |tj¡ |  |tj¡ |  |jdt|ƒ ¡ |  |jd jtj¡ |  |jd j| jj¡ |  |jd jtj¡ dS )z9create a query packet containing one query record via TCPT©Zall_interfaces©Zhostz%s._msdcs.%sé   r   N)Úmake_name_packetr   ÚDNS_OPCODE_QUERYr   ÚdnshostnameÚmake_name_questionÚDNS_QTYPE_AÚDNS_QCLASS_INÚappendr   r   Úfinish_name_packetÚdns_transaction_tcpr   Úassert_dns_rcode_equalsÚDNS_RCODE_OKÚassert_dns_opcode_equalsÚassertEqualÚancountÚlenZ	ntds_guidZ	dnsforestZanswersÚrr_typeZDNS_QTYPE_CNAMEÚrdata)r   ÚpÚ	questionsr   ÚqÚIPsÚresponseÚresponse_packetr   r   r   Útest_join_makes_recordsV   s.    

z$JoinTestCase.test_join_makes_recordsc                 C   sÚ  t ƒ }| | jj¡ | | jj¡ | j|d |  tj¡}|  	| jj
tjtj¡}g }| |¡ |  ||¡ g }t| jdd}|dd … D ]‚}d|v rÈt ¡ }| jj|_tj|_tj|_d|_d|_|}	n2t ¡ }| jj|_tj|_tj|_d|_d|_|}	|	|_| |¡ qˆt|ƒ|_||_|  || j¡}
|   || j!¡\}}|  "|tj#¡ |  $|||
¡ |  tj%¡}g }| jj}|  	|tjtj¡}| |¡ |  ||¡ | j&|| j!d\}}|  "|tj#¡ |  '|tj%¡ |  (|j)d¡ d S )	N)r   Tr*   r,   ú:r   iÿÿ  r+   )*r   Zguessr   r   Zset_machine_accountZ
tkey_transr-   r   ZDNS_OPCODE_UPDATEr0   Z	dnsdomainZDNS_QTYPE_SOAr2   r3   r4   r   Zres_recr/   r   ZDNS_QTYPE_AAAAr<   ZDNS_QCLASS_NONEZrr_classZttlZlengthr1   r=   r;   ZnscountZnsrecsZsign_packetZkey_nameZdns_transaction_udpr   r6   r7   Zverify_packetr.   r5   r8   r9   r:   )r   Zdc_credsr>   r@   r?   ZupdatesrA   ZIPÚrr=   ZmacrB   Z
response_pr   rC   r   r   r   Útest_join_records_can_updatew   s`    
þ




z)JoinTestCase.test_join_records_can_update)Ú__name__Ú
__module__Ú__qualname__r   r)   rD   rG   Ú__classcell__r   r   r   r   r   &   s   !r   )r	   )r   r   r$   r%   Zsamba.tests.dns_baser   Z
samba.joinr   Zsamba.dcerpcr   r   r   Zsamba.credentialsr   Zsamba.provisionr   r   r   r   r   r   r   Ú<module>   s   
