a
    œcl_t  ã                   @   sú   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 e d¡Ze e¡Ze e¡ ejdddd	d
 e e¡Ze e¡ eeƒZe e¡ e ¡ \ZZejZeeƒdk rÊe ¡  e  d¡ ed  Zed ZG dd„ deƒZe	eed dS )é    N)Údns)ÚSubunitOptionsÚTestProgram)ÚDNSTKeyTestz*dns.py <server name> <server ip> [options]z	--timeoutÚintÚtimeoutz Specify timeout for DNS requests)ÚtypeÚdestÚhelpé   é   c                       sL   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	‡  Z
S )ÚTestDNSUpdatesc                    s   t | _t| _tt| ƒ ¡  d S )N)Úserver_nameZserverÚ	server_ipÚsuperr   ÚsetUp©Úself©Ú	__class__© ú6/usr/lib/python3/dist-packages/samba/tests/dns_tkey.pyr   5   s    zTestDNSUpdates.setUpc                 C   s   |   ¡  dS )ztest DNS TKEY handshakeN)Ú
tkey_transr   r   r   r   Ú	test_tkey:   s    zTestDNSUpdates.test_tkeyc                 C   sF   |   ¡ }|  || j¡\}}|  |tj¡ |  | j¡}|  |tj	¡ dS )z#test DNS update without TSIG recordN)
Úmake_update_requestÚdns_transaction_udpr   Úassert_dns_rcode_equalsr   ÚDNS_RCODE_REFUSEDÚsearch_recordÚ
newrecnameÚassert_rcode_equalsÚDNS_RCODE_NXDOMAIN)r   ÚpÚresponseÚ
response_pÚrcoder   r   r   Útest_update_wo_tsig?   s
    z"TestDNSUpdates.test_update_wo_tsigc                 C   s„   |   ¡  |  ¡ }|  |d¡ |  || j¡\}}|  |tj¡ |jd j	}|  
|jtj¡ |  
|jd¡ |  | j¡}|  |tj¡ dS )z5test DNS update with a TSIG record with a bad keynameZbadkeyr   N)r   r   Úsign_packetr   r   r   r   ÚDNS_RCODE_NOTAUTHÚ
additionalÚrdataÚassertEqualÚerrorZDNS_RCODE_BADKEYÚmac_sizer   r   r    r!   ©r   r"   r#   r$   Ztsig_recordr%   r   r   r   Útest_update_tsig_bad_keynameI   s    z+TestDNSUpdates.test_update_tsig_bad_keynamec                 C   s†   |   ¡  |  ¡ }|  || j¡ |  || j¡\}}|  |tj¡ |j	d j
}|  |jtj¡ |  |jd¡ |  | j¡}|  |tj¡ dS )z1test DNS update with a TSIG record with a bad MACr   N)r   r   Zbad_sign_packetÚkey_namer   r   r   r   r(   r)   r*   r+   r,   ZDNS_RCODE_BADSIGr-   r   r   r    r!   r.   r   r   r   Útest_update_tsig_bad_macY   s    z'TestDNSUpdates.test_update_tsig_bad_macc                 C   sÌ   |   ¡  |  ¡ }|  || j¡}|  || j¡\}}|  |tj¡ |  	|||¡ |  
| j¡}|  |tj¡ | jdd}|  || j¡}|  || j¡\}}|  |tj¡ |  	|||¡ |  
| j¡}|  |tj¡ dS )z(test DNS update with correct TSIG recordT©ÚdeleteN)r   r   r'   r0   r   r   r   r   ÚDNS_RCODE_OKÚverify_packetr   r   r    r!   )r   r"   Úmacr#   r$   r%   r   r   r   Útest_update_tsigi   s    zTestDNSUpdates.test_update_tsigc                 C   s.  d| j  }tj}d}|  tj¡}|  |  ¡ tjtj¡}g }| |¡ |  	||¡ g }t 
¡ }||_tj|_tj|_d|_d|_| |¡ t 
¡ }||_tj|_tj|_d|_d|_| |¡ t 
¡ }||_tj|_||_||_d|_d|_| |¡ t|ƒ|_||_g }	t 
¡ }||_tj|_tj|_d|_d|_|	 |¡ t|	ƒ|_|	|_|  || j¡\}
}|  |
tj¡ |  ¡  |   || j!¡}|  || j¡\}
}|  |
tj"¡ |  #|
||¡ |  $|¡}|  %|tj"¡ | j&dd}|   || j!¡}|  || j¡\}
}|  |
tj"¡ |  #|
||¡ |  $| j ¡}|  %|tj'¡ dS )	zAtest DNS update with correct TSIG record (follow Windows pattern)Úwini°  r   iÿÿ  z
10.1.45.64Tr2   N)(r   r   ZDNS_QCLASS_INZmake_name_packetZDNS_OPCODE_UPDATEZmake_name_questionZget_dns_domainZDNS_QTYPE_SOAÚappendZfinish_name_packetZres_recÚnameZDNS_QTYPE_AZrr_typeZDNS_QCLASS_ANYÚrr_classÚttlZlengthZDNS_QTYPE_AAAAr*   ÚlenZnscountZnsrecsZDNS_QTYPE_CNAMEZDNS_QCLASS_NONEZancountZanswersr   r   r   r   r   r'   r0   r4   r5   r   r    r   r!   )r   r   r;   r<   r"   ÚqZ	questionsZupdatesÚrZprereqsr#   r$   r6   r%   r   r   r   Útest_update_tsig_windowsƒ   s|    

þ







z'TestDNSUpdates.test_update_tsig_windows)Ú__name__Ú
__module__Ú__qualname__r   r   r&   r/   r1   r7   r@   Ú__classcell__r   r   r   r   r   4   s   
r   )ÚmoduleÚopts) ÚsysZoptparseZsamba.getoptZgetoptZoptionsZsamba.dcerpcr   Zsamba.tests.subunitrunr   r   Zsamba.tests.dns_baser   ZOptionParserÚparserZSambaOptionsZ	sambaoptsZadd_option_groupZ
add_optionZCredentialsOptionsZcredoptsZsubunitoptsÚ
parse_argsrF   Úargsr   r=   Zprint_usageÚexitr   r   r   rA   r   r   r   r   Ú<module>   s2   



ÿ



 