ungc@sddlmZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z dZ ddl mZmZmZmZmZmZdZeadZdZd Zdd Zd Zd ZdS( i(tprint_functionN(t defaultdictsdnssec-coverage(tdnskeyt eventlisttkeydicttkeyeventtkeyzonetutilscOst||tjddS(Ni(tprinttsystexit(targstkwargs((s0/usr/lib/python2.7/site-packages/isc/coverage.pytfatals cOskd|kr)|d}|jddnt}tr>tan|rQtdn|rgt||ndS(suoutput text, adding a vertical space this is *not* the first first section being printed since a call to vreset()tskiptN(tpoptNonetTruet _firstlinetFalseR(R R R((s0/usr/lib/python2.7/site-packages/isc/coverage.pytoutput's    cCs tadS(sreset vertical spacingN(RR(((s0/usr/lib/python2.7/site-packages/isc/coverage.pytvreset8scCs@|j}yt|SWntk r-nXtjd}|j|}|setd|n|j\}}t|}|j}|jdr|dS|jdr|dS|jdr|dS|jd r|d S|jd r|d S|jd r|dS|jdr,|Std|dS(s 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 s([0-9][0-9]*)\s*([A-Za-z]*)sCannot parse %styi3tmoi'twi: tdiQthitmii<tssInvalid suffix %sN( tstriptintt ValueErrortretcompiletmatchtgroupstlowert startswith(Rtrtmtntunit((s0/usr/lib/python2.7/site-packages/isc/coverage.pyt parse_timeAs6    cCs|}| s6tjj| s6tj|tj rtjd}|sXtjj}nxc|jtjD]L}tjj ||}tjj|rtj|tjrPnd}qkWn|S(s1 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 tPATHN( tostpathtisfiletaccesstX_OKtenvirontdefpathtsplittpathseptjoinR(tcommandtdefaulttfpathR.t directory((s0/usr/lib/python2.7/site-packages/isc/coverage.pytset_pathks0 ' c Cstdtjjtjdd}tjdtdd}|j ddt dd d dCd d d |j dddd ddt d ddd|j ddddt d ddd|j ddddt d ddd|j ddddt d ddd|j d dd!d d"dt d d#dd|j d$dd%d |dt d d&dd|j d'dd(dt d d)d d*dd|j d+dd,d-d.d t d d/|j d0dd1d-d.d t d d2|j d3d4dd5d-d.d t d d6|j d7d8d-d9d9tj |j}|jrA|jrAtd:n6|jsS|jrn|jrbd;nd<|_n dC|_|jrt|jd=krtd>ny(|jrt|j}||_nWntk rnXy(|jrt|j}||_nWntk rnXy(|jrAt|j}||_nWntk rUnXyS|jr|j}t|j}|d?krdC|_qtj||_nWntk rnX|jr|jr|S|jr_|jr_yMt|jd?|j|j}|jp|j|_|jp+|j|_Wq_tk r[}t d@|j|q_Xn|js~t!dAdB|_n|S(Ds8Read command line arguments, set global 'args' structuresnamed-compilezonetsbint descriptions: checks future sDNSKEY coverage for a zonetzonettypetnargst*R8thelpszone(s) to checks%(default: all zones in the directory)s-KtdestR.t.s&a directory containing keys to processtmetavartdirs-ftfilenameszone master filetfiles-mtmaxttlsthe longest TTL in the zone(s)ttimes-dtkeyttlsthe DNSKEY TTLs-rtresignt1944000s:the RRSIG refresh interval in seconds [default: 22.5 days]s-ct compilezonespath to 'named-compilezone's-lt checklimitt0sDLength of time to check for DNSSEC coverage [default: 0 (unlimited)]s-ztno_ksktactiont store_trues#Only check zone-signing keys (ZSKs)s-ktno_zsks"Only check key-signing keys (KSKs)s-Ds--debugt debug_modesTurn on debugging outputs-vs --versiontversions)ERROR: -z and -k cannot be used together.tKSKtZSKis)ERROR: -f can only be used with one zone.is"Unable to load zone data from %s: sWARNING: Maximum TTL value was not specified. Using 1 week (604800 seconds); re-run with the -m option to get more accurate results.i: N("R;R-R.R6RtprefixtargparsetArgumentParsertprogt add_argumenttstrRRRVt parse_argsRTRQR tkeytypeRGtlenR>RIR+R RKRLRORJRRNt ExceptionRR( RNtparserR R(tkR'tlimR>te((s0/usr/lib/python2.7/site-packages/isc/coverage.pyR_s                             cCst}tdy(td|jd|jd|j}Wn'tk rd}tdt|nXxN|D]F}|j t |j r|j t ql|j t |j |jqlWt dtyt|}Wn'tk r}tdt|nXt}|js:|jd|j|jt st}qnWxT|jD]I}y+|j||j|jt stt}nWqDt d|qDXqDWtj|rd nd dS( Ns;PHASE 1--Loading keys to check for internal timing problemsR.R>RKs'ERROR: Unable to build key dictionary: s9PHASE 2--Scanning future key events for coverage failuress#ERROR: Unable to build event list: s&ERROR: Coverage check failed for zone ii(R_RRR.R>RKRbR R^t check_prepubRtsept check_postpubRIRLRRRtcoverageRR`RORR R (R tkdRftkeytelistterrorsR>((s0/usr/lib/python2.7/site-packages/isc/coverage.pytmains:  (       (t __future__RR-R RZtglobR!RJtcalendartpprintt collectionsRR\tiscRRRRRRR RRRRR+RR;R_Ro(((s0/usr/lib/python2.7/site-packages/isc/coverage.pyt s&        .   *  t