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: //proc/1233/root/usr/lib/python3/dist-packages/samba/__pycache__/dnsserver.cpython-310.pyc
o

�/a�7�@sddlZddlZddlmZmZGdd�de�ZGdd�dej�ZGdd�dej�Z	Gd	d
�d
ej�Z
Gdd�dej�ZGd
d�dej�ZGdd�dej�Z
Gdd�dej�ZGdd�dej�ZGdd�dej�ZiZdd�Ze�[d%dd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�ZdS)&�N)�	dnsserver�dnspc@seZdZdS)�
DNSParseErrorN)�__name__�
__module__�__qualname__�rr�1/usr/lib/python3/dist-packages/samba/dnsserver.pyr,src�6eZdZddejdf�fdd�	Zed	dd��Z�ZS)
�ARecord��rc�6tt|���tj|_||B|_||_||_||_	dS�N)
�superr�__init__r�
DNS_TYPE_A�wType�dwFlags�dwSerial�dwTtlSeconds�data)�self�ip_addr�serial�ttl�rank�	node_flag��	__class__rr	r1�

zARecord.__init__NcK�||fi|��Srr��clsr�sep�kwargsrrr	�from_string:�zARecord.from_stringr�	rrrr�
DNS_RANK_ZONEr�classmethodr&�
__classcell__rrrr	r0s�	rcr
)
�
AAAARecordrr
rcrr)
rr,rr�
DNS_TYPE_AAAArrrrr)r�ip6_addrrrrrrrr	rAr zAAAARecord.__init__NcKr!rrr"rrr	r&Jr'zAAAARecord.from_stringrr(rrrr	r,?s�	r,cr
)
�	PTRRecordrr
rc�Ntt|���tj|_||B|_||_||_t	�
�}||_t|�|_||_
dSr)rr/rr�DNS_TYPE_PTRrrrrr�DNS_RPC_NAME�str�lenr)r�ptrrrrr�ptr_namerrr	rQ�


zPTRRecord.__init__NcKr!rrr"rrr	r&]r'zPTRRecord.from_stringrr(rrrr	r/O��r/cr
)
�CNAMERecordrr
rcsJt���tj|_||B|_||_||_t�	�}||_
t|�|_||_dSr)
rrr�DNS_TYPE_CNAMErrrrrr2r3r4r)r�cnamerrrr�
cname_namerrr	rds



zCNAMERecord.__init__NcKr!rrr"rrr	r&pr'zCNAMERecord.from_stringrr(rrrr	r9br8r9cr
)
�NSRecordrr
rcr0r)rr=rr�DNS_TYPE_NSrrrrrr2r3r4r)r�
dns_serverrrrr�nsrrr	rwr7zNSRecord.__init__NcKr!rrr"rrr	r&�r'zNSRecord.from_stringrr(rrrr	r=ur8r=cr
)
�MXRecordrr
rcsXtt|���tj|_||B|_||_||_t	�
�}||_||j_
t|�|j_||_dSr)rrArr�DNS_TYPE_MXrrrrr�DNS_RPC_RECORD_NAME_PREFERENCE�wPreference�nameExchanger3r4r)r�mail_server�
preferencerrrr�mxrrr	r�s

zMXRecord.__init__Nc
KsTz
|�|�\}}t|�}Wnty }ztd|�|�d}~ww|||fi|��S)Nz?MX data must have server and priority (space separated), not %r)�split�int�
ValueErrorr)r#rr$r%�server�priority�errr	r&�s����zMXRecord.from_stringrr(rrrr	rA�s�
rAcs@eZdZddddddejejf�fdd�	Zedd	d
��Z�Z	S)�	SOARecordrr
iXi�Qics�tt|���tj|_|	|
B|_||_||_t	�
�}||_||_||_
||_||_||j_t|�|j_||j_t|�|j_||_dSr)rrOrr�DNS_TYPE_SOArrrrr�DNS_RPC_RECORD_SOA�
dwSerialNo�	dwRefresh�dwRetry�dwExpire�dwMinimumTtl�NamePrimaryServerr3r4�ZoneAdministratorEmailr)r�mname�rnamer�refresh�retry�expire�minimumrrr�soarrr	r�s 

zSOARecord.__init__Nc
Kst|�|�}t|�dkrtd��ztdd�D]
}t||�||<qWnty2}ztd�|�d}~ww||i|��S)N�zhData requires 7 space separated elements - nameserver, email, serial, refresh, retry, expire, minimumttl�zBSOA serial, refresh, retry, expire, minimumttl' should be integers)rIr4r�rangerJrK)r#rr$r%�args�irNrrr	r&�s
����zSOARecord.from_stringr)
rrrrr)�DNS_RPC_FLAG_AUTH_ZONE_ROOTrr*r&r+rrrr	rO�s
�rOcs:eZdZddddejdf�fdd�	Zed
dd	��Z�ZS)�	SRVRecordr�drr
c	
sdtt|���tj|_||B|_||_||_t	�
�}	||	_||	_||	_
||	j_t|�|	j_|	|_dSr)rrfrr�DNS_TYPE_SRVrrrrr�DNS_RPC_RECORD_SRV�	wPriority�wWeight�wPort�
nameTargetr3r4r)
r�target�portrM�weightrrrr�srvrrr	r�s

zSRVRecord.__init__Nc

Ks�z|�|�\}}}}Wnty}ztd|�|�d}~wwz|t|�t|�t|�f}	Wnty>}ztd�|�d}~ww||	i|��S)NzXSRV data must have four space separated elements: server, port, priority, weight; not %rz/SRV port, priority, and weight must be integers)rIrKrrJ)
r#rr$r%rnrorMrprNrcrrr	r&�s&�������zSRVRecord.from_stringrr(rrrr	rf�s�rfcr
)
�	TXTRecordrr
rc
s�tt|���tj|_||B|_||_||_t	|t
�r|g}g}|D]}t��}||_
t
|�|_
|�|�q"t��}	t
|�|	_||	_
|	|_dSr)rrrrr�DNS_TYPE_TXTrrrr�
isinstancer3rr2r4�append�DNS_RPC_RECORD_STRING�countr)
r�slistrrrr�names�s�name�txtrrr	r�s"




zTXTRecord.__init__NcKst�|�}||fi|��Sr)�shlexrI)r#rr$r%rxrrr	r&s
zTXTRecord.from_stringrr(rrrr	rr�s�rrcCsRt���D]!\}}|dd�dkr&|dd�}ttd|�}|t|<|t|<qdS)Ni�����Record�	DNS_TYPE_)�globals�items�getattrr�_RECORD_TYPE_LUT)�k�v�flagrrr	�_setup_record_type_luts��r�c
KsXt|t�r	|��}zt|}Wnty }ztd�|�d}~ww|j|fd|i|��S)z�Get a DNS record of type t based on the data string.
    Additional keywords (ttl, rank, etc) can be passed in.

    t can be a dnsp.DNS_TYPE_* integer or a string like "A", "TXT", etc.
    zUnsupported record typeNr$)rtr3�upperr��KeyErrorrr&)�trr$r%r~rNrrr	�record_from_strings

��r�cCs6|��}zttd|�WStytd|�t�w)NrzUnknown type of DNS record %s)r�r�r�AttributeErrorrrN)�rec_type�rtyperrr	�flag_from_string's�r�cOs t|i|��}t��}||_|Sr)r�r�DNS_RPC_RECORD_BUF�rec)rcr%r��bufrrr	�recbuf_from_string/sr�cCs |j�d���|j�d���kS)z%Match dns name (of type DNS_RPC_NAME)�.)r3�rstrip�lower)�n1�n2rrr	�dns_name_equal6s r�cCst�tj|�}t�tj|�S)z.Convert an AAAA adresss into a canonical form.)�socket�	inet_pton�AF_INET6�	inet_ntop)�addr�packedrrr	�ipv6_normalise;sr�cCs�t||�}tj}z|�tjd|||d||dd�
\}}	Wnty8}
z|
jdtjkr2WYd}
~
dS|
�d}
~
ww|	r@|	j	dkrBdS|	j
djD�]}|j|krQqHd}|t
jkra|j|jkr`d}n�|t
jkrst|j�t|j�krrd}n�|t
jkr�t|j|j�r�d}n�|t
jkr�t|j|j�r�d}n�|t
jkr�t|j|j�r�d}n�|t
jkr�t|jj|jj�r�|jj|jjkr�d}n�|t
jkr�|jj|jjkr�|jj|jjkr�|jj|jjkr�t|jj|jj�r�d}nv|t
jk�r,|jj|jjk�r+|jj |jj k�r+|jj!|jj!k�r+|jj"|jj"k�r+|jj#|jj#k�r+t|jj$|jj$��r+t|jj%|jj%��r+d}n,|t
j&k�rX|jj	|jj	k�rXd}t'|jj	�D]}
|�oU|jj(|
j(|jj(|
j(k}�qC|�r_|SqHdS)z1Find a dns record that matches the specified datarNFT))r�r�DNS_RPC_VIEW_AUTHORITY_DATA�DnssrvEnumRecords2�DNS_CLIENT_VERSION_LONGHORN�WERRORErrorrc�werror�"WERR_DNS_ERROR_NAME_DOES_NOT_EXISTrwr��recordsrrrrr-r�r1r�r:r>rBrErDrhrjrkrlrmrPrRrSrTrUrVrWrXrsrbr3)�dns_connrL�zoner{�record_typer�urec�select_flags�buflen�resrNr��foundrdrrr	�dns_record_matchAs�
���

�
�
�
�
�
�
���������r�r)r}r��samba.dcerpcrrrKr�DNS_RPC_RECORDrr,r/r9r=rArOrfrrr�r�r�r�r�r�r�r�rrrr	�<module>s.&#