509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
q­Çj @  ã               @   sJ   d dl Z d dlZd dlZd dlmZmZ G dd„ deƒZG dd„ dƒZdS )é    N)ÚPopenÚPIPEc                   s   e Zd Z‡ fdd„Z‡  ZS )ÚTimePastc                s   t t| ƒjd|||f ƒ d S )Nz'%s time for key %s (%d) is already past)Úsuperr   Ú__init__)ÚselfÚkeyÚpropÚvalue)Ú	__class__© ú/usr/lib/python3.6/dnskey.pyr      s    zTimePast.__init__)Ú__name__Ú
__module__Ú__qualname__r   Ú__classcell__r   r   )r   r   r      s   r   c               @   s¾  e Zd ZdZdqZdrZdsZdtd!d"„Zd#d$„ Zd%d&„ Z	e
dud'd(„ƒZd)d*„ Zed+d,„ ƒZed-d.„ ƒZdvd/d0„Zed1d2„ ƒZed3d4„ ƒZed5d6„ ƒZed7d8„ ƒZd9d:„ Zd;d<„ Zd=d>„ Zd?d@„ ZdAdB„ ZdCdD„ Zejƒ fdEdF„ZdGdH„ Zejƒ fdIdJ„ZdKdL„ Zejƒ fdMdN„Z dOdP„ Z!ejƒ fdQdR„Z"dSdT„ Z#ejƒ fdUdV„Z$dWdX„ Z%ejƒ fdYdZ„Z&d[d\„ Z'ejƒ fd]d^„Z(d_d`„ Z)dadb„ Z*dcdd„ Z+dedf„ Z,dgdh„ Z-didj„ Z.dwdkdl„Z/dxdmdn„Z0edodp„ ƒZ1dS )yÚdnskeyztAn individual DNSSEC key.  Identified by path, name, algorithm, keyid.
    Contains a dictionary of metadata events.ÚCreatedÚPublishÚActivateÚInactiveÚDeleteÚRevokeÚ	DSPublishÚSyncPublishÚ
SyncDeleteNú-Pú-Aú-Iú-Dú-Rú-Psyncú-DsyncÚRSAMD5ÚDHÚDSAÚECCÚRSASHA1ÚNSEC3DSAÚNSEC3RSASHA1Ú	RSASHA256Ú	RSASHA512ÚECCGOSTÚECDSAP256SHA256ÚECDSAP384SHA384ÚED25519ÚED448c             C   s¦   t |tƒr:t|ƒdkr:|pd| _|\}}}| j||||ƒ |pLtjj|ƒpLd| _tjj|ƒ}|j	dƒ\}}}|dd… }t
|ƒ}t
|j	dƒd ƒ}| j||||ƒ d S )Né   Ú.ú+é   r   éÿÿÿÿ)Ú
isinstanceÚtupleÚlenÚ_dirÚ	fromtupleÚosÚpathÚdirnameÚbasenameÚsplitÚint)r   r   Z	directoryÚkeyttlÚnameÚalgÚkeyidr   r   r   r   &   s    

zdnskey.__init__c                s¨  |j dƒr|}|jdƒ}n|d }d|||f }| j| jr@tjpBd | d }| j| jr^tjp`d | d }|| _|| _t|ƒ| _t|ƒ| _	|| _
t|dƒ}	x‚|	D ]z‰ ˆ d dkr´q¢ˆ jƒ }
|
sÂq¢|
d	 jƒ dkrÞd}|| _nd}|sòt|
d	 ƒn|| _t|
| ƒd	@ d	k�rd| _q¢d| _q¢W |	jƒ  t|dƒ}tƒ | _tƒ | _tƒ | _tƒ | _tƒ | _tƒ | _tƒ | _d | _xŽ|D ]†‰ ˆ jƒ ‰ ˆ  �svˆ d dk�rœ�qv‡ fdd„dD ƒtˆ ƒg }tdd„ |D ƒƒ}ˆ d |… jƒ }ˆ |d … jdƒjƒ }|| j|< �qvW xštjD ]�}d| j|< || jk�rn| j| j| ƒ}|| j|< | j |ƒ| j|< | j!|ƒ| j|< | j| | j|< n(d | j|< d | j|< d | j|< d | j|< �qW |jƒ  d S )Nr2   zK%s+%03d+%05dÚ z.keyz.privateÚrr   ú;r4   ÚinÚchÚhsr1   é   TFZrUz!#c                s   g | ]}ˆ j |ƒ‘qS r   )Úfind)Ú.0Úc)Úliner   r   ú
<listcomp>l   s    z$dnskey.fromtuple.<locals>.<listcomp>z:= c             S   s   g | ]}|dkr|‘qS )r4   r5   r   )rM   Úposr   r   r   rP   m   s    )rH   rI   rJ   )"ÚendswithÚrstripr9   r;   ÚsepÚkeystrrB   r@   rC   rD   ÚfullnameÚopenr?   ÚlowerÚttlÚcloseÚdictZmetadataÚ_changedÚ_deleteÚ_timesÚ_fmttimeÚ_timestampsÚ	_originalÚ_origttlÚstripr8   ÚminÚlstripr   Ú_PROPSÚ	parsetimeÚ
formattimeÚepochfromtime)r   rB   rC   rD   rA   rV   rU   Zkey_fileZprivate_fileZkfpÚtokensZseptokenZpfpZpunctuationÚfoundr
   r	   Útr   )rO   r   r:   5   sv    












zdnskey.fromtuplec             K   sr  |j ddƒ}g }d}| jd k	r0|dt| jƒg7 }xlttjtjƒD ]Z\}}| s@| j|  r\q@d}|| j	krx| j	| rxd}|r€dn| j
| }	|||	g7 }d}q@W |�rn|d| jg| | jg }
|sÒtddj|
ƒ ƒ y0t|
ttd	�}|jƒ \}}|�r tt|ƒƒ‚W n8 tk
�r: } ztd
|t|ƒf ƒ‚W Y d d }~X nX d | _x*tjD ] }| j| | j|< d| j|< �qJW d S )NÚquietFTz-LZnonez-Kz# ú )ÚstdoutÚstderrzunable to run %s: %s)Úgetrb   ÚstrrY   Úzipr   rf   Ú_OPTSr\   r]   r_   r9   rU   ÚprintÚjoinr   r   ÚcommunicateÚ	Exceptionr`   ra   )r   Zsettime_binÚkwargsrm   ÚcmdÚfirstr	   ÚoptÚdeleteZwhenZfullcmdÚpro   rp   Úer   r   r   Úcommit‚   s<    
"zdnskey.commitc             K   sL  |j ddƒ}|dd|dt|ƒg}|r0|d|g7 }|r>|jdƒ |rN|d|g7 }|rb|d	t|ƒg7 }|	r‚tj|	ƒ}|d
tj|ƒg7 }|
r¢tj|
ƒ}|dtj|
ƒg7 }|j|ƒ |sÂtddj|ƒ ƒ t|t	t	d�}|j
ƒ \}}|rðtdt|ƒ ƒ‚y"|jƒ d jdƒ}t|||ƒ}|S  tk
�rF } ztdt|ƒ ƒ‚W Y d d }~X nX d S )Nrm   Fz-qz-Kz-Lz-rz-fkz-az-bz-Pz-Az# rn   )ro   rp   zunable to generate key: r   Úasciiz!unable to parse generated key: %s)rq   rr   Úappendr   Útimefromepochrh   ru   rv   r   r   rw   rx   Ú
splitlinesÚdecode)ÚclsÚ
keygen_binÚ	randomdevZkeys_dirrB   rC   ZkeysizerT   rY   ÚpublishÚactivatery   rm   Ú
keygen_cmdrl   r~   ro   rp   rU   Únewkeyr   r   r   r   Úgenerate§   s:    



zdnskey.generatec          
   K   sô   |j ddƒ}| jƒ s td|  ƒ‚|dd| jd| jg}| jrL|dt| jƒg7 }|r\|d|g7 }|rp|d	t|ƒg7 }|s†td
dj|ƒ ƒ t	|t
t
d�}|jƒ \}}	|	r°td|	 ƒ‚y&|jƒ d jdƒ}
t|
| j| jƒ}|S    td|  ƒ‚Y nX d S )Nrm   Fz'predecessor key %s has no inactive datez-qz-Kz-Sz-Lz-rz-iz# rn   )ro   rp   zunable to generate key: r   r�   z'unable to generate successor for key %s)rq   Úinactiverx   r9   rU   rY   rr   ru   rv   r   r   rw   r„   r…   r   )r   r‡   rˆ   Z
prepublishry   rm   r‹   r~   ro   rp   rU   rŒ   r   r   r   Úgenerate_successorÓ   s,    zdnskey.generate_successorc             C   s0   d }| t ttjƒƒkr tj|  }|r(|S d|  S )Nz%03d)Úranger8   r   Ú	_ALGNAMES)rC   rB   r   r   r   Úalgstró   s    
zdnskey.algstrc             C   s6   | sd S | j ƒ } ytjj| ƒS  tk
r0   d S X d S )N)Úupperr   r‘   ÚindexÚ
ValueError)rC   r   r   r   Úalgnumú   s    zdnskey.algnumc             C   s   | j |p| jƒS )N)r’   rC   )r   rC   r   r   r   Úalgname  s    zdnskey.algnamec             C   s
   t j| ƒS )N)ÚtimeZgmtime)Úsecsr   r   r   rƒ     s    zdnskey.timefromepochc             C   s   t j| dƒS )Nz%Y%m%d%H%M%S)r˜   Zstrptime)Ústringr   r   r   rg     s    zdnskey.parsetimec             C   s
   t j| ƒS )N)ÚcalendarZtimegm)rl   r   r   r   ri     s    zdnskey.epochfromtimec             C   s   t jd| ƒS )Nz%Y%m%d%H%M%S)r˜   Zstrftime)rl   r   r   r   rh     s    zdnskey.formattimec             K   sö   |j ddƒ}| j| |krd S | j| d k	rR| j| |k rR| rRt| || j| ƒ‚|d kr¢| j| d krldnd| j|< d| j|< d | j|< d | j|< d | j|< d S | j|ƒ}|| j|< || j|< | j	|ƒ| j|< | j| | j| krèdnd| j|< d S )NÚforceFT)
rq   r`   ra   r   r\   r]   r^   r_   rƒ   rh   )r   r	   r™   Únowry   rœ   rl   r   r   r   Úsetmeta  s$    






zdnskey.setmetac             C   s
   | j | S )N)r^   )r   r	   r   r   r   Úgettime2  s    zdnskey.gettimec             C   s
   | j | S )N)r_   )r   r	   r   r   r   Ú
getfmttime5  s    zdnskey.getfmttimec             C   s
   | j | S )N)r`   )r   r	   r   r   r   Úgettimestamp8  s    zdnskey.gettimestampc             C   s
   | j d S )Nr   )r`   )r   r   r   r   Úcreated;  s    zdnskey.createdc             C   s
   | j d S )Nr   )r`   )r   r   r   r   Úsyncpublish>  s    zdnskey.syncpublishc             K   s   | j d||f|Ž d S )Nr   )rž   )r   r™   r�   ry   r   r   r   ÚsetsyncpublishA  s    zdnskey.setsyncpublishc             C   s
   | j d S )Nr   )r`   )r   r   r   r   r‰   D  s    zdnskey.publishc             K   s   | j d||f|Ž d S )Nr   )rž   )r   r™   r�   ry   r   r   r   Ú
setpublishG  s    zdnskey.setpublishc             C   s
   | j d S )Nr   )r`   )r   r   r   r   rŠ   J  s    zdnskey.activatec             K   s   | j d||f|Ž d S )Nr   )rž   )r   r™   r�   ry   r   r   r   ÚsetactivateM  s    zdnskey.setactivatec             C   s
   | j d S )Nr   )r`   )r   r   r   r   ÚrevokeP  s    zdnskey.revokec             K   s   | j d||f|Ž d S )Nr   )rž   )r   r™   r�   ry   r   r   r   Ú	setrevokeS  s    zdnskey.setrevokec             C   s
   | j d S )Nr   )r`   )r   r   r   r   rŽ   V  s    zdnskey.inactivec             K   s   | j d||f|Ž d S )Nr   )rž   )r   r™   r�   ry   r   r   r   ÚsetinactiveY  s    zdnskey.setinactivec             C   s
   | j d S )Nr   )r`   )r   r   r   r   r}   \  s    zdnskey.deletec             K   s   | j d||f|Ž d S )Nr   )rž   )r   r™   r�   ry   r   r   r   Ú	setdelete_  s    zdnskey.setdeletec             C   s
   | j d S )Nr   )r`   )r   r   r   r   Ú
syncdeleteb  s    zdnskey.syncdeletec             K   s   | j d||f|Ž d S )Nr   )rž   )r   r™   r�   ry   r   r   r   Úsetsyncdeletee  s    zdnskey.setsyncdeletec             C   sR   |d ks| j |krd S | jd kr0| j | _|| _ n| j|krHd | _|| _ n|| _ d S )N)rY   rb   )r   rY   r   r   r   Úsetttlh  s    

zdnskey.setttlc             C   s   | j r
dS dS )NÚKSKÚZSK)rT   )r   r   r   r   Úkeytypet  s    zdnskey.keytypec             C   s   d| j | jƒ | jf S )Nz
%s/%s/%05d)rB   r—   rD   )r   r   r   r   Ú__str__w  s    zdnskey.__str__c             C   s"   d| j | jƒ | j| jrdndf S )Nz%s/%s/%05d (%s)r®   r¯   )rB   r—   rD   rT   )r   r   r   r   Ú__repr__{  s    zdnskey.__repr__c             C   s   | j ƒ p| jƒ p| jƒ S )N)rŠ   r‰   r¢   )r   r   r   r   Údate€  s    zdnskey.datec             C   s@   | j |j kr| j |j k S | j|jkr0| j|jk S | jƒ |jƒ k S )N)rB   rC   r³   )r   Úotherr   r   r   Ú__lt__‡  s
    zdnskey.__lt__c             C   sð   dd„ }|s|}t tjƒ ƒ}| jƒ }| jƒ }|s4dS |sT||krP|dt| ƒ ƒ dS ||krh||krhdS ||kr”|dt| ƒtj| jƒpˆdf ƒ dS ||k r°|dt| ƒ ƒ dS | jd k	rì|| | jk rì|d	t| ƒtj| jƒpàdf ƒ dS dS )
Nc              _   s   d S )Nr   )Úargsry   r   r   r   Únoop�  s    z!dnskey.check_prepub.<locals>.noopFzFWARNING: Key %s is scheduled for
	 activation but not for publication.TzËWARNING: %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.zone DNSKEY TTLz0WARNING: Key %s is active before it is publishedzÄWARNING: 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@   r˜   rŠ   r‰   Úreprr   ÚdurationrY   )r   Úoutputr·   r�   Úar~   r   r   r   Úcheck_prepubŽ  s<    zdnskey.check_prepubc             C   sÜ   dd„ }|d kr|}|d kr"| j }|d kr>|dt| ƒ ƒ d}tjƒ }| jƒ }| jƒ }|s^dS |s~||krz|dt| ƒ ƒ dS ||k r’||k r’dS ||k r®|d	t| ƒ ƒ dS || |k rØ|d
t| ƒtj|ƒf ƒ dS dS )Nc              _   s   d S )Nr   )r¶   ry   r   r   r   r·   À  s    z"dnskey.check_postpub.<locals>.noopz"WARNING: Key %s using default TTL.é<   é   FzEWARNING: Key %s is scheduled for
	 deletion but not for inactivation.Tz@WARNING: Key %s is scheduled for
	 deletion before inactivation.zÍWARNING: 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.i  i€Q )rY   r¸   r˜   r}   rŽ   r   r¹   )r   rº   Ztimespanr·   r�   ÚdÚir   r   r   Úcheck_postpub¿  s:    zdnskey.check_postpubc             C   sz   | sd S ddddddg}g }xR|D ]J}| |d  | |d   }} |dkr"|j d||d |dkrbdndf ƒ q"W dj|ƒS ) NÚyearr½   r¾   im  Úmonthé   ÚdayÚhourÚminuteÚsecondr4   r   z%d %s%sÚsrE   z, i  i€Q é€3á)rÂ   rÊ   i  i€Q é �' )rÃ   rË   i  é€Q )rÅ   rÌ   é  )rÆ   rÍ   )rÇ   r½   )rÈ   r4   )r‚   rv   )r™   Zunitsrº   ZunitÚvr   r   r   r¹   ì  s    
(zdnskey.duration)	r   r   r   r   r   r   r   r   r   )	Nr   r   r   r   r    Nr!   r"   )Nr#   r$   r%   r&   r'   r(   r)   r*   Nr+   Nr,   r-   r.   r/   r0   )NN)NN)N)N)NN)2r   r   r   Ú__doc__rf   rt   r‘   r   r:   r€   Úclassmethodr�   r�   Ústaticmethodr’   r–   r—   rƒ   rg   ri   rh   rž   rŸ   r    r¡   r¢   r£   r˜   r¤   r‰   r¥   rŠ   r¦   r§   r¨   rŽ   r©   r}   rª   r«   r¬   r­   r°   r±   r²   r³   rµ   r¼   rÁ   r¹   r   r   r   r   r      sb       
M%* 


1
-r   )	r;   r˜   r›   Ú
subprocessr   r   rx   r   r   r   r   r   r   Ú<module>   s
   