Ñò
SãQc           @   s  d  d k  Z  d  d k Z d  d k Z d  d k Z d g Z d e f d „  ƒ  YZ d „  Z e e i ƒ Z e e i	 ƒ Z	 e e i
 ƒ Z
 e e i ƒ Z e e i ƒ Z e e i ƒ Z e e i ƒ Z e e i ƒ Z e e i ƒ Z e e i ƒ Z e e i ƒ Z e e i ƒ Z d „  Z d „  Z d e f d „  ƒ  YZ d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   iÿÿÿÿNt   Contextt   Errorc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s;   | |  _  t i | | ƒ } | i |  _ t i | | ƒ d  S(   N(   t   codet   krb5_ctypest   krb5_get_error_messaget   valuet   messaget   krb5_free_error_message(   t   selft   ctx_rawR   t   msg_c(    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyt   __init__
   s    	c         C   s   |  i  S(   N(   R   (   R   (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyt   __str__   s    (   t   __name__t
   __module__R   R   (    (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyR   	   s   	c            s:   ˆ  i  t i j	 o ˆ  St i ˆ  ƒ ‡  f d †  ƒ } | S(   Nc            s-   ˆ  |  | Œ } | o t  |  | ƒ ‚ n | S(   N(   R   (   t   ctxt   argst   ret(   t   fn(    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyt   wrapped   s    (   t   restypeR   t   krb5_error_codet	   functoolst   wraps(   R   R   (    (   R   s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyt   check_error   s    c          G   s3   t  i |  Œ  } | o t t  i ƒ  | ƒ ‚ n | S(   N(   R   t   krb5_decode_ticketR   t   krb5_context(   R   R   (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyR   ,   s    c         C   sC   t  |  t ƒ o |  St  |  t ƒ o |  i d ƒ St d ƒ ‚ d  S(   Ns   utf-8s   Expected string(   t
   isinstancet   strt   unicodet   encodet	   TypeError(   t   obj(    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyt   to_str2   s
    c           B   s>   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s    t  i ƒ  |  _ t |  i ƒ d  S(   N(   R   R   t   _handlet   krb5_init_context(   R   (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyR   :   s    c         C   s%   t  |  i ƒ o t |  i ƒ n d  S(   N(   t   boolR"   t   krb5_free_context(   R   (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyt   __del__>   s    c         C   s#   t  |  ƒ } t |  i | i ƒ | S(   N(   t   CCachet   krb5_cc_defaultR"   (   R   t   ccache(    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyt
   cc_defaultB   s    c      
   C   s«   t  | ƒ } g  } | D] } | t  | ƒ q ~ } t |  ƒ } g  } | D] } | t i | ƒ qJ ~ } | i t i ƒ  ƒ t |  i | i t | ƒ t i | ƒ | Œ | S(   N(   R!   t	   Principalt   ctypest   c_char_pt   appendt   krb5_build_principalR"   t   len(   R   t   realmt   namet   _[1]t   compt	   principalt   _[2]t	   name_args(    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyt   build_principalG   s    '*		c         C   s^   t  | ƒ } t i ƒ  } t i t i | ƒ t i t i ƒ ƒ | _ t	 | ƒ | _
 |  i | ƒ S(   N(   R!   R   t	   krb5_dataR,   t   castR-   t   POINTERt   c_chart   dataR0   t   lengtht   _decode_ticket(   R   R=   t   data_c(    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyt   decode_ticketT   s    c         C   s    t  |  ƒ } t | | i ƒ | S(   N(   t   TicketR   R"   (   R   R@   t   ticket(    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyR?   ^   s    (   R   R   R   R&   R*   R8   RA   R?   (    (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyR    9   s   					
R'   c           B   s2   e  Z d  „  Z d „  Z d „  Z e e d „ Z RS(   c         C   s   | |  _  t i ƒ  |  _ d  S(   N(   t   _ctxR   t   krb5_ccacheR"   (   R   R   (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyR   d   s    	c         C   s.   t  |  i ƒ o t |  i i |  i ƒ n d  S(   N(   R$   R"   t   krb5_cc_closeRD   (   R   (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyR&   h   s    c         C   s/   t  |  i ƒ } t |  i i |  i | i ƒ | S(   N(   R+   RD   t   krb5_cc_get_principalR"   (   R   R5   (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyt   get_principall   s
    
c         C   s   d } | o | t  i O} n | o | t  i O} n t  i ƒ  } | i | _ | i | _ t |  i ƒ } t	 |  i i | |  i | | i ƒ | S(   Ni    (
   R   t   KRB5_GC_CACHEDt   KRB5_GC_USER_USERt
   krb5_credsR"   t   clientt   servert   CredentialsRD   t   krb5_get_credentials(   R   RL   RM   t
   cache_onlyt   user_to_usert   flagst   in_credst   creds(    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyt   get_credentialss   s    
(   R   R   R   R&   RH   t   FalseRU   (    (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyR'   c   s
   			R+   c           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s   | |  _  t i ƒ  |  _ d  S(   N(   RD   R   t   krb5_principalR"   (   R   R   (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyR   ‡   s    	c         C   s.   t  |  i ƒ o t |  i i |  i ƒ n d  S(   N(   R$   R"   t   krb5_free_principalRD   (   R   (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyR&   ‹   s    c         C   sE   t  i ƒ  } t |  i i |  i | ƒ | i } t |  i i | ƒ | S(   N(   R,   R-   t   krb5_unparse_nameRD   R"   R   t   krb5_free_unparsed_name(   R   t   name_cR2   (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyt   unparse_name   s
    	c         C   s
   |  i  ƒ  S(   N(   R\   (   R   (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyR   –   s    c         C   s   d |  i  i |  i ƒ  f S(   Ns   <%s: %s>(   t	   __class__R   R\   (   R   (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyt   __repr__™   s    (   R   R   R   R&   R\   R   R^   (    (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyR+   †   s
   				RN   c           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s   | |  _  t i ƒ  |  _ d  S(   N(   RD   R   t   krb5_creds_ptrR"   (   R   R   (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyR      s    	c         C   s.   t  |  i ƒ o t |  i i |  i ƒ n d  S(   N(   R$   R"   t   krb5_free_credsRD   (   R   (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyR&   ¡   s    c         C   s   |  i  i |  i i i ƒ S(   N(   RD   R?   R"   t   contentsRC   (   R   (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyRA   ¥   s    c         C   s   |  i  i |  i i i ƒ S(   N(   RD   t   _decode_second_ticketR"   Ra   t   second_ticket(   R   (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyt   decode_second_ticket§   s    	c      
   C   s¢  h  } |  i  i i i } | i i ƒ  | d <h | i d 6g  } t | i ƒ D] } | | i | i ƒ  qL ~ d 6| d <|  i	 ƒ  i
 ƒ  | d <|  i  i i } h | i d 6t i | i ƒ  ƒ d 6| d <|  i  i i } g  } t d	 ƒ D]' } | | d
 d | >@o d
 n d qæ ~ | d <|  i  i i i d | d <|  i  i i i o |  i  i i i d | d <n |  i  i i i d | d <|  i  i i i o |  i  i i i d | d <n |  i  i i i } | i i ƒ  | d <h | i d 6g  }	 t | i ƒ D] } |	 | i | i ƒ  qö~	 d 6| d <g  }
 d } xY t |  i  i i | ƒ o> |  i  i i | i } |
 i h | i d 6| i ƒ  d 6ƒ q0W|
 o |
 | d <n | S(   Nt   crealmt   nameTypet
   nameStringt   cnameRC   t   keytypet   keyvaluet   keyi    i   i   i    RR   iè  t   authtimet	   starttimet   endtimet	   renewTillt   srealmt   snamet   addrTypet   addresst   caddr(   R"   Ra   RL   R1   t   as_strt   typet   xrangeR>   R=   RA   t   to_dictt   keyblockt   enctypet   base64t	   b64encodet   contents_as_strt   ticket_flagst   ranget   timesRl   Rm   Rn   t
   renew_tillRM   R$   t	   addressesR.   t   addrtype(   R   R   t   client_dataR3   t   iRy   RR   R6   t   server_datat   _[3]t   addrst   addr(    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyRx   «   sL    
8
>
8 	
(   R   R   R   R&   RA   Rd   Rx   (    (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyRN   œ   s
   				RB   c           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   | |  _  t i ƒ  |  _ d  S(   N(   RD   R   t   krb5_ticket_ptrR"   (   R   R   (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyR   Ü   s    	c         C   s.   t  |  i ƒ o t |  i i |  i ƒ n d  S(   N(   R$   R"   t   krb5_free_ticketRD   (   R   (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyR&   à   s    c         C   s×   h  } d | d <|  i  i i i } | i i ƒ  | d <h | i d 6g  } t | i ƒ D] } | | i | i ƒ  qV ~ d 6| d <h |  i  i i	 i
 d 6|  i  i i	 i d 6t i |  i  i i	 i i ƒ  ƒ d	 6| d
 <| S(   Ni   t   tktVnoR1   Rf   Rg   Rq   t   kvnot   etypet   ciphert   encPart(   R"   Ra   RM   R1   Ru   Rv   Rw   R>   R=   t   enc_partR   Rz   R{   R|   t
   ciphertext(   R   R   R†   R3   R…   (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyRx   ä   s    

8#(   R   R   R   R&   Rx   (    (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyRB   Û   s   		(   R{   R,   R   R   t   __all__t	   ExceptionR   R   R#   R%   R(   RF   RG   RX   RY   RZ   R/   RO   R`   R‹   R   R!   t   objectR    R'   R+   RN   RB   (    (    (    s8   /afs/sipb.mit.edu/project/roost/roost-python/lib/krb5.pyt   <module>   s2   	
			*#?