a
àMÒe ã @ s‚ d dl Z d dlZd dlmZ d dlZd dlZd dlZd dlZd dl Zd dl
Zej d¡Z
G dd„ dƒZdd„ Zdd „ Zd
d„ ZdS )é N)Úurlparsez_dns.resolver.arpac @ s6 e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zdd
d„Zd S )
Ú _SVCBInfoc C s || _ || _|| _|| _d S ©N)Úbootstrap_addressÚportÚhostnameÚnameservers)Úselfr r r r © r
ú,/usr/lib/python3.9/site-packages/dns/_ddr.pyÚ__init__ s z_SVCBInfo.__init__c C s. |d D ] \}}|dkr|| j kr dS qdS )zIVerify that the _SVCBInfo's address is in the cert's subjectAltName (SAN)ZsubjectAltNamez
IP AddressTF)r )r ÚcertÚnameÚvaluer
r
r Úddr_check_certificate! s z_SVCBInfo.ddr_check_certificatec C s t jj}| ¡ }|jj|_|S r )ÚdnsÚqueryÚsslZcreate_default_contextZ
TLSVersionZTLSv1_2Zminimum_version)r r Úctxr
r
r Úmake_tls_context( s
z_SVCBInfo.make_tls_contextc C s¶ | ¡ }t ¡ | }t | j| jf|¡z}|j|| jdJ}| t j
|¡¡ | ¡ |
¡ }| |¡W d ƒ W d ƒ S 1 sŠ0 Y W d ƒ n1 s¨0 Y d S )N)Zserver_hostname)r ÚtimeÚsocketZcreate_connectionr r Zwrap_socketr Z
settimeoutr r Ú
_remainingZdo_handshakeÚgetpeercertr )r Úlifetimer Ú
expirationÚsÚtsr
r
r
r Úddr_tls_check_sync. s ÿz_SVCBInfo.ddr_tls_check_syncNc
à s´ |d u rt j ¡ }| ¡ }t ¡ | }| t j | j¡t j
dd | j| jf||| j¡I d H 4 I d H š8}|
t j |¡¡I d H }| |¡W d ƒI d H S 1 I d H s¦0 Y d S )Nr )r ZasyncbackendZget_default_backendr r Zmake_socketÚinetZaf_for_addressr r ZSOCK_STREAMr r r r r r )r r Zbackendr r r r
r
r
r Úddr_tls_check_async: s"
ø z_SVCBInfo.ddr_tls_check_async)N)Ú__name__Ú
__module__Ú__qualname__r r r r r r
r
r
r r s
r c C s¼ | j }tj |¡sg S g }| j ¡ D ]}g }|j tjj j
j¡}|d u rLq$t|j
ƒ}|jjdd}d }|j tjj j
j¡}|d urŠ|j}d|v r8|j tjj j
j¡}|d u s$|j d¡s¾q$|jd d… ¡ } | d¡sâd| } |d u rîd}d|› d |› | › }
z t|
ƒ | tj |
|¡¡ W n ty6 Y n0 d
|v rf|d u rPd}| tj |||¡¡ d|v r–|d u r~d}| tj ||d|¡¡ t|ƒd
kr$| t||||ƒ¡ q$|S )NT)Zomit_final_dots h2s {?dns}iúÿÿÿú/i» zhttps://ú:s dotiU s doqr )Z
nameserverr r Z
is_addressZrrsetZprocessing_orderÚparamsÚgetZrdtypesZsvcbbaseZParamKeyZALPNÚsetZidsÚtargetZto_textZPORTr ZDOHPATHr ÚendswithÚdecodeÚ
startswithr ÚappendZ
DoHNameserverÚ ExceptionZ
DoTNameserverZ
DoQNameserverÚlenr )Úanswerr ÚinfosZrrr ZparamZalpnsÚhostr ÚpathÚurlr
r
r Ú_extract_nameservers_from_svcbM sZ
ÿ
ÿr5 c C sH g }t | ƒ}|D ]2}z| |¡r,| |j¡ W q ty@ Y q0 q|S )úVReturn a list of TLS-validated resolver nameservers extracted from an SVCB
answer.)r5 r Úextendr r. ©r0 r r r1 Úinfor
r
r Ú_get_nameservers_sync s
r: c à sN g }t | ƒ}|D ]8}z | |¡I dH r2| |j¡ W q tyF Y q0 q|S )r6 N)r5 r r7 r r. r8 r
r
r Ú_get_nameservers_async s r; )r r Úurllib.parser Zdns.asyncbackendr Zdns.inetZdns.nameZdns.nameserverZ dns.queryZdns.rdtypes.svcbbaser Z from_textZ_local_resolver_namer r5 r: r; r
r
r
r Ú