509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
r­Çj2g  ã               @   s:  d dl Z d dljZd dljZd dlT d dlmZ G dd„ dƒZG dd„ dƒZG dd	„ d	e	ƒZ
G d
d„ dƒZedk�r6d dlZejd dkr¾eejd ƒZejƒ Zejƒ  edd�Zejeƒ nxejd dk�r6y4eejd ddd�Zeejd ƒ eejdƒƒ W n2 e	k
�r4 Z zeejd  ƒ W Y ddZ[X nX dS )é    N)Ú*)Úcopyc               @   sˆ   e Zd Zd3Zed4 Zi ZdZdZdZdZ	dZ
dd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2S )5Ú	PolicyLexÚPOLICYÚALGORITHM_POLICYÚZONEÚ	ALGORITHMÚ	DIRECTORYÚKEYTTLÚKEY_SIZEÚROLL_PERIODÚPRE_PUBLISHÚPOST_PUBLISHÚCOVERAGEÚSTANDBYÚNONEÚ
DATESUFFIXÚKEYTYPEÚALGNAMEÚSTRÚQSTRINGÚNUMBERÚLBRACEÚRBRACEÚSEMIz 	z	(//|\#).*z\{z\}ú;c             C   s   |j  j|jjdƒ7  _dS )z\n+Ú
N)ÚlexerÚlinenoÚvalueÚcount)ÚselfÚt© r#   ú/usr/lib/python3.6/policy.pyÚ	t_newline7   s    zPolicyLex.t_newlinec             C   s   |j  j|jjdƒ7  _dS )z/\*(.|\n)*?\*/r   N)r   r   r   r    )r!   r"   r#   r#   r$   Ú	t_comment;   s    zPolicyLex.t_commentc             C   s   t jd|jƒjdƒjƒ |_|S )z°(?i)(?<=[0-9 \t])(y(?:ears|ear|ea|e)?|mo(?:nths|nth|nt|n)?|w(?:eeks|eek|ee|e)?|d(?:ays|ay|a)?|h(?:ours|our|ou|o)?|mi(?:nutes|nute|nut|nu|n)?|s(?:econds|econd|econ|eco|ec|e)?)\bz(?i)(y|mo|w|d|h|mi|s)([a-z]*)é   )ÚreÚmatchr   ÚgroupÚlower)r!   r"   r#   r#   r$   Út_DATESUFFIX?   s    zPolicyLex.t_DATESUFFIXc             C   s   |j jƒ |_ |S )z(?i)\b(KSK|ZSK)\b)r   Úupper)r!   r"   r#   r#   r$   Ú	t_KEYTYPED   s    zPolicyLex.t_KEYTYPEc             C   s   |j jƒ |_ |S )zƒ(?i)\b(RSAMD5|DH|DSA|NSEC3DSA|ECC|RSASHA1|NSEC3RSASHA1|RSASHA256|RSASHA512|ECCGOST|ECDSAP256SHA256|ECDSAP384SHA384|ED25519|ED448)\b)r   r-   )r!   r"   r#   r#   r$   Ú	t_ALGNAMEI   s    zPolicyLex.t_ALGNAMEc             C   s   | j j|jdƒ|_|S )z[A-Za-z._-][\w._-]*r   )Úreserved_mapÚgetr   Útype)r!   r"   r#   r#   r$   Út_STRN   s    zPolicyLex.t_STRc             C   s&   | j j|jdƒ|_|jdd… |_|S )z"([^"\n]|(\\"))*"r   r'   éÿÿÿÿ)r0   r1   r   r2   )r!   r"   r#   r#   r$   Ú	t_QSTRINGS   s    zPolicyLex.t_QSTRINGc             C   s   t |jƒ|_|S )z\d+)Úintr   )r!   r"   r#   r#   r$   Út_NUMBERY   s    zPolicyLex.t_NUMBERc             C   s"   t d|jd  ƒ |jjdƒ d S )NzIllegal character '%s'r   r'   )Úprintr   r   Úskip)r!   r"   r#   r#   r$   Út_error^   s    zPolicyLex.t_errorc             K   sb   dt tƒkrtjddƒ}n
tddƒ}x"| jD ]}|| j|jƒ j|ƒ< q,W tjf d| i|—Ž| _d S )NÚ	maketransÚ_ú-Úobject)	ÚdirÚstrr;   Úreservedr0   r+   Ú	translateÚlexr   )r!   ÚkwargsZtransÚrr#   r#   r$   Ú__init__b   s    
zPolicyLex.__init__c             C   s.   | j j|ƒ x| j jƒ }|sP t|ƒ qW d S )N)r   ÚinputÚtokenr8   )r!   Útextr"   r#   r#   r$   Útestk   s    
zPolicyLex.testN)r   r   r   r   r	   r
   r   r   r   r   r   r   r   )	r   r   r   r   r   r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__rA   Útokensr0   Zt_ignoreZt_ignore_olcommentZt_LBRACEZt_RBRACEZt_SEMIr%   r&   r,   r.   r/   r3   r5   r7   r:   rF   rJ   r#   r#   r#   r$   r      sN                      	r   c               @   s¸   e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZdZddgddgddgddgddgddgddgddddddœZddd„Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚPolicyFNi   i   i   )ÚDSAÚNSEC3DSAÚRSAMD5ÚRSASHA1ÚNSEC3RSASHA1Ú	RSASHA256Ú	RSASHA512ÚECCGOSTÚECDSAP256SHA256ÚECDSAP384SHA384ÚED25519ÚED448c             C   s   || _ || _|| _d S )N)ÚnameÚ	algorithmÚparent)r!   r\   r]   r^   r#   r#   r$   rF   ”   s    zPolicy.__init__c             C   sF  d| j rdp"| jrdp"| jr dp"d| jp*d| jr8| jjp:d| jrRdt| jƒ d pTd| jp\d| jrlt| jƒpnd| j	r~t| j	ƒp€d| j
r�t| j
ƒp’d| jr¢t| jƒp¤d| jr´t| jƒp¶d| jrÆt| jƒpÈd| jrØt| jƒpÚd| jrêt| jƒpìd| jrüt| jƒpþd| j�rt| jƒ�pd| j�r(t| jƒ�p*d| j�r>t| jƒ�p@df S )	Na  %spolicy %s:
	inherits %s
	directory %s
	algorithm %s
	coverage %s
	ksk_keysize %s
	zsk_keysize %s
	ksk_rollperiod %s
	zsk_rollperiod %s
	ksk_prepublish %s
	ksk_postpublish %s
	zsk_prepublish %s
	zsk_postpublish %s
	ksk_standby %s
	zsk_standby %s
	keyttl %s
zconstructed zzone z
algorithm Ú ZUNKNOWNÚNoneú")Úis_constructedÚis_zoneÚis_algr\   r^   Ú	directoryr@   r]   ÚcoverageÚksk_keysizeÚzsk_keysizeÚksk_rollperiodÚzsk_rollperiodÚksk_prepublishÚksk_postpublishÚzsk_prepublishÚzsk_postpublishÚksk_standbyÚzsk_standbyÚkeyttl)r!   r#   r#   r$   Ú__repr__š   s(    

zPolicy.__repr__c             C   s    |d |  ko|d kS   S )Nr   r'   r#   )r!   Zkey_sizeZ
size_ranger#   r#   r$   Z__verify_sizeÀ   s    zPolicy.__verify_sizec             C   s   | j S )N)r\   )r!   r#   r#   r$   Úget_nameÃ   s    zPolicy.get_namec             C   s   | j S )N)rb   )r!   r#   r#   r$   ÚconstructedÆ   s    zPolicy.constructedc             C   s$  | j r:| jdk	r:| j| j kr:t| j ƒ dd| j| j f fS | j rj| jdk	rj| j| j krjdd| j| j f fS | jrš| jdk	rš| j| jkršdd| j| jf fS | jrÊ| jdk	rÊ| j| jkrÊdd| j| jf fS | j oì| joì| joì| j| j | j k�rdd| j| j| j f fS | j�rL| j�rL| j�rL| j| j | jk�rLdd| j| j| jf fS | jdk	�r | jj	| jƒ}|dk	�r´| j
| j|ƒ�s’dd
| j|f fS | j
| j|ƒ�s´dd| j|f fS | jdk�rÞ| jd dk�rÞdd| j fS | jdk�r| jd dk�rdd| j fS | jd k�r d| _d| _d!S )"zr Check if the values in the policy make sense
        :return: True/False if the policy passes validation
        NFz6KSK pre-publish period (%d) exceeds rollover period %dz7KSK post-publish period (%d) exceeds rollover period %dz6ZSK pre-publish period (%d) exceeds rollover period %dz7ZSK post-publish period (%d) exceeds rollover period %dz%KSK pre/post-publish periods (%d/%d) z"combined exceed rollover period %dz%ZSK pre/post-publish periods (%d/%d) z&KSK key size %d outside valid range %sz&ZSK key size %d outside valid range %srP   rQ   é@   r   z$KSK key size %d not divisible by 64 zas required for DSAz$ZSK key size %d not divisible by 64 rW   rX   rY   rZ   r[   Tr_   zGKSK pre/post-publish periods (%d/%d) combined exceed rollover period %dzGZSK pre/post-publish periods (%d/%d) combined exceed rollover period %d)rP   rQ   z7KSK key size %d not divisible by 64 as required for DSA)rP   rQ   z7ZSK key size %d not divisible by 64 as required for DSA)rW   rX   rY   rZ   r[   )Tr_   )ri   rk   r8   rl   rj   rm   rn   r]   Úvalid_key_sz_per_algor1   Ú_Policy__verify_sizerg   rh   )r!   Zkey_sz_ranger#   r#   r$   ÚvalidateÉ   sŒ    




  
     zPolicy.validate)NNN)rK   rL   rM   rc   rd   rb   ri   rj   rk   rm   rl   rn   rg   rh   ro   rp   rq   rf   re   rv   rF   rr   rw   rs   rt   rx   r#   r#   r#   r$   rO   v   sD   
&rO   c               @   s   e Zd ZdS )ÚPolicyExceptionN)rK   rL   rM   r#   r#   r#   r$   ry   )  s   ry   c               @   s.  e Zd Zi Zi Zi ZdZdZdZdEdd„Z	dd„ Z
dd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Z d3d4„ Z!d5d6„ Z"d7d8„ Z#d9d:„ Z$d;d<„ Z%d=d>„ Z&d?d@„ Z'dAdB„ Z(dCdD„ Z)dS )FÚdnssec_policyNTc             K   sÄ  t ƒ | _| jj| _d|kr"d|d< d|kr2d|d< tjf d| i|—Ž| _| jdƒ tƒ }d |_d|_d|_	d|_
t|ƒ| jd< d| jd _d| jd _d	| jd _	t|ƒ| jd
< d
| jd
 _d
| jd
 _d	| jd
 _	t|ƒ| jd< d| jd _d| jd _t|ƒ| jd< d| jd _d| jd _t|ƒ| jd< d| jd _d| jd _t|ƒ| jd< d| jd _d| jd _t|ƒ| jd< d| jd _d| jd _t|ƒ| jd< d| jd _d| jd _t|ƒ| jd< d| jd _d| jd _d | jd _	d | jd _
t|ƒ| jd< d| jd _d| jd _d | jd _	d | jd _
t|ƒ| jd< d| jd _d| jd _d | jd _	d | jd _
t|ƒ| jd< d| jd _d| jd _d | jd _	d | jd _
|�rÀ| j|ƒ d S )NÚdebugFÚwrite_tablesÚmodulea  policy global { algorithm rsasha256;
                                      key-size ksk 2048;
                                      key-size zsk 2048;
                                      roll-period ksk 0;
                                      roll-period zsk 1y;
                                      pre-publish ksk 1mo;
                                      pre-publish zsk 1mo;
                                      post-publish ksk 1mo;
                                      post-publish zsk 1mo;
                                      standby ksk 0;
                                      standby zsk 0;
                                      keyttl 1h;
                                      coverage 6mo; };
                      policy default { policy global; };Ti   rP   i   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   )r   ÚplexrN   ÚyaccÚparserÚsetuprO   r]   rd   rg   rh   r   Ú
alg_policyr\   Úload)r!   ÚfilenamerD   Úpr#   r#   r$   rF   4  s|    
zdnssec_policy.__init__c          	   C   sH   || _ d| _t|ƒ�$}|jƒ }d| jj_| jj|ƒ W d Q R X d | _ d S )NTr   )	r„   ÚinitialÚopenÚreadr~   r   r   r€   Úparse)r!   r„   ÚfrI   r#   r#   r$   rƒ   “  s    

zdnssec_policy.loadc             C   s    d| _ d| jj_| jj|ƒ d S )NTr   )r†   r~   r   r   r€   r‰   )r!   rI   r#   r#   r$   r�   �  s    
zdnssec_policy.setupc       	      K   s`  |j ƒ }d }|| jkr | j| }|d krBt| jd ƒ}||_d|_|jd kr„|jpZ| jd }x|rr|j rr|j}q^W |r~|jp€d |_|j| jkrž| j|j }nt	dƒ‚|j
d krè|jp¾| jd }x|d k	rÚ|j
 rÚ|j}qÂW |oä|j
|_
|jd k�r:|j�p| jd }x|�r"|j �r"|j}�qW |�r2|j�p6|j|_|jd k�rŽ|j�pV| jd }x|j�rv|j �rv|j}�qZW |�r†|j�pŠ|j|_|jd k�râ|j�pª| jd }x|j�rÊ|j �rÊ|j}�q®W |�rÚ|j�pÞ|j|_|jd k�r6|j�pþ| jd }x|j�r|j �r|j}�qW |�r.|j�p2|j|_|jd k�rŠ|j�pR| jd }x|j�rr|j �rr|j}�qVW |�r‚|j�p†|j|_|jd k�rÞ|j�p¦| jd }x|j�rÆ|j �rÆ|j}�qªW |�rÖ|j�pÚ|j|_|jd k�r2|j�pú| jd }x|j�r|j �r|j}�qþW |�r*|j�p.|j|_|jd k�r†|j�pN| jd }x|j�rn|j �rn|j}�qRW |�r~|j�p‚|j|_|jd k�rÚ|j�p¢| jd }x|j�rÂ|j �rÂ|j}�q¦W |�rÒ|j�pÖ|j|_|jd k�r(|j�pö| jd }x |d k	�r|j �r|j}�qúW |�o$|j|_d|k�s>|d  �r\|jƒ \}}|�s\t	|ƒ‚d S |S )NÚdefaultTzalgorithm not foundZ
novalidate)r+   Úzone_policyr   Únamed_policyr\   rb   r]   r^   r‚   ry   re   rf   rg   rh   ri   rj   rk   rm   rl   rn   rq   rx   )	r!   ZzonerD   Úzr…   r^   ZapZvalidÚmsgr#   r#   r$   Úpolicy¢  s¦    





zdnssec_policy.policyc             C   s   dS )zBpolicylist : init policy
                      | policylist policyNr#   )r!   r…   r#   r#   r$   Úp_policylist
  s    zdnssec_policy.p_policylistc             C   s
   d| _ dS )zinit :FN)r†   )r!   r…   r#   r#   r$   Úp_init  s    zdnssec_policy.p_initc             C   s   dS )zTpolicy : alg_policy
                  | zone_policy
                  | named_policyNr#   )r!   r…   r#   r#   r$   Úp_policy  s    zdnssec_policy.p_policyc             C   s   |d |d< dS )zAname : STR
                | KEYTYPE
                | DATESUFFIXr'   r   Nr#   )r!   r…   r#   r#   r$   Úp_name  s    zdnssec_policy.p_namec             C   s,   |d j ƒ |d< tjd|d ƒs(tdƒ‚dS )zcdomain : STR
                  | QSTRING
                  | KEYTYPE
                  | DATESUFFIXr'   r   z^[\w.-][\w.-]*$zinvalid domainN)Ústripr(   r)   ry   )r!   r…   r#   r#   r$   Úp_domain   s    zdnssec_policy.p_domainc             C   s   t ƒ | _dS )znew_policy :N)rO   Úcurrent)r!   r…   r#   r#   r$   Úp_new_policy*  s    zdnssec_policy.p_new_policyc             C   s(   |d | j _d| j _| j | j|d < dS )zFalg_policy : ALGORITHM_POLICY ALGNAME new_policy alg_option_group SEMIé   TN)r—   r\   rd   r‚   )r!   r…   r#   r#   r$   Úp_alg_policy.  s    zdnssec_policy.p_alg_policyc             C   s8   |d j dƒ| j_d| j_| j| j|d j dƒjƒ < dS )z=zone_policy : ZONE domain new_policy policy_option_group SEMIr™   Ú.TN)Úrstripr—   r\   rc   rŒ   r+   )r!   r…   r#   r#   r$   Úp_zone_policy5  s    zdnssec_policy.p_zone_policyc             C   s$   |d | j _| j | j|d jƒ < dS )z>named_policy : POLICY name new_policy policy_option_group SEMIr™   N)r—   r\   r�   r+   )r!   r…   r#   r#   r$   Úp_named_policy<  s    zdnssec_policy.p_named_policyc             C   s   |d |d< dS )zduration : NUMBERr'   r   Nr#   )r!   r…   r#   r#   r$   Úp_duration_1B  s    zdnssec_policy.p_duration_1c             C   s   d|d< dS )zduration : NONENr   r#   )r!   r…   r#   r#   r$   Úp_duration_2G  s    zdnssec_policy.p_duration_2c             C   sÚ   |d dkr|d d |d< n¸|d dkr<|d d |d< nš|d dkrZ|d d	 |d< n||d d
krx|d d |d< n^|d dkr–|d d |d< n@|d dkr´|d d |d< n"|d dkrÎ|d |d< nt dƒ‚dS )zduration : NUMBER DATESUFFIXr™   Úyr'   i€3ár   Úmoi �' Úwi€:	 Údi€Q Úhi  Zmié<   Úszinvalid durationN)ry   )r!   r…   r#   r#   r$   Úp_duration_3L  s    zdnssec_policy.p_duration_3c             C   s   dS )z6policy_option_group : LBRACE policy_option_list RBRACENr#   )r!   r…   r#   r#   r$   Úp_policy_option_group_  s    z#dnssec_policy.p_policy_option_groupc             C   s   dS )zmpolicy_option_list : policy_option SEMI
                              | policy_option_list policy_option SEMINr#   )r!   r…   r#   r#   r$   Úp_policy_option_listc  s    z"dnssec_policy.p_policy_option_listc             C   s   dS )a¥  policy_option : parent_option
                         | directory_option
                         | coverage_option
                         | rollperiod_option
                         | prepublish_option
                         | postpublish_option
                         | keysize_option
                         | algorithm_option
                         | keyttl_option
                         | standby_optionNr#   )r!   r…   r#   r#   r$   Úp_policy_optionh  s    zdnssec_policy.p_policy_optionc             C   s   dS )z0alg_option_group : LBRACE alg_option_list RBRACENr#   )r!   r…   r#   r#   r$   Úp_alg_option_groupu  s    z dnssec_policy.p_alg_option_groupc             C   s   dS )z^alg_option_list : alg_option SEMI
                           | alg_option_list alg_option SEMINr#   )r!   r…   r#   r#   r$   Úp_alg_option_listy  s    zdnssec_policy.p_alg_option_listc             C   s   dS )a  alg_option : coverage_option
                      | rollperiod_option
                      | prepublish_option
                      | postpublish_option
                      | keyttl_option
                      | keysize_option
                      | standby_optionNr#   )r!   r…   r#   r#   r$   Úp_alg_option~  s    zdnssec_policy.p_alg_optionc             C   s   | j |d jƒ  | j_dS )zparent_option : POLICY namer™   N)r�   r+   r—   r^   )r!   r…   r#   r#   r$   Úp_parent_optionˆ  s    zdnssec_policy.p_parent_optionc             C   s   |d | j _dS )z$directory_option : DIRECTORY QSTRINGr™   N)r—   re   )r!   r…   r#   r#   r$   Úp_directory_optionŒ  s    z dnssec_policy.p_directory_optionc             C   s   |d | j _dS )z#coverage_option : COVERAGE durationr™   N)r—   rf   )r!   r…   r#   r#   r$   Úp_coverage_option�  s    zdnssec_policy.p_coverage_optionc             C   s*   |d dkr|d | j _n|d | j _dS )z0rollperiod_option : ROLL_PERIOD KEYTYPE durationr™   ÚKSKé   N)r—   ri   rj   )r!   r…   r#   r#   r$   Úp_rollperiod_option”  s    z!dnssec_policy.p_rollperiod_optionc             C   s*   |d dkr|d | j _n|d | j _dS )z0prepublish_option : PRE_PUBLISH KEYTYPE durationr™   r²   r³   N)r—   rk   rm   )r!   r…   r#   r#   r$   Úp_prepublish_option›  s    z!dnssec_policy.p_prepublish_optionc             C   s*   |d dkr|d | j _n|d | j _dS )z2postpublish_option : POST_PUBLISH KEYTYPE durationr™   r²   r³   N)r—   rl   rn   )r!   r…   r#   r#   r$   Úp_postpublish_option¢  s    z"dnssec_policy.p_postpublish_optionc             C   s*   |d dkr|d | j _n|d | j _dS )z(keysize_option : KEY_SIZE KEYTYPE NUMBERr™   r²   r³   N)r—   rg   rh   )r!   r…   r#   r#   r$   Úp_keysize_option©  s    zdnssec_policy.p_keysize_optionc             C   s*   |d dkr|d | j _n|d | j _dS )z'standby_option : STANDBY KEYTYPE NUMBERr™   r²   r³   N)r—   ro   rp   )r!   r…   r#   r#   r$   Úp_standby_option°  s    zdnssec_policy.p_standby_optionc             C   s   |d | j _dS )zkeyttl_option : KEYTTL durationr™   N)r—   rq   )r!   r…   r#   r#   r$   Úp_keyttl_option·  s    zdnssec_policy.p_keyttl_optionc             C   s   |d | j _dS )z$algorithm_option : ALGORITHM ALGNAMEr™   N)r—   r]   )r!   r…   r#   r#   r$   Úp_algorithm_option»  s    z dnssec_policy.p_algorithm_optionc             C   sd   |r.t d| jpd| jrdnd|j|jf ƒ n2| js`td| jp@d| jrJdnd|rV|jpXdf ƒ‚d S )Nz%s%s%d:syntax error near '%s'r_   ú:z%s%s%d:unexpected end of inputr   )r8   r„   r   r   r†   ry   )r!   r…   r#   r#   r$   Úp_error¿  s    zdnssec_policy.p_error)N)*rK   rL   rM   r‚   r�   rŒ   r—   r„   r†   rF   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#   r#   r$   rz   ,  sN   
_
h

rz   Ú__main__r'   rC   r™   )r{   r‰   T)r|   r{   r‹   znonexistent.zone)r(   Zply.lexrC   Zply.yaccr   Ústringr   r   rO   Ú	Exceptionry   rz   rK   ÚsysÚargvr‡   Úfilerˆ   rI   Úcloser~   rJ   Zppr8   r�   r�   ÚeÚargsr#   r#   r#   r$   Ú<module>   s6   

` 4   !

