ó
Fü½cc           @   sr  d  Z  d d l m Z d d l Z d d l m Z d d l m Z d d l m	 Z	 m
 Z
 m Z d d l m Z m Z m Z d d l m Z d d	 l m 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 y e e f Wn e k
 rd Z d Z n Xd „  Z  e j! d ƒ Z" e# d e# d „ Z$ e e d „ Z% d „  Z& d „  Z' d „  Z( d S(   sz   Cook a message's Subject header.
Also do other manipulations of From:, Reply-To: and Cc: depending on
list configuration.
iÿÿÿÿ(   t   nested_scopesN(   t   UnicodeType(   t   Charset(   t   Headert   decode_headert   make_header(   t	   parseaddrt
   formataddrt   getaddresses(   t   HeaderParseError(   t   i18n(   t   mm_cfg(   t   Utils(   t   _(   t   syslogs   ,
 s   , iN   i   i    c         C   s   t  |  t ƒ S(   N(   t
   isinstanceR   (   t   s(    (    s;   /export/web/mailman/mailman/Mailman/Handlers/CookHeaders.pyt
   _isunicode3   s    s   [^\s!-~]t    c         C   s    t  j |  j ƒ } t j | ƒ r9 | d k r? d } q? n d } y t | | | | | ƒ SWn@ t k
 r› t d d |  j ƒ  | | ƒ t d | | | | ƒ SXd  S(   Ns   us-asciis
   iso-8859-1t   errors!   list: %s: can't decode "%s" as %st    (	   R   t
   GetCharSett   preferred_languaget   nonasciit   searchR   t   UnicodeErrorR   t   internal_name(   t   mlistR   t   header_namet   continuation_wst
   maxlinelent   charset(    (    s;   /export/web/mailman/mailman/Mailman/Handlers/CookHeaders.pyt   uheader8   s    	c         C   s«   | j  d ƒ d k s9 | j  d ƒ d k rI | j d k rI | j  d ƒ s[ |  j ƒ  d	 k rt | | j d i  ƒ |  <n3 | sŠ | j |  ƒ r§ | rš | |  =n  | | |  <n  d  S(
   Nt   from_is_listi   i    t
   _fasttrackt   froms   reply-tot   cct
   add_header(   R#   s   reply-toR$   (   t   getR!   t   lowert
   setdefaultt   has_key(   t   namet   valueR   t   msgt   msgdatat   deletet   repl(    (    s;   /export/web/mailman/mailman/Mailman/Handlers/CookHeaders.pyt   change_headerL   s    $
c   $         s  | j  d ƒ r( t d d |  | | ƒ n  d | k rG | j ƒ  | d <n  | j  d ƒ } | j  d ƒ rž | rž y t |  | | ƒ Wqž t t f k
 rš qž Xn  t d |  j ƒ  |  | | d t ƒt d	 t j	 |  | | d
 t ƒt d d |  | | d
 t ƒ| j  d ƒ s|  j
 r| rt | j d g  ƒ ƒ } g  | D]% } | d j d ƒ d k r9| ^ q9} t | ƒ d k r| d \ } } } n d } | d } | | f } | sß|  j | ƒ rÖ|  j | ƒ pÐ| } qß| } n  t j d d | ƒ } t | t ƒ r| }	 n' t | ƒ \ }
 } t |
 | d d ƒ}	 t j |  j ƒ } t |  j | d d ƒ} d } d } t j ƒ  } t j |  j ƒ t d ƒ } t j | ƒ t | | d d ƒ} t j d | t j d |	 | ƒ ƒ } t t  | | ƒ ƒ } t d t! | |  j ƒ  f ƒ |  | | ƒ n d  } | sØg  ‰ i  ‰  ‡  ‡ f d †  } |  j# d k rf| t$ |  j% ƒ ƒ n  t } |  j& s±| j d g  ƒ } x' t | ƒ D] } | | ƒ t' } q”Wn  | r|  j# d k r| rñˆ  j( | d j) ƒ  ƒ rd  } qq| | ƒ d  } n  |  j# d k rGt* |  |  j+ d  ƒ } | t | ƒ |  j ƒ  f ƒ n  ˆ rˆt d  t, j- g  ˆ D] } t! | ƒ ^ q`ƒ |  | | ƒ n | d =|  j. d k o´|  j# d k o´|  j/ } | sÃ| rØg  ‰ i  ‰  | râ| | ƒ n  | j( d! ƒ r3| d! j( d" ƒ r3xY t | d! d" g ƒ D] } | | ƒ qWn- x* t | j d# g  ƒ ƒ D] } | | ƒ qLW| ršt* |  |  j+ d" ƒ } | t | ƒ |  j ƒ  f ƒ n  t d" t, j- g  ˆ D] } t! | ƒ ^ q­ƒ |  | | ƒ qØn  | j  d$ ƒ sñ|  j0 rõd  Sd% |  j1 ƒ  |  j2 f } t j |  j ƒ } |  j+ rt* |  |  j+ d& d' d( ƒ} t! t | ƒ | f ƒ } t | ƒ rƒt! t | ƒ | f ƒ } qšd) | } n
 d) | } t d& | |  | | ƒ |  j3 ƒ  } d* } |  j4 d+ d, d ƒ} |  j4 d- d, d ƒ} i  }  | j  d. ƒ rd/ |  d0 <n† |  j5 i d1 | d2 6| | | d3 f d4 6| | | d f d5 6ƒ |  j6 rnd6 |  j ƒ  |  d7 <n  |  j7 r”|  j8 ƒ  }! d) |! |  d8 <n  xk |  j9 ƒ  D]] \ }" }# t |" ƒ d t |# ƒ d9 k rèt: j- |# j; d: ƒ ƒ }# n  t |" |# |  | | ƒ q¡Wd  S(;   Nt   noacks   X-Ackt   not   original_senderR"   t   isdigests   X-BeenThereR.   s   X-Mailman-VersionR/   t
   Precedencet   listR!   R#   i   t   @i    R   s   @([^ .]+\.)+[^ .]+$s   ---t   errorst   replaces   %(realname)ss   %(lrn)ss   %(realname)s via %(lrn)su	   %\(lrn\)su   %\(realname\)st   Fromc            s>   |  d j  ƒ  } ˆ  j | ƒ r# d  S|  ˆ  | <ˆ j |  ƒ d  S(   Ni   (   R'   R)   t   append(   t   pairt   lcaddr(   t   dt   new(    s;   /export/web/mailman/mailman/Mailman/Handlers/CookHeaders.pyt   addÞ   s
    
i   s   reply-tos   Reply-ToR%   t   CcR$   t   _nolists   %s.%ss   List-IdR   iæ  s   <%s>s%   <%s>, <mailto:%s?subject=%ssubscribe>t   listinfot   absolutet   optionst   reduced_list_headerst   yess   X-List-Administrivias   <mailto:%s?subject=help>s	   List-Helpt   uns   List-Unsubscribes   List-Subscribes   <mailto:%s>s	   List-Posts   List-ArchiveiN   s   , (<   R&   R0   t
   get_sendert   prefix_subjectR   t
   ValueErrort   GetListEmailt   FalseR   t   VERSIONR!   R   t   get_allt   findt   lent   isMembert   getMemberNamet   ret   subR   t   unicodet
   ch_onelineR   R   R   t	   real_nameR
   t   get_translationt   set_languageR   t   set_translationt   strR   R   t   Nonet   reply_goes_to_listR   t   reply_to_addresst   first_strip_reply_tot   TrueR)   R'   R    t   descriptiont
   COMMASPACEt   joint   personalizet   anonymous_listt   include_rfc2369_headersR   t	   host_namet   GetRequestEmailt   GetScriptURLt   updatet   include_list_post_headert   archivet   GetBaseArchiveURLt   itemst   CONTINUATIONt   split($   R   R,   R-   t	   fasttrackt   faddrst   xt   realnamet   emailt   o_fromt   urnt   rnt   cst   lcst   ulrnt   lrnt   otranst   viat   uviat   dnR@   t   o_rtt   origR<   t   i18ndesct   add_listt   listidt   csett   listid_ht   requestaddrt   subfieldfmtRC   t   useroptst   headerst
   archiveurlt   ht   v(    (   R>   R?   s;   /export/web/mailman/mailman/Mailman/Handlers/CookHeaders.pyt   process^   sü    	2
		$	

	%
%	
			 c         C   s  |  j  j ƒ  } | s d  S| j d d ƒ } t | t ƒ rO t | ƒ j ƒ  } n | j ƒ  } d } t | ƒ d k r¢ | d r¢ | d d d k r¢ | d d } n  | | d <t | ƒ \ } } t	 | | ƒ } t
 j | ƒ } d j | j d	 ƒ ƒ } t
 j d
 ƒ }	 |	 j | d ƒ r0|	 j d | ƒ } t }
 n	 t j }
 t
 j | d | ƒ } t
 j d | t
 j ƒ } | r…| | j ƒ  } d } n d } | j ƒ  } | d k rüt j ƒ  } t j |  j ƒ t d ƒ } t j | ƒ t j |  j ƒ } t	 | | ƒ } n  y | |  j } Wn t  k
 r n X| d k r&yâ |
 rQd j | | | g ƒ } n6 | rrd j | | | g ƒ } n d j | | g ƒ } | j! d ƒ } t" |  | d d | ƒ} t# d | |  | | ƒ d j | | g ƒ } | j! d ƒ } t" |  | d d | ƒ} | | d <d  SWq&t$ k
 r"q&Xn  | d 7} | rC| d 7} n  |
 rqt" |  | d d | ƒ} | j% | ƒ n% t" |  | d d | ƒ} | j% | ƒ | j! | d ƒ } | j% | | ƒ t# d | |  | | ƒ t" |  | d d | ƒ} | j% | | ƒ | | d <d  S(   Nt   subjectR   R   i   i    s    	t   origsubjt   %s   \%s   %\d*ds	   \s*\d+\s*s'   (\s*(RE|AW|SV|VS)\s*(\[\d+\])?\s*:\s*)+s   Re:s   (no subject)s   us-asciiu    t   SubjectR   t   stripped_subjectR9   (&   t   subject_prefixt   stripR&   R   R   R\   t
   splitlinesRQ   RW   RV   RT   t   escapeRd   Rq   t   compileR   RU   RM   R   t   OLD_STYLE_PREFIXINGt   matcht   It   endR
   RY   RZ   R   R   R[   R   R   t   post_idt	   TypeErrort   encodeR    R0   R   R;   (   R   R,   R-   t   prefixR‘   t   linest   wsR‡   t   prefix_patternt   pt	   old_stylet   rematcht   recolonR~   RŽ   t   ss(    (    s;   /export/web/mailman/mailman/Mailman/Handlers/CookHeaders.pyRJ   y  sŽ    0
			

c   	      C   sç   y­ t  |  ƒ } g  | D] \ } } | j ƒ  | f ^ q } d } x& | D] } | d rG | d } PqG qG Wt | ƒ } | j ƒ  } d j | j ƒ  ƒ } | j | d ƒ | f SWn3 t t t	 t
 f k
 râ d j |  j ƒ  ƒ d f SXd  S(   Ns   us-asciii   u    R9   R   (   R   t   rstripR   t   __unicode__Rd   R˜   R¡   t   LookupErrorR   RK   R	   (	   t	   headerstrR>   R   t   cR‡   Rt   RŽ   t   ustrt   oneline(    (    s;   /export/web/mailman/mailman/Mailman/Handlers/CookHeaders.pyRW   í  s    +

()   t   __doc__t
   __future__R    RT   t   typesR   t   email.CharsetR   t   email.HeaderR   R   R   t   email.UtilsR   R   R   t   email.ErrorsR	   t   MailmanR
   R   R   t   Mailman.i18nR   t   Mailman.Logging.SyslogR   Rp   Rc   t
   MAXLINELENRa   RM   t	   NameErrorR   Rš   R   R]   R    R0   R   RJ   RW   (    (    (    s;   /export/web/mailman/mailman/Mailman/Handlers/CookHeaders.pyt   <module>   s8   
		ÿ 	t