HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/samba/tests/__pycache__/dns_forwarder.cpython-310.pyc
o

�/a�S�@s�ddlZddlZddlZddlZddlZddlZddlZddlmZddlm	Z	ddl
mZddlm
Z
mZddlmZmZddlmZddlZddlZe�d�Ze�e�Ze�e�ejddd	d
d�e�e�Ze�e�ee�Ze�e�e� �\Z!Z"e�#�Z$e�%e$�Z&e!j'Z'e(e"�dkr�e�)�e�*d
�e"dZ+e"d
Z,e"dd�Z-e&�.e	j/�Gdd�de�Z0dd�Z1Gdd�de0�Z2ee3ed�dS)�N)�credentials)�TestCase)�dns�dnsp)�SubunitOptions�TestProgramzEdns_forwarder.py <server name> <server ip> (dns forwarder)+ [options]z	--timeout�int�timeoutz Specify timeout for DNS requests)�type�dest�help���c@speZdZedd�ee���D��Zdd�Zdd�Z	ddd	�Z
d
d�Zdd
�Zdd�Z
edefdd�Zdd�ZdS)�DNSTestccs&�|]\}}|�d�r||fVqdS)�
DNS_RCODE_N)�
startswith)�.0�k�v�r�;/usr/lib/python3/dist-packages/samba/tests/dns_forwarder.py�	<genexpr>Es�$zDNSTest.<genexpr>cCs2|jtj@}|�||d|j||j|f�dS)z$Helper function to check return codezExpected RCODE %s, got %sN)�	operationr�	DNS_RCODE�assertEqual�errcodes)�self�packet�rcode�	p_errcoderrr�assert_dns_rcode_equalsGs

�zDNSTest.assert_dns_rcode_equalscCs&|jtj@}|�||d||f�dS)zHelper function to check opcodezExpected OPCODE %s, got %sN)rr�
DNS_OPCODEr)rr�opcode�p_opcoderrr�assert_dns_opcode_equalsMs

�z DNSTest.assert_dns_opcode_equalsNcCs.t��}|durt�dd�|_||_g|_|S)z!Helper creating a dns.name_packetNr�)r�name_packet�random�randint�idr�	questions)rr#�qid�prrr�make_name_packetSszDNSTest.make_name_packetcCst|�|_||_dS)z$Helper to finalize a dns.name_packetN)�len�qdcountr+)rrr+rrr�finish_name_packet\s

zDNSTest.finish_name_packetcCst��}||_||_||_|S)z#Helper creating a dns.name_question)r�
name_question�name�
question_type�question_class)rr3�qtype�qclass�qrrr�make_name_questionas
zDNSTest.make_name_questioncCs|j����S)zHelper to get dns domain)�creds�	get_realm�lower�rrrr�get_dns_domainiszDNSTest.get_dns_domainFcCs�d}zIt�|�}|rt|�|��t�tjtjd�}|�|�|�|df�|�	|d�|�
dd�}|r;t|�|��t�tj
|�W|durK|��SS|durU|��ww)z#send a DNS query and read the replyNr�5i)�ndr�ndr_pack�print�hexdump�socket�AF_INET�
SOCK_DGRAM�
settimeout�connect�send�recv�
ndr_unpackrr'�close)rr�host�dumpr	�s�send_packet�recv_packetrrr�dns_transaction_udpms$



�
�zDNSTest.dns_transaction_udpc	Cs�|�tj�}|��}|�|tjtj�}|�||g�t��}||_	tj
|_tj|_d|_
d|_|}||_d|_|g|_|�|�}|�|tj�dS)Ni�r&r)r.r�DNS_OPCODE_UPDATEr>r9�
DNS_QTYPE_SOA�
DNS_QCLASS_INr1�res_recr3�DNS_QTYPE_CNAME�rr_type�rr_class�ttl�length�rdata�nscount�nsrecsrRr!�DNS_RCODE_OK)	r�key�valuer-r3�u�rr\�responserrr�make_cname_update�s 
zDNSTest.make_cname_update�N)�__name__�
__module__�__qualname__�dict�varsr�itemsrr!r%r.r1r9r>�	server_ipr	rRrerrrrrCs
	
�rcCs$t�tjtjd�}|�||f�|S)Nr)rDrErFrH)rM�portrOrrr�contact_real_server�srocs�eZdZ�fdd�Z�fdd�Zdd�Z�fdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Z�ZS)%�TestDnsForwardingcs tt|�j|i|��g|_dSrf)�superrp�__init__�subprocesses)r�args�kwargs��	__class__rrrr�s
zTestDnsForwarding.__init__cs*tt|���t|_t|_t|_t|_dSrf)rqrp�setUp�server_name�serverrm�lpr:r=rvrrrx�s

zTestDnsForwarding.setUpc	Cs�tj}t�|tj�t��d�|t	|�|g�}|j
�|�t�tj
tjd�}td�D]F}t�d�|�||f�z|�dd�Wn"tjya}z|jtjtjfvrWWYd}~q)WYd}~nd}~ww|jdurl|�d�|SdS)Nz2python/samba/tests/dns_forwarder_helpers/server.pyri,g�������?s	timeout 0z&Toy server has managed to die already!)�sys�
executable�
subprocess�Popen�os�path�join�samba�source_tree_topdir�strrs�appendrDrErF�range�time�sleeprHrI�error�errno�ECONNREFUSED�EHOSTUNREACH�
returncode�fail)	rrMrnr*�pythonr-rO�i�errr�start_toy_server�s0�
�
���

�z"TestDnsForwarding.start_toy_servercs&tt|���|jD]}|��q
dSrf)rqrp�tearDownrs�kill)rr-rvrrr��s

�zTestDnsForwarding.tearDowncCs�|�tddd�}|�dd�d}|�tj�}g}|�|tjtj�}|�	|�|�
||�t�|�}|�|d�|�
d�z|�dd�|�d�WdStjyVYdSw)	Nrr?�
forwarder1stimeout 1000000z an-address-that-will-not-resolver�z'DNS forwarder should have been inactive)r��dns_serversrIr.r�DNS_OPCODE_QUERYr9�
DNS_QTYPE_TXTrUr�r1r@rArGrJr�rDr	)rrOr3r-r+r8rPrrr�test_comatose_forwarder�s"


�z)TestDnsForwarding.test_comatose_forwardercCs�ttd�}d}|�tj�}g}|�|tjtj�}|�|�|�	||�t
�|�}|�	||�|jtj
O_t
�|�}|�|d�|�t�z|�dd�}t
�tj|�}|�|tj�|�|jd�WdStjyv|�dt�YdSw�Nr?�dsfsfds.dsfsdfsrr��#DNS server is too slow (timeout %s))rormr.rr�r9r�rUr�r1r@rAr�DNS_FLAG_RECURSION_DESIREDrIrGr	rJrKr'r!�DNS_RCODE_SERVFAILr�ancountrDr��r�adr3r-r+r8rP�datarrr�test_no_active_forwarder�s*




�z*TestDnsForwarding.test_no_active_forwardercCs�ttd�}d}|�tj�}g}|�|tjtj�}|�|�|�	||�t
�|�}|�	||�t
�|�}|�|d�|�
t�z|�dd�}t
�tj|�}|�|tj�|�|jd�WdStjyn|�dt�YdSwr�)rormr.rr�r9r�rUr�r1r@rArIrGr	rJrKr'r!�DNS_RCODE_NXDOMAINrr�rDr�r�rrr� test_no_flag_recursive_forwarder�s(




�z2TestDnsForwarding.test_no_flag_recursive_forwarderc	Cs�|�tddd�}ttd�}d}|�tj�}g}|�|tjtj	�}|�
|�|�||�|jtj
O_t�|�}|�|d�|�t�z!|�dd�}t�tj|�}|�|tj�|�d|jdj�WdStjyw|�dt�YdSw)Nrr?r�r�r�r�)r�r�rormr.rr�r9rWrUr�r1rr�r@rArIrGr	rJrKr'r!r_r�answersr\rDr��	rrOr�r3r-r+r8rPr�rrr�test_single_forwarders,

�


�z'TestDnsForwarding.test_single_forwardercCs�ttd�}d}|�tj�}g}|�|tjtj�}|�|�|�	||�|j
tjO_
t�
|�}|�|d�|�t�z|�dd�}t�tj|�}|�|tj�WdStjyd|�dt�YdSwr�)rormr.rr�r9rWrUr�r1rr�r@rArIrGr	rJrKr'r!r�rDr�r�rrr�(test_single_forwarder_not_actually_there+s(

�


�z:TestDnsForwarding.test_single_forwarder_not_actually_therec	Cs�|�tddd�}|�dd�ttd�}d}|�tj�}g}|�|tj	tj
�}|�|�|�||�|j
tjO_
t�|�}|�|d�|�t�z|�dd�}t�tj|�}|�|tj�WdStjys|�dt�YdSw)Nrr?r��
timeout 10000r�r�r�)r�r�rIrormr.rr�r9rWrUr�r1rr�r@rArGr	rJrKr'r!r�rDr�r�rrr�%test_single_forwarder_waiting_foreverBs,

�


�z7TestDnsForwarding.test_single_forwarder_waiting_foreverc
Cs&tt�dkrtd�dS|�tddd�}|�tddd�}|�dd�ttd�}d	}|�tj	�}g}|�
|tjtj�}|�
|�|�||�|jtjO_t�|�}|�|d�|�t�z!|�d
d�}	t�tj|	�}	|�|	tj�|�d|	jdj�WdStjy�|�dt�YdSw)Nrz+Ignoring test_double_forwarder_first_frozenrr?r�r�
forwarder2stimeout 1000r�r�r��r/r�rBr�rIrormr.rr�r9rWrUr�r1rr�r@rArGr	rJrKr'r!r_rr�r\rDr��
r�s1�s2r�r3r-r+r8rPr�rrr�"test_double_forwarder_first_frozen[s6

�


�z4TestDnsForwarding.test_double_forwarder_first_frozenc	Cstt�dkrtd�dS|�tddd�}ttd�}d}|�tj�}g}|�	|tj
tj�}|�|�|�
||�|jtjO_t�|�}|�|d�|�t�z!|�dd�}t�tj|�}|�|tj�|�d|jdj�WdStjy�|�d	t�YdSw)
Nrz)Ignoring test_double_forwarder_first_downrr?r�r�rr�r�)r/r�rBr�rormr.rr�r9rWrUr�r1rr�r@rArIrGr	rJrKr'r!r_rr�r\rDr�)	rr�r�r3r-r+r8rPr�rrr� test_double_forwarder_first_downys2

�


�z2TestDnsForwarding.test_double_forwarder_first_downc
Cs2tt�dkrtd�dS|�tddd�}|�tddd�}|�dd�|�dd�ttd�}d	}|�tj	�}g}|�
|tjtj�}|�
|�|�||�|jtjO_t�|�}|�|d�|�t�z!|�d
d�}	t�tj|	�}	|�|	tj�|�d|	jdj�WdStjy�|�dt�YdSw)Nrz(Ignoring test_double_forwarder_both_slowrr?r�rr�stimeout 1.5r�r�r�r�r�rrr�test_double_forwarder_both_slow�s8

�


�z1TestDnsForwarding.test_double_forwarder_both_slowc	Cs|�tddd�}ttd�}d}|�tj�}g}|�|tjtj	�}|�
|�|�||�|jtj
O_t�|�}|�|d�|�t�z*|�dd�}t�tj|�}|�|tj�|�t|j�d�|�d|jdj�WdStjy�|�dt�YdSw)Nrr?r�z
resolve.cnamer�rr�)r�r�rormr.rr�r9rWrUr�r1rr�r@rArIrGr	rJrKr'r!r_rr/r�r\rDr�)	rr�r�r3r-r+r8rPr�rrr�
test_cname�s.

�


�zTestDnsForwarding.test_cnamec	Cs|�tddd�}d|��}|�|d�ttd�}|�tj�}g}|�	|tj
tj�}|�|�|�
||�|jtjO_t�|�}|�|d�|�t�z!|�dd�}t�tj|�}|�|tj�|�d|jdj�WdStjy�|�dt�YdSw)	Nrr?r��resolve.cname.%sr�r�rr�)r�r�r>rerormr.rr�r9�DNS_QTYPE_ArUr�r1rr�r@rArIrGr	rJrKr'r!r_rr�r\rDr�)	rr�r3r�r-r+r8rPr�rrr�test_double_cname�s.

�


�z#TestDnsForwarding.test_double_cnamec
Cs:tt�dkrtd�dS|�tddd�}|�tddd�}|�dd�d	|��}|�|d
�ttd�}|�	t
j�}g}|�|t
j
t
j�}|�|�|�||�|jt
jO_t�|�}|�|d�|�t�z!|�dd�}	t�t
j|	�}	|�|	t
j�|�d|	jdj�WdStjy�|� d
t�YdSw)Nrz/Ignoring test_cname_forwarding_with_slow_serverrr?r�rr�r�r�r�r����r�)!r/r�rBr�rIr>rerormr.rr�r9r�rUr�r1rr�r@rArGr	rJrKr'r!r_rr�r\rDr�)
rr�r�r3r�r-r+r8rPr�rrr�&test_cname_forwarding_with_slow_server�s8

�


�z8TestDnsForwarding.test_cname_forwarding_with_slow_serverc
Cs4tt�dkrtd�dS|�tddd�}d|��}d|��}|�||�|�|d�ttd�}|�t	j
�}g}|�|t	jt	j
�}|�|�|�||�|jt	jO_t�|�}|�|d	�|�t�z!|�d
d	�}	t�t	j|	�}	|�|	t	j�|�d|	jdj�WdStjy�|� dt�YdSw)
Nrz/Ignoring test_cname_forwarding_with_server_downrr?r��resolve1.cname.%s�resolve2.cname.%sr�rr�r�r�)!r/r�rBr�r>rerormr.rr�r9r�rUr�r1rr�r@rArIrGr	rJrKr'r!r_rr�r\rDr�)
rr��name1�name2r�r-r+r8rPr�rrr�&test_cname_forwarding_with_server_downs8

�


�z8TestDnsForwarding.test_cname_forwarding_with_server_downcCs4d|��}|�tdd|�}d|��}d|��}|�||�|�||�|�|d�ttd�}|�tj�}g}|�	|tj
tj�}|�|�|�
||�|jtjO_t�|�}	|�|	d�|�t�z!|�dd�}
t�tj|
�}
|�|
tj�|�||
jdj�WdStjy�|�d	t�YdSw)
Nzresolve3.cname.%srr?r�r�r�r�r�r�)r>r�r�rerormr.rr�r9r�rUr�r1rr�r@rArIrGr	rJrKr'r!r_rr�r\rDr�)r�name3r�r�r�r�r-r+r8rPr�rrr�)test_cname_forwarding_with_lots_of_cnames-s6

�


�z;TestDnsForwarding.test_cname_forwarding_with_lots_of_cnames)rgrhrirrrxr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r��
__classcell__rrrvrrp�s&!!rp)�module�opts)4r�r|r(rDr�r�r��	samba.ndrr@r�samba.testsr�samba.dcerpcrr�samba.tests.subunitrunrr�samba.getopt�getopt�options�optparser~�OptionParser�parser�SambaOptions�	sambaopts�add_option_group�
add_option�CredentialsOptions�credopts�subunitopts�
parse_argsr�rt�get_loadparmr{�get_credentialsr:r	r/�print_usage�exitryrmr��set_krb_forwardable�NO_KRB_FORWARDABLErrorprgrrrr�<module>sV



�




S: