ó
#¶cc           @   s¶   d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l m Z d  d l m Z d  d l m Z d  d l	 m
 Z
 d „  Z d „  Z d „  Z d	 „  Z d
 „  Z d d „ Z d „  Z d S(   iÿÿÿÿN(   t   mm_cfg(   t   Utils(   t   SafeDict(   t   syslogc         C   s"   t  j } | j |  | j d ƒ ƒ S(   Nt   *(   R    t	   LDAP_AUTHt   get(   t	   list_namet   confs(    (    s    /opt/osstech/lib/mailman/LDAP.pyt	   _conf_get   s    	c         G   s   t  |  d | | ƒ d  S(   Ns   LDAP Auth: (   R   (   t   prit   fmtt   args(    (    s    /opt/osstech/lib/mailman/LDAP.pyt   _log   s    c         C   sŸ  | d  k s t | ƒ d k r" d" St i | d 6| d 6| d | d 6| d 6ƒ } y' t j d | d ƒ \ | d <| d	 <Wn% t k
 r  | | d <d
 | d	 <n Xd j |  j d d g ƒ ƒ } |  j d d
 ƒ } |  j d d
 ƒ } |  j d d  ƒ }	 |  j d d ƒ d „  | j ƒ  Dƒ }
 |  j d g  ƒ } |  j d |  j d d ƒ ƒ } |	 d  k rht	 d d ƒ d# St
 j | d t j d t j ƒ} y | j | | t
 j ƒ Wnb t
 j t
 j t
 j f k
 rÞ} t	 d d | | ƒ d$ St
 j k
 r} t	 d d | | ƒ d% SXz‚ y | j |	 t
 j |
 | ƒ } Wn\ t
 j t
 j f k
 r_} t	 d d |	 | ƒ d& St
 j k
 rˆ} t	 d d |
 | ƒ d' SXWd  | j ƒ  Xt | ƒ d k r®d( St | ƒ d k rÔt	 d d  | ƒ d) S| d \ } } | j d! „  | j ƒ  Dƒ ƒ | | } | d  k r!| | f St
 j | d t j d t j ƒ} zE y | j | | t
 j ƒ Wn$ t
 j t
 j f k
 r…d  | f SXWd  | j ƒ  X| | f S(*   Ni    R   t   list_domaint   @t
   list_emailt   auth_idi   t   auth_id_localt   auth_id_domaint    t    t   uriss   ldap://127.0.0.1/t   bind_dnt   bind_passwordt   search_baset   search_filters   (mail=%(auth_id)s)c         S   s+   i  |  ]! \ } } t  j j | ƒ | “ q S(    (   t   ldapt   filtert   escape_filter_chars(   t   .0t   kt   v(    (    s    /opt/osstech/lib/mailman/LDAP.pys
   <dictcomp>*   s   	 t
   attributest   result_formatt   results   %(auth_id)st   errors   Base DN not definedt   trace_levelt
   trace_files
   URI %s: %ss   Bind DN %s: %ss   Base DN %s: %ss   Filter %s: %ss"   Multiple entries found for user %sc         S   s#   i  |  ] \ } } | d  | “ q S(   i    (    (   R   R   t   i(    (    s    /opt/osstech/lib/mailman/LDAP.pys
   <dictcomp>R   s   	 (   NN(   NN(   NN(   NN(   NN(   NN(   NN(   NN(   t   Nonet   lenR   t   ret   splitt
   ValueErrort   joinR   t   itemsR   R   t
   initializeR    t   LDAP_AUTH_TRACE_LEVELt   syst   stderrt   bind_st   AUTH_SIMPLEt   SERVER_DOWNt   TIMEOUTt   UNWILLING_TO_PERFORMt   INVALID_CREDENTIALSt   search_st   SCOPE_SUBTREEt   INVALID_DN_SYNTAXt   NO_SUCH_OBJECTt   FILTER_ERRORt   unbind_st   update(   t   conft   listnamet
   listdomaint   usernamet   passwordt   dt   uriR   t   bind_pwR   R   t   attrst
   result_fmtt   ct   et   entriest   dnR#   (    (    s    /opt/osstech/lib/mailman/LDAP.pyt   _auth   sx    '
!!	

!c           C   s   t  t j ƒ d k S(   s6   
    Check if the LDAP authentication is enabled.
    i    (   R)   R    R   (    (    (    s    /opt/osstech/lib/mailman/LDAP.pyt   ldap_auth_enabled_pd   s    c           C   s   t  j S(   s;   
    Check if only the LDAP authentication is enabled.
    (   R    t   LDAP_AUTH_ONLY(    (    (    s    /opt/osstech/lib/mailman/LDAP.pyt   ldap_auth_only_pk   s    c   
      C   sÐ  t  | ƒ } | s d St | | | | | ƒ \ } } | d k rZ t ƒ  rV t j d f Sd Sxf|  D]^}	 |	 t j k r˜ t j | t j	 ƒ r¿|	 | f Sqa |	 t j
 k rÉ t j | t j ƒ r¿|	 | f Sqa |	 t j k r | r¿t j | | j ƒ r¿|	 | f Sqa |	 t j k rV| r4t j | | j ƒ r4|	 | f St j | t j ƒ r¿|	 | f Sqa |	 t j k rkqa qa |	 t j k r¢| r¿| j ƒ  | j k r¿|	 | f Sqa t d d |	 ƒ t d |	 ‚ qa Wt j | f S(   s  
    Authenticate a user with a password by LDAP

    Returns
    -------
    ac: int
        Mailman authentication context or None if no LDAP auth performed or LDAP auth failed.
    result: str
        Result username formatted with ldap_conf['result_format'] and attributes.
    R$   s   Bad authcontext: %sN(   NN(   NN(   R	   R(   RN   RQ   R    t   UnAuthorizedt   AuthSiteAdminR   t   addr_in_list_pt   LDAP_AUTH_SITE_ADMINSt   AuthCreatort   LDAP_AUTH_LIST_CREATORSt   AuthListAdmint   ownert   AuthListModeratort	   moderatort   LDAP_AUTH_SITE_MODERATORSt   AuthListPostert   AuthUsert   lowert   membersR   R,   (
   t   authcontextsRA   RB   RC   RD   t   mlistt	   ldap_confR#   RM   t   ac(    (    s    /opt/osstech/lib/mailman/LDAP.pyt   ldap_auth_contextr   s>    	
c         C   se  t  j } |  j ƒ  | k r. | |  j ƒ  } n d | k rG | d } n d St i |  j ƒ  d 6|  j ƒ  d 6|  j d 6| d 6ƒ } y' t j d | d ƒ \ | d	 <| d
 <Wn% t k
 rÐ t	 | d	 <d | d
 <n Xd j
 | j d | j d d g ƒ ƒ ƒ } | j d d ƒ } | j d d ƒ } | j d d ƒ }	 | j d d ƒ d „  | j ƒ  Dƒ }
 |	 d k rtt d d ƒ d St j | d t  j d t j ƒ} y | j | | t j ƒ Wnb t j t j t j f k
 rê} t d d | | ƒ d! St j k
 r} t d d | | ƒ d" SXz… y" | j |	 t j |
 d g ƒ } Wn\ t j t j f k
 rn} t d d |	 | ƒ d St j k
 r—} t d d |
 | ƒ d SXWd | j ƒ  Xt  | ƒ d k r½d St  | ƒ d k rãt d d  t! ƒ d S| d \ } } t j | d t  j d t j ƒ} z? y | j | | t j ƒ Wn t j t j f k
 rQd SXWd | j ƒ  X| S(#   sP   
    Authenticate a member. (obsolete)
    Use ldap_auth_context() instead.
    R   i    R   t   list_addressR   t   member_addressR   i   t   member_localt   member_domainR   R   R   RF   s   ldap://127.0.0.1/R   R   t   baseR   s   (uid=%(member_local)s)c         S   s+   i  |  ]! \ } } t  j j | ƒ | “ q S(    (   R   R   R   (   R   R   R    (    (    s    /opt/osstech/lib/mailman/LDAP.pys
   <dictcomp>Á   s   	 R$   s   Base DN not definedR%   R&   s
   URI %s: %ss   Bind DN %s: %sRM   s   Base DN %s: %ss   Filter %s: %sNs"   Multiple entries found for user %s(   NN(   NN("   R    t   MEMBER_LDAP_AUTHt   internal_nameR   t   GetListEmailt	   host_nameR*   R+   R,   Rg   R-   R   R(   R.   R   R   R/   R0   R1   R2   R3   R4   R5   R6   R7   R8   R9   R:   R;   R<   R=   R>   R)   RC   (   Rb   t   memberRD   R   R@   RE   RF   R   RG   R   R   RJ   RK   RL   RM   RH   (    (    s    /opt/osstech/lib/mailman/LDAP.pyt   ldap_auth_member¤   sr    	
'
*!!"	!	(   R1   R*   R   t   ldap.filtert   MailmanR    R   t   Mailman.SafeDictR   t   Mailman.Logging.SyslogR   R	   R   RN   RO   RQ   R(   Re   Rp   (    (    (    s    /opt/osstech/lib/mailman/LDAP.pyt   <module>   s   			O		2