Ë
    oj¿  ã                   ó‚   — d Z ddlZddlZddlmZmZ ddlmZmZm	Z	m
Z
 ddlmZ  G d„ dej                  «      Zd„ Zd	„ Zy)
z
Domain Name Server
é    N)ÚinternetÚservice)Ú	authorityÚdnsÚ	secondaryÚserver)Úusagec                   ó²   — e Zd Zg d¢g d¢g d¢g d¢gZg d¢g d¢g d¢gZ ej                  d ej                  «       i¬	«      Zd
Z	d
Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy
)ÚOptions)Ú	interfaceÚiÚ zThe interface to which to bind)ÚportÚpÚ53zThe port on which to listen)úresolv-confNNz6Override location of resolv.conf (implies --recursive))ú
hosts-fileNNz!Perform lookups with a hosts file)ÚcacheÚczEnable record caching)Ú	recursiveÚrzPerform recursive lookups)ÚverboseÚvzLog verboselyr   )Ú
optActionsNc                 óv   — t         j                  j                  | «       d| d<   g | _        g | _        g | _        y )Nr   r   )r	   r   Ú__init__Ú	bindfilesÚ	zonefilesÚsecondaries©Úselfs    ú3/usr/lib/python3/dist-packages/twisted/names/tap.pyr   zOptions.__init__+   s3   € Ü�‰×Ñ˜tÔ$ØˆˆY‰ØˆŒØˆŒØˆÕó    c                 ó¨   — t         j                  j                  |«      st        j                  |dz   «      ‚| j
                  j                  |«       y)z7Specify the filename of a Python syntax zone definitionú: No such fileN)ÚosÚpathÚexistsr	   Ú
UsageErrorr   Úappend©r!   Úfilenames     r"   Ú
opt_pyzonezOptions.opt_pyzone2   ó;   € ä�w‰w�~‰~˜hÔ'Ü×"Ñ" 8Ð.>Ñ#>Ó?Ð?Ø�‰×Ñ˜hÕ'r#   c                 ó¨   — t         j                  j                  |«      st        j                  |dz   «      ‚| j
                  j                  |«       y)z6Specify the filename of a BIND9 syntax zone definitionr%   N)r&   r'   r(   r	   r)   r   r*   r+   s     r"   Úopt_bindzonezOptions.opt_bindzone8   r.   r#   c                 óœ  — |j                  dd«      }t        |«      dk7  rt        j                  d«      ‚|d   j                  d«      }t        |«      dk(  r|d   t        j
                  f}n	 t        |d   «      }|d   |f}| j                  j                  ||d   gf«       y# t        $ r t        j                  d|d   ›�«      ‚w xY w)	zwAct as secondary for the specified domain, performing
        zone transfers from the specified IP (IP/domain)
        ú/é   é   z-Argument must be of the form IP[:port]/domainr   ú:z$Specify an integer port number, not N)
ÚsplitÚlenr	   r)   r   ÚPORTÚintÚ
ValueErrorr   r*   )r!   Ú	ip_domainÚargsÚaddressr   s        r"   Úopt_secondaryzOptions.opt_secondary>   sÔ   € ð �‰˜s AÓ&ˆÜˆt‹9˜Š>Ü×"Ñ"Ð#RÓSÐSØ�q‘'—-‘- Ó$ˆÜˆw‹<˜1ÒØ˜q‘z¤3§8¡8Ð,‰GðÜ˜7 1™:“�ð
 ˜q‘z 4Ð(ˆGØ×Ñ×Ñ ¨4°©7¨)Ð 4Õ5øô ò Ü×&Ñ&Ø:¸7À1¹:¸.ÐIóð ðús   Á/B& Â&%Cc                 ó   — | dxx   dz  cc<   y)zIncrement verbosity levelr   r3   N© r    s    r"   Úopt_verbosezOptions.opt_verboseR   s   € àˆY‹˜1ÑŒr#   c                 ó   — | d   rd| d<   g | _         g | _        | j                  D ]1  }	 | j                  j                  t	        j
                  |«      «       Œ3 | j                  D ]1  }	 | j                  j                  t	        j                  |«      «       Œ3 | j                  D ]o  }t        j                  j                   |Ž }| j                   j                  |«       | j                  j                  | j                   d   j#                  «       «       Œq 	 t%        | d   «      | d<   y # t        $ r- t        j                  «        t        j                  d|z   «      ‚w xY w# t        $ r- t        j                  «        t        j                  d|z   «      ‚w xY w# t&        $ r( t        j                  dj)                  | d   «      «      ‚w xY w)Nr   Tr   zInvalid syntax in éÿÿÿÿr   zInvalid port: {!r})ÚsvcsÚzonesr   r*   r   ÚPySourceAuthorityÚ	ExceptionÚ	tracebackÚ	print_excr	   r)   r   ÚBindAuthorityr   r   ÚSecondaryAuthorityServiceÚfromServerAddressAndDomainsÚgetAuthorityr9   r:   Úformat)r!   ÚfÚsvcs      r"   ÚpostOptionszOptions.postOptionsV   s­  € Ø�ÒØ $ˆD�ÑàˆŒ	ØˆŒ
Ø—‘ò 	AˆAðAØ—
‘
×!Ñ!¤)×"=Ñ"=¸aÓ"@ÕAð	Að —‘ò 	AˆAðAØ—
‘
×!Ñ!¤)×"9Ñ"9¸!Ó"<Õ=ð	Að ×!Ñ!ò 	<ˆAÜ×5Ñ5×QÑQÐSTÐUˆCØ�I‰I×Ñ˜SÔ!Ø�J‰J×Ñ˜dŸi™i¨™m×8Ñ8Ó:Õ;ð	<ð	NÜ˜t F™|Ó,ˆD�ŠLøô ò AÜ×#Ñ#Ô%Ü×&Ñ&Ð';¸aÑ'?Ó@Ð@ðAûô ò AÜ×#Ñ#Ô%Ü×&Ñ&Ð';¸aÑ'?Ó@Ð@ðAûô ò 	NÜ×"Ñ"Ð#7×#>Ñ#>¸tÀF¹|Ó#LÓMÐMð	Nús#   ©.D*Á).E#ÄF Ä*6E Å#6FÆ1G)Ú__name__Ú
__module__Ú__qualname__ÚoptParametersÚoptFlagsr	   ÚCompletionsÚCompleteNetInterfacesÚcompDatarE   r   r   r-   r0   r>   rA   rQ   r@   r#   r"   r   r      s   „ â@Ú:ò	
ò 	Hð
€Mò 	0Ú7Ú)ð€Hð !ˆu× Ñ ØÐ!< ×!<Ñ!<Ó!>Ð?ô€Hð €EØ€Iòò(ò(ò6ò(óNr#   r   c                 ó  — ddl m}m}m} g g }}| d   r$|j	                  |j                  | d   ¬«      «       | d   r$|j	                  |j                  | d   ¬«      «       | d   r$|j	                  |j                  | d	   ¬
«      «       ||fS )a%  
    Build DNS resolver instances in an order which leaves recursive
    resolving as a last resort.

    @type config: L{Options} instance
    @param config: Parsed command-line configuration

    @return: Two-item tuple of a list of cache resovers and a list of client
        resolvers
    r   )r   ÚclientÚhostsr   r   )r   r   )Úfiler   r   )Ú
resolvconf)Útwisted.namesr   r[   r\   r*   ÚCacheResolverÚResolverÚcreateResolver)Úconfigr   r[   r\   ÚcaÚcls         r"   Ú_buildResolversrf   r   s�   € ÷ 3Ñ2à�ˆ€BØˆg‚Ø
�	‰	�%×%Ñ%¨f°YÑ.?Ð%Ó@ÔAØˆlÒØ
�	‰	�%—.‘. f¨\Ñ&:�.Ó;Ô<ØˆkÒØ
�	‰	�&×'Ñ'°6¸-Ñ3HÐ'ÓIÔJØˆrˆ6€Mr#   c                 ó¬  — t        | «      \  }}t        j                  | j                  ||| d   «      }t	        j
                  |«      }d|_        t        j                  «       }t        j                  |ft        j                  |ffD ]'  \  }} || d   || d   ¬«      }|j                  |«       Œ) | j                  D ]  }	|	j                  |«       Œ |S )Nr   r   r   r   )r   )rf   r   ÚDNSServerFactoryrE   r   ÚDNSDatagramProtocolÚnoisyr   ÚMultiServicer   Ú	TCPServerÚ	UDPServerÚsetServiceParentrD   )
rc   rd   re   rO   r   ÚretÚklassÚargÚsrP   s
             r"   ÚmakeServicers   ‰   sÏ   € Ü˜VÓ$�F€Bˆä×Ñ §¡¨b°"°f¸YÑ6GÓH€AÜ×Ñ Ó"€AØ€A„GÜ
×
Ñ
Ó
 €CÜ ×*Ñ*¨AÐ.´×1CÑ1CÀQÐ0GÐHò  ‰
ˆˆsÙ�&˜‘. #°¸Ñ1DÔEˆØ	×Ñ˜3Õð ð �{‰{ò "ˆØ×Ñ˜SÕ!ð"à€Jr#   )Ú__doc__r&   rH   Útwisted.applicationr   r   r_   r   r   r   r   Útwisted.pythonr	   r   rf   rs   r@   r#   r"   ú<module>rw      s=   ðñ
ó 
Û ç 1ß ;Ó ;Ý  ô^Nˆe�m‰mô ^NòBó.r#   