ó
[³XMc           @   st   d  Z  d d l Z d d l Z d d l Z d d l Z d d l m Z m Z d „  Z d „  Z	 d „  Z
 d „  Z d S(   s6   
Support for asynchronously authenticating using PAM.
iÿÿÿÿN(   t   threadst   deferc            s   ‡  f d †  } t  |  | | ƒ S(   Nc            sÁ   d d l  m } y ˆ |  ƒ } Wn d d  l } | j ƒ  d  SXt j ƒ  ‰  ‡  f d †  } ‡  f d †  } | j | j | | ƒ ˆ  j ƒ  ˆ  j	 } | d r¦ | d S| d j
 | d j ‚ d  S(   Niÿÿÿÿ(   t   reactorc            s   d |  f ˆ  _  ˆ  j ƒ  d  S(   Ni   (   t   rt   set(   R   (   t   ev(    s8   /usr/lib/python2.7/dist-packages/twisted/cred/pamauth.pyt   cb   s    c            s   d |  f ˆ  _  ˆ  j ƒ  d  S(   Ni    (   R   R   (   t   e(   R   (    s8   /usr/lib/python2.7/dist-packages/twisted/cred/pamauth.pyt   eb   s    i    i   (   t   twisted.internetR   t	   tracebackt	   print_exct	   threadingt   Eventt   callFromThreadt   addCallbackst   waitR   t   typet   value(   t   itemsR   t   dR
   R   R   t   done(   t   conv(   R   s8   /usr/lib/python2.7/dist-packages/twisted/cred/pamauth.pyt   _conv   s     

	
(   t   callIntoPAM(   t   servicet   userR   R   (    (   R   s8   /usr/lib/python2.7/dist-packages/twisted/cred/pamauth.pyt   pamAuthenticateThread   s    c         C   s¯   t  j ƒ  } | j |  ƒ | j t  j | ƒ | j t  j | ƒ t j ƒ  } t j ƒ  } t j	 d ƒ t j
 d ƒ z | j ƒ  | j ƒ  d SWd t j	 | ƒ t j
 | ƒ Xd S(   s   A testing hook.
    i    i   N(   t   PAMt   pamt   startt   set_itemt   PAM_USERt   PAM_CONVt   ost   getegidt   geteuidt   setegidt   seteuidt   authenticatet	   acct_mgmt(   R   R   R   R   t   gidt   uid(    (    s8   /usr/lib/python2.7/dist-packages/twisted/cred/pamauth.pyR   )   s    

c         C   sÓ   g  } x· t  t |  ƒ ƒ D]£ } |  | \ } } | d k r` t j | ƒ } | j | d f ƒ q | d k rŽ t | ƒ } | j | d f ƒ q | d k r¯ | GH| j d	 ƒ q t j d ƒ Sq Wt j | ƒ } | S(
   Ni   i    i   i   i   t    t   foo(   i   i   (   R+   i    (   t   ranget   lent   getpasst   appendt	   raw_inputR   t   failt   succeed(   R   t   respt   it   messaget   kindt   pR   (    (    s8   /usr/lib/python2.7/dist-packages/twisted/cred/pamauth.pyt   defConv<   s    c         C   s   t  j t |  | | ƒ S(   N(   R    t   deferToThreadR   (   R   R   R   (    (    s8   /usr/lib/python2.7/dist-packages/twisted/cred/pamauth.pyt   pamAuthenticateN   s    (   t   __doc__R   R/   R   R"   R	   R    R   R   R   R9   R;   (    (    (    s8   /usr/lib/python2.7/dist-packages/twisted/cred/pamauth.pyt   <module>   s   $			