
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
«Ú²jý&  ã               @   s¾   d dl m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
mZ dZd dlmZmZmZmZmZmZ dd„ Zdad	d
„ Zdd„ Zdd„ Zddd„Zdd„ Zdd„ ZdS )é    )Úprint_functionN)Údefaultdictzdnssec-coverage)ÚdnskeyÚ	eventlistÚkeydictÚkeyeventÚkeyzoneÚutilsc              O   s   t | |Ž tjdƒ d S )Né   )ÚprintÚsysÚexit)ÚargsÚkwargs© r   ú/usr/lib/python3.6/coverage.pyÚfatal   s    
r   Tc              O   sJ   d|kr|d }|j ddƒ nd}tr,dan|r8tdƒ | rFt| |Ž dS )zuoutput text, adding a vertical space this is *not* the first
    first section being printed since a call to vreset()ÚskipNTFÚ )ÚpopÚ
_firstliner   )r   r   r   r   r   r   Úoutput'   s    r   c               C   s   da dS )zreset vertical spacingTN)r   r   r   r   r   Úvreset8   s    r   c             C   sð   | j ƒ } yt| ƒS  tk
r$   Y nX tjdƒ}|j| ƒ}|sJtd|  ƒ‚|jƒ \}}t|ƒ}|jƒ }|jdƒrx|d S |jdƒrŠ|d S |jdƒrœ|d S |jd	ƒr®|d
 S |jdƒrÀ|d S |jdƒrÒ|d S |jdƒrà|S td| ƒ‚dS )zÌ convert a formatted time (e.g., 1y, 6mo, 15mi, etc) into seconds
    :param s: String with some text representing a time interval
    :return: Integer with the number of seconds in the time interval
    z([0-9][0-9]*)\s*([A-Za-z]*)zCannot parse %sÚyi€3áÚmoi �' Úwi€:	 Údi€Q Úhi  Zmié<   ÚszInvalid suffix %sN)	ÚstripÚintÚ
ValueErrorÚreÚcompileÚmatchÚgroupsÚlowerÚ
startswith)r   ÚrÚmÚnZunitr   r   r   Ú
parse_timeA   s6    








r,   c             C   s†   |}| s(t jj|ƒ s(t j|t jƒ r‚t jd }|s>t jj}xB|jt jƒD ]2}t jj	|| ƒ}t jj|ƒrzt j|t jƒrzP d}qLW |S )a1   find the location of a specified command.  if a default is supplied
    and it works, we use it; otherwise we search PATH for a match.
    :param command: string with a command to look for in the path
    :param default: default location to use
    :return: detected location for the desired command
    ÚPATHN)
ÚosÚpathÚisfileÚaccessÚX_OKÚenvironÚdefpathÚsplitÚpathsepÚjoin)ZcommandÚdefaultZfpathr/   Z	directoryr   r   r   Úset_pathk   s    $
r9   c        	   0   C   sD  t dtjjtjdƒdƒƒ} tjtd d d�}|j	dt
dddFd� |j	dddt
ddd� |j	ddt
ddd� |j	ddt
ddd� |j	ddt
ddd� |j	ddd t
d!dd� |j	d"d#| t
d$dd� |j	d%d&t
d'd(dd)� |j	d*d+d,d-d.d/� |j	d0d1d,d-d2d/� |j	d3d4d5d,d-d6d/� |j	d7d8d9tjd:� |jƒ }|j�rJ|j�rJtd;ƒ n*|j�sZ|j�rn|j�rfd<nd=|_nd|_|j�r”t|jƒd>k�r”td?ƒ d@dA„ |jD ƒ|_y|j�rÀt|jƒ}||_W n tk
�rØ   Y nX y|j�rôt|jƒ}||_W n tk
�r   Y nX y|j�r(t|jƒ}||_W n tk
�r@   Y nX y<|j�r||j}t|jƒ}|dBk�rnd|_ntjƒ | |_W n tk
�r”   Y nX |j�rª|j�rª|S |j�r*|j�r*y:t|jdB |j|jƒ}|j�pÞ|j|_|j�pî|j|_W n4 tk
�r( } ztdC|j |ƒ W Y dd}~X nX |j�s@tdDƒ dE|_|S )Gz8Read command line arguments, set global 'args' structureznamed-compilezoneZsbinz: checks future zDNSKEY coverage for a zone)ÚdescriptionÚzoneÚ*Nzzone(s) to checkz%(default: all zones in the directory))ÚtypeÚnargsr8   Úhelpz-Kr/   Ú.z&a directory containing keys to processÚdir)Údestr8   r=   r?   Úmetavarz-fÚfilenamezzone master fileÚfile)rB   r=   r?   rC   z-mÚmaxttlzthe longest TTL in the zone(s)Útimez-dÚkeyttlzthe DNSKEY TTLz-rÚresignZ1944000z:the RRSIG refresh interval in seconds [default: 22.5 days]z-cÚcompilezonezpath to 'named-compilezone'z-lÚ
checklimitÚ0zDLength of time to check for DNSSEC coverage [default: 0 (unlimited)])rB   r=   r8   r?   rC   z-zÚno_kskÚ
store_trueFz#Only check zone-signing keys (ZSKs))rB   Úactionr8   r?   z-kÚno_zskz"Only check key-signing keys (KSKs)z-Dz--debugZ
debug_modezTurn on debugging outputz-vz	--versionÚversion)rO   rQ   z)ERROR: -z and -k cannot be used together.ZKSKZZSKr
   z)ERROR: -f can only be used with one zone.c             S   s4   g | ],}t |ƒd kr,|d dkr,|dd… n|‘qS )r
   r@   NéÿÿÿÿrR   )Úlen)Ú.0Úxr   r   r   ú
<listcomp>À   s   zparse_args.<locals>.<listcomp>r   z"Unable to load zone data from %s: z‰WARNING: Maximum TTL value was not specified.  Using 1 week
	 (604800 seconds); re-run with the -m option to get more
	 accurate results.i€:	 z5zone(s) to check(default: all zones in the directory)) r9   r.   r/   r7   r	   ÚprefixÚargparseÚArgumentParserÚprogÚadd_argumentÚstrrQ   Ú
parse_argsrP   rM   r   ÚkeytyperD   rS   r;   rF   r,   r"   rH   rI   rK   rG   r   rJ   Ú	Exceptionr   r   )	rJ   Úparserr   r*   Úkr)   Zlimr;   Úer   r   r   r]   „   s´    

 

















"r]   c           (   C   sp  t ƒ } tdƒ yt| j| j| jd�}W n2 tk
rX } ztdt|ƒ ƒ W Y d d }~X nX x<|D ]4}|j	t
ƒ |jr€|jt
ƒ q`|jt
| j| j ƒ q`W t
dƒ tƒ  yt|ƒ}W n2 tk
rä } ztdt|ƒ ƒ W Y d d }~X nX d}| j�s|jd | j| jt
ƒ�sXd}nJxH| jD ]>}y|j|| j| jt
ƒ�s6d}W n   t
d| ƒ Y nX �qW tj|�rfd	nd
ƒ d S )Nz;PHASE 1--Loading keys to check for internal timing problems)r/   ZzonesrH   z'ERROR: Unable to build key dictionary: z9PHASE 2--Scanning future key events for coverage failuresz#ERROR: Unable to build event list: FTz&ERROR: Coverage check failed for zone r
   r   )r]   r   r   r/   r;   rH   r_   r   r\   Zcheck_prepubr   ÚsepZcheck_postpubrF   rI   r   r   Zcoverager^   rK   r   r   )r   Zkdrb   ÚkeyZelistÚerrorsr;   r   r   r   Úmainü   s:    "

"
rf   )N)Z
__future__r   r.   r   rX   Zglobr#   rG   ZcalendarÚpprintÚcollectionsr   rZ   Ziscr   r   r   r   r   r	   r   r   r   r   r,   r9   r]   rf   r   r   r   r   Ú<module>   s&    	*
x