fc@sgddlZddlZddlZddlmZmZdefdYZdddYZdS(iN(tPopentPIPEtTimePastcBseZdZRS(cCs'tt|jd|||fdS(Ns'%s time for key %s (%d) is already past(tsuperRt__init__(tselftkeytproptvalue((s./usr/lib/python2.7/site-packages/isc/dnskey.pyRs(t__name__t __module__R(((s./usr/lib/python2.7/site-packages/isc/dnskey.pyRstdnskeycBseZdZdGZdIZdJZdHdHdZd Zd!Z e dHdHd"Z d#Z e d$Ze d%ZdHd&Ze d'Ze d(Ze d)Ze d*Zd+Zd,Zd-Zd.Zd/Zd0Zejd1Zd2Zejd3Zd4Zejd5Z d6Z!ejd7Z"d8Z#ejd9Z$d:Z%ejd;Z&d<Z'ejd=Z(d>Z)d?Z*d@Z+dAZ,dBZ-dCZ.dHdDZ/dHdHdEZ0e dFZ1RS(KstAn individual DNSSEC key. Identified by path, name, algorithm, keyid. Contains a dictionary of metadata events.tCreatedtPublishtActivatetInactivetDeletetRevoket DSPublisht SyncPublisht SyncDeletes-Ps-As-Is-Ds-Rs-Psyncs-DsynctRSAMD5tDHtDSAtECCtRSASHA1tNSEC3DSAt NSEC3RSASHA1t RSASHA256t RSASHA512tECCGOSTtECDSAP256SHA256tECDSAP384SHA384tED25519tED448c Cst|trXt|dkrX|p*d|_|\}}}|j||||n|pstjj|psd|_tjj|}|j d\}}}|dd!}t |}t |j dd}|j||||dS(Nit.t+iii( t isinstancettupletlent_dirt fromtupletostpathtdirnametbasenametsplittint(RRt directorytkeyttltnametalgtkeyid((s./usr/lib/python2.7/site-packages/isc/dnskey.pyR&s!!  c Cs|jdr'|}|jd}n |d}d|||f}|j|jr\tjp_d|d}|j|jrtjpd|d}||_||_t||_t||_ ||_ t |d} x| D]} | ddkrqn| j } | sqn| d j dkr=d } ||_n%d} |sYt| d n||_t| | d @d krt|_qt|_qW| jt |d} t|_t|_t|_t|_t|_t|_t|_d|_x| D]} | j} | s| ddkrAqngdD]}| j|^qHt| g}tg|D]}|dkrz|^qz}| | j}| |j dj}||j|RCtpublishtactivateRrRet keygen_cmdRdRyRhRiR?tnewkeyRz((s./usr/lib/python2.7/site-packages/isc/dnskey.pytgenerates: c Ksa|jdt}|js1td|n|dd|jd|jg}|jrt|dt|jg7}n|r|d|g7}n|r|dt|g7}n|sd d j|GHnt |d t d t }|j \}} | r td | ny9|j dj d} t| |j|j} | SWntd|nXdS(NRes'predecessor key %s has no inactive dates-qs-Ks-Ss-Ls-rs-is# RgRhRisunable to generate key: iR|s'unable to generate successor for key %s(RjREtinactiveRpR(R?RCRkRnRRRoRRR ( RRRt prepublishRrReRRyRhRiR?R((s./usr/lib/python2.7/site-packages/isc/dnskey.pytgenerate_successors,  cCsCd}|tttjkr1tj|}n|r;|Sd|S(Ns%03d(ROtrangeR'R t _ALGNAMES(R3R2((s./usr/lib/python2.7/site-packages/isc/dnskey.pytalgstrscCsC|s dS|j}ytjj|SWntk r>dSXdS(N(ROtupperR Rtindext ValueError(R3((s./usr/lib/python2.7/site-packages/isc/dnskey.pytalgnums  cCs|j|p|jS(N(RR3(RR3((s./usr/lib/python2.7/site-packages/isc/dnskey.pytalgnamescCs tj|S(N(ttimetgmtime(tsecs((s./usr/lib/python2.7/site-packages/isc/dnskey.pyR~scCstj|dS(Ns %Y%m%d%H%M%S(Rtstrptime(tstring((s./usr/lib/python2.7/site-packages/isc/dnskey.pyRV scCs tj|S(N(tcalendarttimegm(Rd((s./usr/lib/python2.7/site-packages/isc/dnskey.pyRXscCstjd|S(Ns %Y%m%d%H%M%S(Rtstrftime(Rd((s./usr/lib/python2.7/site-packages/isc/dnskey.pyRWscKsL|jdt}|j||kr)dS|j|dk rr|j||krr| rrt|||j|n|dkr|j|dkrtnt|j|scKs|jd|||dS(NR(R(RRRRr((s./usr/lib/python2.7/site-packages/isc/dnskey.pytsetsyncpublishAscCs |jdS(NR (RM(R((s./usr/lib/python2.7/site-packages/isc/dnskey.pyRDscKs|jd|||dS(NR (R(RRRRr((s./usr/lib/python2.7/site-packages/isc/dnskey.pyt setpublishGscCs |jdS(NR(RM(R((s./usr/lib/python2.7/site-packages/isc/dnskey.pyRJscKs|jd|||dS(NR(R(RRRRr((s./usr/lib/python2.7/site-packages/isc/dnskey.pyt setactivateMscCs |jdS(NR(RM(R((s./usr/lib/python2.7/site-packages/isc/dnskey.pytrevokePscKs|jd|||dS(NR(R(RRRRr((s./usr/lib/python2.7/site-packages/isc/dnskey.pyt setrevokeSscCs |jdS(NR(RM(R((s./usr/lib/python2.7/site-packages/isc/dnskey.pyRVscKs|jd|||dS(NR(R(RRRRr((s./usr/lib/python2.7/site-packages/isc/dnskey.pyt setinactiveYscCs |jdS(NR(RM(R((s./usr/lib/python2.7/site-packages/isc/dnskey.pyRv\scKs|jd|||dS(NR(R(RRRRr((s./usr/lib/python2.7/site-packages/isc/dnskey.pyt setdelete_scCs |jdS(NR(RM(R((s./usr/lib/python2.7/site-packages/isc/dnskey.pyt syncdeletebscKs|jd|||dS(NR(R(RRRRr((s./usr/lib/python2.7/site-packages/isc/dnskey.pyt setsyncdeleteescCsw|dks|j|krdS|jdkrF|j|_||_n-|j|krjd|_||_n ||_dS(N(RORCRP(RRC((s./usr/lib/python2.7/site-packages/isc/dnskey.pytsetttlhs    cCs|jr dSdS(NtKSKtZSK(R>(R((s./usr/lib/python2.7/site-packages/isc/dnskey.pytkeytypetscCsd|j|j|jfS(Ns %s/%s/%05d(R2RR4(R((s./usr/lib/python2.7/site-packages/isc/dnskey.pyt__str__wscCs/d|j|j|j|jr'dndfS(Ns%s/%s/%05d (%s)RR(R2RR4R>(R((s./usr/lib/python2.7/site-packages/isc/dnskey.pyt__repr__{scCs"|jp!|jp!|jS(N(RRR(R((s./usr/lib/python2.7/site-packages/isc/dnskey.pytdatescCsZ|j|jkr"|j|jkS|j|jkrD|j|jkS|j|jkS(N(R2R3R(Rtother((s./usr/lib/python2.7/site-packages/isc/dnskey.pyt__lt__s cCsKd}|s|}nttj}|j}|j}|sLtS|sy||kru|dt|ntS||kr||krtS||kr|dt|tj|j pdftS||kr|dt|tS|j dk rG|||j krG|dt|tj|j p;dftStS(Nc_sdS(N((targsRr((s./usr/lib/python2.7/site-packages/isc/dnskey.pytnoopssFWARNING: Key %s is scheduled for activation but not for publication.sWARNING: %s is scheduled to be published and activated at the same time. This could result in a coverage gap if the zone was previously signed. Activation should be at least %s after publication.sone DNSKEY TTLs0WARNING: Key %s is active before it is publishedsWARNING: Key %s is activated too soon after publication; this could result in coverage gaps due to resolver caches containing old data. Activation should be at least %s after publication.( R/RRRREtreprRDR tdurationRCRO(RtoutputRRtaRy((s./usr/lib/python2.7/site-packages/isc/dnskey.pyt check_prepubs<        " cCs d}|dkr|}n|dkr6|j}ntj}|j}|j}|sdtS|s||kr|dt|ntS||kr||krtS||kr|dt|tS|||kr|dt|tj |ftStS(Nc_sdS(N((RRr((s./usr/lib/python2.7/site-packages/isc/dnskey.pyRssEWARNING: Key %s is scheduled for deletion but not for inactivation.s@WARNING: Key %s is scheduled for deletion before inactivation.sWARNING: Key %s scheduled for deletion too soon after deactivation; this may result in coverage gaps due to resolver caches containing old data. Deletion should be at least %s after inactivation.( RORCRRvRRERRDR R(RRttimespanRRtdti((s./usr/lib/python2.7/site-packages/isc/dnskey.pyt check_postpubs4          cCs|s dSddfddfddfddfddg}g}xj|D]b}||d ||d }}|d krG|jd ||d |d krdndfqGqGWdj|S(Ntyeari<iimtmonthitdaythourtminutetsecondiis%d %s%stsR5s, iiQi3iiQi'iiQi(Ri<(Ri(ROR}Rn(RtunitsRtunittv((s./usr/lib/python2.7/site-packages/isc/dnskey.pyRs       7( sCreatedsPublishsActivatesInactivesDeletesRevokeRs SyncPublishs SyncDeleteN( Ns-Ps-As-Is-Ds-RNs-Psyncs-Dsync(NRRRRRRRRNRNRRR R!R"(2R R t__doc__RURORmRRR)R{t classmethodRRt staticmethodRRRR~RVRXRWRRRRRRRRRRRRRRRRRvRRRRRRRRRRRR(((s./usr/lib/python2.7/site-packages/isc/dnskey.pyR sb M %*                    1)(( R*RRt subprocessRRRpRR (((s./usr/lib/python2.7/site-packages/isc/dnskey.pyt s