a
    4i                     @   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dd	Zd
d Zdd ZdS )    )print_functionN)defaultdictzdnssec-keymgr)dnskeykeydict	keyseriespolicyparsetabutilsc                  O   s   t | i | td d S )N   )printsysexit)argskwargs r   ,/usr/lib/python3/dist-packages/isc/keymgr.pyfatal   s    r   c                 C   s~   |}|r"t j|r"t |t jszt jd }|s8t jj}|t jD ]4}|t j	 |  }t j|rtt |t jrt qzd}qD|S )a1  find the location of a specified command. If a default is supplied,
    exists and it's an executable, we use it; otherwise we search PATH
    for an alternative.
    :param command: command to look for
    :param default: default value to use
    :return: PATH with the location of a suitable binary
    PATHN)
ospathisfileaccessX_OKenvirondefpathsplitpathsepsep)ZcommanddefaultZfpathr   Z	directoryr   r   r   set_path    s    
r   c                  C   s  t dtjtdd} t dtjtdd}tjtd d}|j	dt
d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t
dddd |j	dd|t
ddd |j	dd d!d"d#d$ |j	d%d&d!d"d'd$ |j	d(d)d*d!d"d+d$ |j	d,d-d.d!d"d/d$ |j	d0d1d2tjd3 | }|jrBtd4 |jrZ|jrZtd5 |jdu rntd6 |jdu rtd7 |jdurtj|jstd8|j  n(tjtjd9|_tj|jsd|_|S ):zbRead command line arguments, returns 'args' object
    :return: args object properly prepared
    zdnssec-keygenZsbinzdnssec-settimezA: schedule DNSSEC key rollovers according to a pre-defined policy)Zdescriptionzone*NzSZone(s) to which the policy should be applied (default: all zones in the directory))typenargsr   helpz-Kr   zDirectory containing keysdir)destr"   r$   metavarz-c
policyfilezPolicy definition filefilez-gkeygenzPath to 'dnssec-keygen')r&   r   r"   r$   r'   z-r	randomdevZ
DEPRECATED)r&   r"   r   r$   r'   z-ssettimezPath to 'dnssec-settime'z-kno_zsk
store_trueFz,Only apply policy to key-signing keys (KSKs))r&   actionr   r$   z-zno_kskz-Only apply policy to zone-signing keys (ZSKs)z-fz--forceforcez8Force updates to key events even if they are in the pastz-qz--quietquietzUpdate keys silentlyz-vz	--versionversion)r/   r3   z%ERROR: -r option has been deprecated.z)ERROR: -z and -k cannot be used together.zERROR: dnssec-keygen not foundzERROR: dnssec-settime not foundz!ERROR: Policy file "%s" not foundzdnssec-policy.conf)r   r   r   joinr	   prefixargparseArgumentParserprogadd_argumentstrr3   
parse_argsr+   r   r-   r0   r*   r,   r(   existsZ
sysconfdir)r*   r,   parserr   r   r   r   r;   9   s    

r;   c               
   C   sP  t  } | j| j| j| jd}zt| j}W n4 ty` } zt	dt
|  W Y d }~n
d }~0 0 zt|| j| jd}W n4 ty } zt	dt
|  W Y d }~n
d }~0 0 zt||d}W n4 ty } zt	dt
|  W Y d }~n
d }~0 0 z |j|| j| j| j| jd W n6 tyJ } zt	dt
|  W Y d }~n
d }~0 0 d S )	N)Zkeygen_pathZsettime_pathZ	keys_pathr+   zUnable to load DNSSEC policy: )r   Zzonesz Unable to build key dictionary: )contextzUnable to build key series: )ZkskZzskr1   r2   zUnable to apply policy: )r;   r*   r,   r   r+   r   Zdnssec_policyr(   	Exceptionr   r:   r   r    r   Zenforce_policyr-   r0   r1   r2   )r   r>   ZdpeZkdZksr   r   r   main   s0    &&&
rA   )N)Z
__future__r   r   r   r6   ZglobretimeZcalendarZpprintcollectionsr   r8   Ziscr   r   r   r   r   r	   r   r   r;   rA   r   r   r   r   <module>   s   @ 
v