
#cc           @   sm  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 d d
 l 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_new(   t   ldap_auth_contexti   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:   t  j d  |  _ t  j d  |  _ i  |  _ d  |  _ d  S(   Ni    (   R   t   MakeRandomPasswordt   mod_passwordt   post_passwordt	   passwordst   Nonet   ldap_username(   t   self(    (    s+   /opt/osstech/lib/mailman/SecurityManager.pyt   InitVarsQ   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(    (    s+   /opt/osstech/lib/mailman/SecurityManager.pyt   AuthContextInfo\   s4    					c         C   s  | s t  j St | |  j   |  j | | d |  \ } |  _ | d  k	 rM | Sx| D]} | t  j k r t j	 | d d } | rt  j SqT | t  j
 k r t j	 |  } | rt  j
 SqT | t  j k rd   } |  j |  \ } } | d  k r qT n  t |  j   }	 t }
 } |	 | k r,t } nA t |  j   | k rQt } }
 n | | |  rmt } }
 n  |
 rt } |  j   s|  j   t } n  z  |	 |  _ | r|  j   n  Wd  | r|  j   n  Xn  | r| SqT | t  j k r(|  j |  \ } } | rt |  j   | k r| SqT | t  j k rq|  j |  \ } } | rt |  j   | k r| SqT | t  j k r| d  k	 ry |  j | |  r| SWqt j k
 rqXqqT t d d |  t d |  qT Wt  j S(   Nt   mlistt	   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(    (    s+   /opt/osstech/lib/mailman/SecurityManager.pyt   cryptmatchp   s    
t   errors   Bad authcontext: %s(    R   t   UnAuthorizedR	   R   t	   host_nameR   R   t   AuthCreatorR   t   check_global_passwordR'   R%   R0   R   t	   hexdigestR5   R4   R   t   digestt   Lockedt   LockR&   t   Savet   UnlockR$   R#   R   t   authenticateMemberR   t   NotAMemberErrorR   t
   ValueError(   R   t   authcontextsR6   R+   t   act   okR8   R,   R-   t   sharesponset   upgradet   save_and_unlock(    (    s+   /opt/osstech/lib/mailman/SecurityManager.pyt   Authenticate   sz    	

	
	
		
c         C   s   x* | D]" } |  j  | |  } | r t Sq W|  j | | |  } | r | t j k rl |  j rl |  j } n  |  j | |  GHt St S(   N(   t   CheckCookieR4   RM   R   R   R   t
   MakeCookieR5   (   R   RG   R6   R+   RH   RI   (    (    s+   /opt/osstech/lib/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(   R0   R   t
   isinstanceR    RF   t   intt   timeR   R>   t   Cookiet   SimpleCookiet   binasciit   hexlifyt   marshalt   dumpsR   t   web_page_urlR4   (
   R   R*   R+   R,   R-   t   issuedt   mact   ct   parsedRQ   (    (    s+   /opt/osstech/lib/mailman/SecurityManager.pyRO     s    (	"
c         C   so   |  j  | |  \ } } t j   } d | | <t |  j  d } | | | d <d | | d <d | | d <| S(   NR   i   RQ   i    s   max-agei   RT   (   R0   RX   RY   R   R^   (   R   R*   R+   R,   R-   Ra   RQ   (    (    s+   /opt/osstech/lib/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   getR5   t   parsecookieR   R   R   t   keyst
   startswitht   appendt   lenR   R   R   R   t   _SecurityManager__checkoneR4   (
   R   R*   R+   t
   cookiedataRa   t	   usernamest   prefixt   kt   uRI   (    (    s+   /opt/osstech/lib/mailman/SecurityManager.pyRN   ,  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(   R0   R   RE   R5   t   has_keyRU   R    R\   t   loadsRZ   t	   unhexlifyt   EOFErrorRF   R   t   KeyErrorRW   R   t   AUTHENTICATION_COOKIE_LIFETIMER   R>   RO   R4   (   R   Ra   R*   R+   R,   R-   t   dataR_   t   received_mact   nowR`   (    (    s+   /opt/osstech/lib/mailman/SecurityManager.pyt
   __checkoneU  s,     
	N(   t   __name__t
   __module__R   R   R0   RM   RP   RO   Rc   RN   Rm   (    (    (    s+   /opt/osstech/lib/mailman/SecurityManager.pyR
   P   s   	/b)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   splitRF   (   t   sRa   t   linet   pRq   t   v(    (    s+   /opt/osstech/lib/mailman/SecurityManager.pyRh     s    (!   t   __doc__Re   t   reRW   RX   R\   RZ   R   t   typesR    R   R   R3   t   ImportErrorR   t   MailmanR   R   R   t   Mailman.Logging.SyslogR   t   Mailman.UtilsR   R   t   Mailman.LDAPR	   R4   R5   t	   NameErrorR
   t   compileR   Rh   (    (    (    s+   /opt/osstech/lib/mailman/SecurityManager.pyt   <module>   s8   

 0