ó
¼Š`c           @  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 „  Z d d „ Z d „  Z d	 „  Z d S(
   iÿÿÿÿ(   t   print_functionN(   t   defaultdicts   dnssec-keymgr(   t   dnskeyt   keydictt	   keyseriest   policyt   parsetabt   utilsc          O  s   t  |  | Ž  t j d ƒ d  S(   Ni   (   t   printt   syst   exit(   t   argst   kwargs(    (    s.   /usr/lib/python2.7/site-packages/isc/keymgr.pyt   fatal   s    c         C  s¾   | } | s6 t  j j | ƒ s6 t  j | t  j ƒ rº t  j d } | sX t  j j } n  x_ | j t  j ƒ D]H } | t  j	 |  } t  j j | ƒ r­ t  j | t  j ƒ r­ Pn  d } qk Wn  | S(   s2   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
    t   PATHN(   t   ost   patht   isfilet   accesst   X_OKt   environt   defpatht   splitt   pathsept   sept   None(   t   commandt   defaultt   fpathR   t	   directory(    (    s.   /usr/lib/python2.7/site-packages/isc/keymgr.pyt   set_path   s    0'c          C  só  t  d t j j t j d ƒ d ƒ ƒ }  t  d t j j t j d ƒ d ƒ ƒ } t j d t d ƒ } | j	 d d t
 d d	 d
 d: d d d ƒ| j	 d d d d t
 d d d d ƒ| j	 d d d d t
 d d d d ƒ| j	 d d d d
 |  d t
 d d d d ƒ| j	 d d d d t
 d
 d: d d d d ƒ| j	 d d d d
 | d t
 d d  d d ƒ| j	 d! d d" d# d$ d
 t d d% ƒ| j	 d& d d' d# d$ d
 t d d( ƒ| j	 d) d* d d+ d# d$ d
 t d d, d- ƒ| j	 d. d/ d d0 d# d$ d
 t d d1 ƒ| j	 d2 d3 d# d4 d4 t j ƒ| j ƒ  } | j r@| j r@t d5 ƒ n  | j d: k r\t d6 ƒ n  | j d: k rxt d7 ƒ n  | j d: k	 r³t j j | j ƒ sït d8 | j ƒ qïn< t j j t j d9 ƒ | _ t j j | j ƒ sïd: | _ n  | S(;   sc    Read command line arguments, returns 'args' object
    :return: args object properly prepared
    s   dnssec-keygent   sbins   dnssec-settimet   descriptionsA   : schedule DNSSEC key rollovers according to a pre-defined policyt   zonet   typet   nargst   *R   t   helps.   Zone(s) to which the policy should be applied s%   (default: all zones in the directory)s   -Kt   destR   s   Directory containing keyst   metavart   dirs   -ct
   policyfiles   Policy definition filet   files   -gt   keygens   Path to 'dnssec-keygen's   -rt	   randomdevs@   Path to a file containing random data to pass to 'dnssec-keygen's   -st   settimes   Path to 'dnssec-settime's   -kt   no_zskt   actiont
   store_trues,   Only apply policy to key-signing keys (KSKs)s   -zt   no_ksks-   Only apply policy to zone-signing keys (ZSKs)s   -fs   --forcet   forces   Force updates to key events s   even if they are in the pasts   -qs   --quiett   quiets   Update keys silentlys   -vs	   --versiont   versions)   ERROR: -z and -k cannot be used together.s   ERROR: dnssec-keygen not founds   ERROR: dnssec-settime not founds!   ERROR: Policy file "%s" not founds   dnssec-policy.confN(   R   R   R   t   joinR   t   prefixt   argparset   ArgumentParsert   progt   add_argumentt   strR   t   FalseR4   t
   parse_argsR.   R1   R   R+   R-   R)   t   existst
   sysconfdir(   R+   R-   t   parserR   (    (    s.   /usr/lib/python2.7/site-packages/isc/keymgr.pyR=   6   sb    !!	
c       
   C  sf  t  ƒ  }  i |  j d 6|  j d 6|  j d 6|  j d 6} y t j |  j ƒ } Wn' t k
 rv } t	 d t
 | ƒ ƒ n Xy" t | d |  j d |  j ƒ} Wn' t k
 rÂ } t	 d t
 | ƒ ƒ n Xy t | d	 | ƒ} Wn' t k
 r} t	 d
 t
 | ƒ ƒ n Xy5 | j | d |  j d |  j d |  j d |  j ƒWn' t k
 ra} t	 d t
 | ƒ ƒ n Xd  S(   Nt   keygen_patht   settime_patht	   keys_pathR,   s   Unable to load DNSSEC policy: R   t   zoness    Unable to build key dictionary: t   contexts   Unable to build key series: t   kskt   zskR2   R3   s   Unable to apply policy: (   R=   R+   R-   R   R,   R   t   dnssec_policyR)   t	   ExceptionR   R;   R   R!   R   t   enforce_policyR.   R1   R2   R3   (   R   RE   t   dpt   et   kdt   ks(    (    s.   /usr/lib/python2.7/site-packages/isc/keymgr.pyt   main}   s,    	

"(   t
   __future__R    R   R	   R7   t   globt   ret   timet   calendart   pprintt   collectionsR   R9   t   iscR   R   R   R   R   R   R   R   R   R=   RO   (    (    (    s.   /usr/lib/python2.7/site-packages/isc/keymgr.pyt   <module>   s   `.		G