Ñò
?]Mc           @   sa  d  Z  d d k Z d d k Z d d k Z d d k Z d d k Z d d k Z d d k Z d d k l	 Z	 l
 Z
 d d k l Z y d d k Z Wn e j
 o e Z n Xd d k l Z d d k l Z d d k l Z d d k l Z d d	 k l Z l Z y e e f Wn e j
 o d
 Z d Z n Xd f  d „  ƒ  YZ e i d ƒ Z d „  Z d S(   s0   Handle passwords and sanitize approved messages.iÿÿÿÿN(   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  |  _ h  |  _ d  S(   N(   t   Nonet   mod_passwordt	   passwords(   t   self(    (    s+   /usr/lib/mailman/Mailman/SecurityManager.pyt   InitVarsP   s    	c         C   s)  |  i  ƒ  d } | t i j oY | d  j o t d ‚ n |  i | ƒ } t i t i	 | ƒ d d ƒ} | d | 7} n§ | t i
 j o |  i } | d 7} n€ | t i j o |  i } | d 7} nY | t i j oD t i ƒ  } t i o | o | } d } q|  i } | d 7} n d	 S| | f S(
   Nt   +s%   No user supplied for AuthUser contextt   safet    s   user+%st	   moderatort   admint   site(   NN(   t   internal_nameR   t   AuthUserR
   t	   TypeErrort   getMemberPasswordt   urllibt   quoteR   t   ObscureEmailt   AuthListModeratorR   t   AuthListAdmint   passwordt   AuthSiteAdmint   get_global_passwordt   ALLOW_SITE_ADMIN_COOKIES(   R   t   authcontextt   usert   keyt   secrett   userdatat   sitepass(    (    s+   /usr/lib/mailman/Mailman/SecurityManager.pyt   AuthContextInfoY   s,    		
	c         C   s  | p t  i Sxt| D]l} | t  i j o( t i | d d ƒ} | o t  i Sq | t  i j o" t i | ƒ } | o t  i Sq | t  i j o'd „  } |  i | ƒ \ } } | d  j o q n t	 | ƒ i
 ƒ  }	 t }
 } |	 | j o
 t } nF t | ƒ i ƒ  | j o t } }
 n | | | ƒ o t } }
 n |
 of t } |  i ƒ  p |  i ƒ  t } n z" |	 |  _ | o |  i ƒ  n Wd  | o |  i ƒ  n Xn | o | Sq | t  i j o> |  i | ƒ \ } } | o t	 | ƒ i
 ƒ  | j o | Sq | t  i j oJ | d  j	 o9 y |  i | | ƒ o | SWqat i j
 o qaXq‚q t d d | ƒ t d | ‚ q Wt  i S(   Nt	   siteadmini    c         S   sR   y7 | d  } t  o t  i  |  | ƒ | j o t St SWn t j
 o t SXd  S(   Ni   (   t   cryptt   Truet   FalseR   (   t   responseR%   t   salt(    (    s+   /usr/lib/mailman/Mailman/SecurityManager.pyt   cryptmatchp™   s    
 t   errors   Bad authcontext: %s(   R   t   UnAuthorizedt   AuthCreatorR   t   check_global_passwordR   R   R(   R
   R   t	   hexdigestR,   R+   R   t   digestt   Lockedt   LockR   t   Savet   UnlockR   R   t   authenticateMemberR   t   NotAMemberErrorR   t
   ValueError(   R   t   authcontextsR-   R#   t   act   okR/   R$   R%   t   sharesponset   upgradet   save_and_unlock(    (    s+   /usr/lib/mailman/Mailman/SecurityManager.pyt   Authenticate„   sh     	



		 		c         C   se   x, | D]$ } |  i  | | ƒ } | o t Sq W|  i | | | ƒ } | o |  i | | ƒ GHt St S(   N(   t   CheckCookieR+   RC   t
   MakeCookieR,   (   R   R=   R-   R#   R>   R?   (    (    s+   /usr/lib/mailman/Mailman/SecurityManager.pyt   WebAuthenticateØ   s     	c   	      C   s×   |  i  | | ƒ \ } } | d  j p | d  j p t | t ƒ o
 t ‚ n t t i ƒ  ƒ } t | | ƒ i ƒ  } t	 i
 ƒ  } t i t i | | f ƒ ƒ | | <t |  i ƒ d } | | | d <d | | d <| S(   Ni   t   pathi   t   version(   R(   R
   t
   isinstanceR    R<   t   intt   timeR   R4   t   Cookiet   SimpleCookiet   binasciit   hexlifyt   marshalt   dumpsR   t   web_page_url(	   R   R"   R#   R$   R%   t   issuedt   mact   cRG   (    (    s+   /usr/lib/mailman/Mailman/SecurityManager.pyRE   ë   s    +
"c         C   so   |  i  | | ƒ \ } } t i ƒ  } d | | <t |  i ƒ d } | | | d <d | | d <d | | d <| S(   NR   i   RG   i    s   max-agei   RH   (   R(   RL   RM   R   RR   (   R   R"   R#   R$   R%   RU   RG   (    (    s+   /usr/lib/mailman/Mailman/SecurityManager.pyt	   ZapCookieÿ   s    
c      	   C   s!  t  i i d ƒ } | p t St | ƒ } | t i j oÐ | o | g } nY g  } |  i ƒ  d } x? | i ƒ  D]1 } | i	 | ƒ o | i
 | t | ƒ ƒ qq qq Wx\ g  } | D] }	 | t i t i |	 ƒ ƒ q´ ~ D]' } |  i | | | ƒ }
 |
 o t SqÚ Wt S|  i | | | ƒ Sd  S(   Nt   HTTP_COOKIEs   +user+(   t   ost   environt   getR,   t   parsecookieR   R   R   t   keyst
   startswitht   appendt   lenR   t   UnobscureEmailR   t   unquotet   _SecurityManager__checkoneR+   (   R   R"   R#   t
   cookiedataRU   t	   usernamest   prefixt   kt   _[1]t   uR?   (    (    s+   /usr/lib/mailman/Mailman/SecurityManager.pyRD     s*     
* 	c         C   s÷   y |  i  | | ƒ \ } } Wn t i j
 o t SX| i | ƒ p t | t ƒ o t Sy, t i t	 i
 | | ƒ ƒ } | \ } } Wn  t t t t f j
 o t SXt i ƒ  }	 |	 | j  o t St | | ƒ i ƒ  }
 |
 | j o t St S(   N(   R(   R   R;   R,   t   has_keyRI   R    RP   t   loadsRN   t	   unhexlifyt   EOFErrorR<   R   t   KeyErrorRK   R   R4   R+   (   R   RU   R"   R#   R$   R%   t   dataRS   t   received_mact   nowRT   (    (    s+   /usr/lib/mailman/Mailman/SecurityManager.pyt
   __checkone9  s$    "
N(   t   __name__t
   __module__R   R
   R(   RC   RF   RE   RV   RD   Rb   (    (    (    s+   /usr/lib/mailman/Mailman/SecurityManager.pyR	   O   s   		+T)s   ;\s*c         C   sw   h  } xj |  i  ƒ  D]\ } xS t i | ƒ D]B } y | i d d ƒ \ } } Wn t j
 o q) X| | | <q) Wq W| S(   Nt   =i   (   t
   splitlinest   splittert   splitR<   (   t   sRU   t   linet   pRf   t   v(    (    s+   /usr/lib/mailman/Mailman/SecurityManager.pyR[   `  s      (   t   __doc__RX   t   reRK   RL   RP   RN   R   t   typesR    R   R   R*   t   ImportErrorR
   t   MailmanR   R   R   t   Mailman.Logging.SyslogR   t   Mailman.UtilsR   R   R+   R,   t	   NameErrorR	   t   compileRv   R[   (    (    (    s+   /usr/lib/mailman/Mailman/SecurityManager.pyt   <module>   s6   ÿ 
