
;cc           @   s]  d  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	 m
 Z
 d d l m Z y d d l Z Wn e k
 r e Z n Xd d l m Z d d l m Z d d l m Z d d l m Z d d	 l m Z m Z y e e f Wn e k
 r-d
 Z d Z n Xd f  d     YZ e j d  Z d   Z d S(   s0   Handle passwords and sanitize approved messages.iN(   t
   StringTypet	   TupleType(   t   urlparse(   t   mm_cfg(   t   Utils(   t   Errors(   t   syslog(   t   md5_newt   sha_newi   i    t   SecurityManagerc           B   sb   e  Z d    Z d d  Z d d  Z d d  Z d d  Z d d  Z d d  Z	 d   Z
 RS(	   c         C   s   d  |  _ d  |  _ i  |  _ d  S(   N(   t   Nonet   mod_passwordt   post_passwordt	   passwords(   t   self(    (    s6   /export/web/mailman/mailman/Mailman/SecurityManager.pyt   InitVarsP   s    		c         C   sY  |  j    d } | t j k r | d  k r7 t d  n  t j t j |   } |  j	 |  } t j
 t j |  d d } | d | 7} n | t j k r |  j } | d 7} n | t j k r |  j } | d 7} nx | t j k r |  j } | d 7} nS | t j k rKt j   } t j r5| r5| } d	 } qO|  j } | d 7} n d
 S| | f S(   Nt   +s%   No user supplied for AuthUser contextt   safet    s   user+%st   postert	   moderatort   admint   site(   NN(   t   internal_nameR   t   AuthUserR
   t	   TypeErrorR   t   UnobscureEmailt   urllibt   unquotet   getMemberPasswordt   quotet   ObscureEmailt   AuthListPosterR   t   AuthListModeratorR   t   AuthListAdmint   passwordt   AuthSiteAdmint   get_global_passwordt   ALLOW_SITE_ADMIN_COOKIES(   R   t   authcontextt   usert   keyt   secrett   userdatat   sitepass(    (    s6   /export/web/mailman/mailman/Mailman/SecurityManager.pyt   AuthContextInfoZ   s4    					c         C   s  | s t  j Sx| D]} | t  j k rN t j | d d } | rt  j Sq | t  j k r| t j |  } | rt  j Sq | t  j k rd   } |  j |  \ } } | d  k r q n  t	 |  j
   }	 t }
 } |	 | k r t } nA t |  j   | k rt } }
 n | | |  r-t } }
 n  |
 rt } |  j   sX|  j   t } n  z  |	 |  _ | rw|  j   n  Wd  | r|  j   n  Xn  | r| Sq | t  j k r|  j |  \ } } | rt	 |  j
   | k r| Sq | t  j k r1|  j |  \ } } | rt	 |  j
   | k r| Sq | t  j k r| d  k	 ry |  j | |  re| SWqt j k
 r|qXqq t d d |  t d |  q Wt  j S(   Nt	   siteadmini    c         S   sM   y4 | d  } t  r/ t  j  |  |  | k r/ t St SWn t k
 rH t SXd  S(   Ni   (   t   cryptt   Truet   FalseR   (   t   responseR*   t   salt(    (    s6   /export/web/mailman/mailman/Mailman/SecurityManager.pyt   cryptmatchp   s    
t   errors   Bad authcontext: %s(   R   t   UnAuthorizedt   AuthCreatorR   t   check_global_passwordR$   R"   R-   R
   R   t	   hexdigestR1   R0   R   t   digestt   Lockedt   LockR#   t   Savet   UnlockR!   R    R   t   authenticateMemberR   t   NotAMemberErrorR   t
   ValueError(   R   t   authcontextsR2   R(   t   act   okR4   R)   R*   t   sharesponset   upgradet   save_and_unlock(    (    s6   /export/web/mailman/mailman/Mailman/SecurityManager.pyt   Authenticate   sn    

	
	
		
c         C   sa   x* | D]" } |  j  | |  } | r t Sq W|  j | | |  } | r] |  j | |  GHt St S(   N(   t   CheckCookieR0   RH   t
   MakeCookieR1   (   R   RB   R2   R(   RC   RD   (    (    s6   /export/web/mailman/mailman/Mailman/SecurityManager.pyt   WebAuthenticate   s    c   
      C   s   |  j  | |  \ } } | d  k s@ | d  k s@ t | t  rI t  n  t t j    } t | |  j   } t	 j
   } t j t j | | f   | | <t |  j  } | d }	 |	 | | d <| d d k r t | | d <n  d | | d <| S(   Ni   t   pathi    t   httpst   securei   t   version(   R-   R
   t
   isinstanceR    RA   t   intt   timeR   R9   t   Cookiet   SimpleCookiet   binasciit   hexlifyt   marshalt   dumpsR   t   web_page_urlR0   (
   R   R'   R(   R)   R*   t   issuedt   mact   ct   parsedRL   (    (    s6   /export/web/mailman/mailman/Mailman/SecurityManager.pyRJ      s    (	"
c         C   so   |  j  | |  \ } } t j   } d | | <t |  j  d } | | | d <d | | d <d | | d <| S(   NR   i   RL   i    s   max-agei   RO   (   R-   RS   RT   R   RY   (   R   R'   R(   R)   R*   R\   RL   (    (    s6   /export/web/mailman/mailman/Mailman/SecurityManager.pyt	   ZapCookie  s    
c   
      C   s  t  j j d  } | s t St |  } | t j k r | rI | g } nV g  } |  j   d } x= | j   D]/ } | j	 |  rl | j
 | t |   ql ql WxR g  | D] } t j t j |   ^ q D]% } |  j | | |  }	 |	 r t Sq Wt S|  j | | |  Sd  S(   Nt   HTTP_COOKIEs   +user+(   t   ost   environt   getR1   t   parsecookieR   R   R   t   keyst
   startswitht   appendt   lenR   R   R   R   t   _SecurityManager__checkoneR0   (
   R   R'   R(   t
   cookiedataR\   t	   usernamest   prefixt   kt   uRD   (    (    s6   /export/web/mailman/mailman/Mailman/SecurityManager.pyRI     s&    ,c         C   s  y |  j  | |  \ } } Wn t j k
 r3 t SX| j |  sT t | t  rX t Sy, t j t	 j
 | |   } | \ } } Wn t t t t f k
 r t SXt j   }	 |	 | k  r t St j r | t j |	 k  r t St | |  j   }
 |
 | k rt S|  j | |  GHt S(   N(   R-   R   R@   R1   t   has_keyRP   R    RW   t   loadsRU   t	   unhexlifyt   EOFErrorRA   R   t   KeyErrorRR   R   t   AUTHENTICATION_COOKIE_LIFETIMER   R9   RJ   R0   (   R   R\   R'   R(   R)   R*   t   dataRZ   t   received_mact   nowR[   (    (    s6   /export/web/mailman/mailman/Mailman/SecurityManager.pyt
   __checkoneH  s,     
	N(   t   __name__t
   __module__R   R
   R-   RH   RK   RJ   R^   RI   Rh   (    (    (    s6   /export/web/mailman/mailman/Mailman/SecurityManager.pyR	   O   s   	
/Y)s   ;\s*c         C   su   i  } xh |  j    D]Z } xQ t j |  D]@ } y | j d d  \ } } Wn t k
 r^ q) X| | | <q) Wq W| S(   Nt   =i   (   t
   splitlinest   splittert   splitRA   (   t   sR\   t   linet   pRl   t   v(    (    s6   /export/web/mailman/mailman/Mailman/SecurityManager.pyRc   t  s    (   t   __doc__R`   t   reRR   RS   RW   RU   R   t   typesR    R   R   R/   t   ImportErrorR
   t   MailmanR   R   R   t   Mailman.Logging.SyslogR   t   Mailman.UtilsR   R   R0   R1   t	   NameErrorR	   t   compileR|   Rc   (    (    (    s6   /export/web/mailman/mailman/Mailman/SecurityManager.pyt   <module>   s6   

 $