o
    2³c=  ã                   @   sš   d Z ddlZddlZddlZddlZddlZddlZddlZddl	Zddl
ZddlZddlZddlZddlZddlZG dd„ dejjƒZG dd„ dƒZdS )z
DNS Zones.é    Nc                   @   s   e Zd ZdZdS )ÚUnknownOriginzUnknown originN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   úB/var/www/html/gps/gps/lib/python3.10/site-packages/dns/zonefile.pyr   %   s    r   c                   @   sB   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚReaderz(Read a DNS zone file into a transaction.Fc                 C   sd   || _ |j ¡ \| _| _}| j| _d| _d| _d| _d| _	| j| _
|| _|| _g | _d | _|| _d S )Nr   F)ÚtokÚmanagerÚorigin_informationÚzone_originÚ
relativizeÚcurrent_originÚlast_ttlÚlast_ttl_knownÚdefault_ttlÚdefault_ttl_knownÚ	last_nameÚzone_rdclassÚtxnÚsaved_stateÚcurrent_fileÚallow_include)Úselfr
   Úrdclassr   r   Ú_r   r   r   Ú__init__-   s   ÿ
zReader.__init__c                 C   s   	 | j  ¡ }| ¡ rd S q)N)r
   ÚgetÚis_eol_or_eof)r   Útokenr   r   r   Ú	_eat_line=   s
   
ýzReader._eat_linec           	   
   C   sˆ  | j du rt‚| jjdd}| ¡ s| j || j ¡| _n| j ¡ }| ¡ r'dS | j |¡ | j}| 	| j
¡s<|  ¡  dS | jrE| | j
¡}| j ¡ }| ¡ sRtjj‚d}ztj |j¡}|| _d| _| j ¡ }| ¡ sotjj‚W n tjjyˆ   | jr€| j}n| jr†| j}Y nw ztj |j¡}| j ¡ }| ¡ sžtjj‚W n tjjy©   ‚  ty´   | j}Y nw || jkrÀtj d¡‚z	tj |j¡}W n tyÙ   tj d|j ¡‚w ztj ||| j| j | j| j
¡}W n) tjjyõ   ‚  ty   t ¡ dd… \}}tj d  t!|ƒt!|ƒ¡¡‚w | js/|tjj"kr/|j#| _d| _|du r/|j#}|du r:tj d¡‚| j$ %|||¡ dS )	z&Process one line from a DNS zone file.NT)Úwant_leadingúRR class is not zone's classúunknown rdatatype '%s'é   zcaught exception {}: {}úMissing default TTL value)&r   r   r
   r   Úis_whitespaceÚas_namer   r   ÚungetÚis_subdomainr   r!   r   Úis_identifierÚdnsÚ	exceptionÚSyntaxErrorÚttlÚ	from_textÚvaluer   r   ÚBadTTLr   r   Ú
rdataclassÚ	Exceptionr   Ú	rdatatypeÚrdataÚsysÚexc_infoÚformatÚstrÚSOAÚminimumr   Úadd)	r   r    Únamer/   r   ÚrdtypeÚrdÚtyÚvar   r   r   Ú_rr_lineC   s–   



ÿ€ü
ÿ
ÿ
ÿÿþÿù


zReader._rr_linec                 C   sä   t  d¡}t  d¡}t  d¡}| |¡}|r%| ¡ \}}}}	}
|dkr%d}| |¡}|r=| ¡ \}}}|dkr9d}d}	d}
| |¡}|rT| ¡ \}}}}	|dkrRd}d}
|sd|sd|sdd}d}d}d}	d}
|
dkrktƒ ‚||||	|
fS )Nz"^.*\$({(\+|-?)(\d+),(\d+),(.)}).*$z^.*\$({(\+|-?)(\d+)}).*$z^.*\$({(\+|-?)(\d+),(\d+)}).*$Ú ú+r   Úd)ÚreÚcompileÚmatchÚgroupsÚNotImplementedError)r   ÚsideÚis_generate1Úis_generate2Úis_generate3Úg1ÚmodÚsignÚoffsetÚwidthÚbaseÚg2Úg3r   r   r   Ú_parse_modifyž   s<   





zReader._parse_modifyc              
   C   s   | j du rt‚| j ¡ }ztj |j¡\}}}| j ¡ }| ¡ s$tj	j
‚W n ty0   tj	j
‚w z|j}| j ¡ }| ¡ sBtj	j
‚W n tyN   tj	j
‚w ztj |j¡}|| _d| _| j ¡ }| ¡ sjtj	j
‚W n$ tjjy   | js€| js€tj	 
d¡‚| jr‡| j}n| jr| j}Y nw ztj |j¡}| j ¡ }| ¡ s¥tj	j
‚W n tj	j
y³   tj	j
‚ ty¾   | j}Y nw || jkrÊtj	 
d¡‚ztj |j¡}| j ¡ }| ¡ sßtj	j
‚W n tyð   tj	 
d|j ¡‚w |j}	|  |¡\}
}}}}|  |	¡\}}}}}t||d |ƒD ]½}|dkr|t|ƒ }n|dkr)|t|ƒ }|dkr5|t|ƒ }n|dkr@|t|ƒ }t|ƒ t|ƒ¡}t|ƒ t|ƒ¡}| d	|
 |¡}|	 d	| |¡}tj || j | jj¡| _| j}| | j¡s|   ¡   dS | j!r‰| !| j¡}ztj" |||| j | j!| j¡}W n* tj	j
y¤   ‚  tyÃ   t# $¡ dd
… \}}tj	 
dt|ƒt|ƒf ¡‚w | j% &|||¡ qdS )zPProcess one line containing the GENERATE statement from a DNS
        zone file.NTr&   r#   r$   é   rE   ú-z$%sr%   zcaught exception %s: %s)'r   r   r
   r   r,   Úgranger0   r1   r+   r-   r.   r4   r/   r   r   r2   r   r   r3   r   r5   rX   ÚrangeÚintr:   ÚzfillÚreplacer>   Ú
idna_codecr   r*   r   r!   r   r6   r7   r8   r   r=   )r   r    ÚstartÚstopÚstepÚlhsr/   r   r?   ÚrhsÚlmodÚlsignÚloffsetÚlwidthr   ÚrmodÚrsignÚroffsetÚrwidthÚiÚlindexÚrindexÚlzfindexÚrzfindexr>   r6   r@   rA   rB   r   r   r   Ú_generate_lineÆ   sÌ   


ÿÿ
ÿÿ
ÿ€ú
ÿ
ÿ

ÿÿÿ



ÿþÿù
ÓzReader._generate_linec           	   
   C   sš  z	 | j  dd¡}| ¡ r9| jdur| j ¡  t| jƒdkr6| j d¡\| _ | _| _	| _| _
| _| _| _qW dS | ¡ r>q| ¡ rH| j  ¡  q|jd dkr|j ¡ }|dkry| j  ¡ }| ¡ shtj d¡‚tj |j¡| _d| _| j  ¡  n”|d	kr™| j  ¡ | _| j  ¡  | jdu r‘| j| _| j | j¡ nt|d
krù| jrù| j  ¡ }|j}| j  ¡ }| ¡ rÃtj |j| j| j j¡}| j  ¡  n|  ¡ sÍtj d¡‚| j}| j !| j | j| j	| j| j
| j| j| jf¡ t"|dƒ| _tj# $| j|¡| _ || _n|dkr|  %¡  n
tj d| d ¡‚q| j  &|¡ |  '¡  q tjjyL } z%| j  (¡ \}}|du r1d}tj d|||f ¡}t) *¡ d }| +|¡d‚d}~ww )zÆRead a DNS zone file and build a zone object.

        @raises dns.zone.NoSOA: No SOA RR was found at the zone origin
        @raises dns.zone.NoNS: No NS RRset was found at the zone origin
        rY   TNr   éÿÿÿÿú$z$TTLzbad $TTLz$ORIGINz$INCLUDEzbad origin in $INCLUDEÚrz	$GENERATEzUnknown zone file directive 'ú'zsyntax errorz	%s:%d: %sr%   ),r
   r   Úis_eofr   ÚcloseÚlenr   Úpopr   r   r   r   r   r   Úis_eolÚ
is_commentÚget_eolr1   Úupperr+   r,   r-   r.   r/   r0   Úget_namer   r   Ú_set_originr   r>   r`   r   ÚappendÚopenÚ	tokenizerÚ	Tokenizerrs   r)   rC   Úwherer7   r8   Úwith_traceback)	r   r    ÚcÚfilenameÚ
new_originÚdetailÚline_numberÚexÚtbr   r   r   Úread;  s°   


ù







þÿÿ
ù
ÿ


ÿºG
ÿ€ùzReader.readN)F)
r   r   r   r   r   r!   rC   rX   rs   r   r   r   r   r   r	   )   s    
[(ur	   )r   rG   r7   Údns.exceptionr,   Údns.nameÚdns.nodeÚdns.rdataclassÚdns.rdatatypeÚ	dns.rdataÚdns.rdtypes.ANY.SOAÚ	dns.rrsetÚdns.tokenizerÚdns.transactionÚdns.ttlÚ
dns.granger-   ÚDNSExceptionr   r	   r   r   r   r   Ú<module>   s"   