;ò
¢)?Bc           @   s  d  Z  d k Z d k l Z d k l Z d k l Z d k l Z d k l	 Z	 d k
 l Z y e e f Wn e j
 o d Z d	 Z n Xd
 „  Z d e i f d „  ƒ  YZ d e i f d „  ƒ  YZ e	 i Z d f  d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d S(   s9  Do more detailed spam detection.

This module hard codes site wide spam detection.  By hacking the
KNOWN_SPAMMERS variable, you can set up more regular expression matches
against message headers.  If spam is detected the message is discarded
immediately.

TBD: This needs to be made more configurable and robust.
N(   s   StringIO(   s	   Generator(   s   mm_cfg(   s   Errors(   s   i18n(   s   hold_for_approvali   i    c         C   s   |  Sd  S(   N(   s   s(   s   s(    (    s+   /var/mailman/Mailman/Handlers/SpamDetect.pys   _-   s    s   SpamDetectedc           B   s   t  Z d  Z RS(   s   The message contains known spam(   s   __name__s
   __module__s   __doc__(    (    (    s+   /var/mailman/Mailman/Handlers/SpamDetect.pys   SpamDetected2   s   s   HeaderMatchHoldc           B   s   t  Z e d ƒ Z RS(   Ns)   The message headers matched a filter rule(   s   __name__s
   __module__s   _s   reason(    (    (    s+   /var/mailman/Mailman/Handlers/SpamDetect.pys   HeaderMatchHold5   s   s   Teec           B   s   t  Z d „  Z d „  Z RS(   Nc         C   s   | |  _ | |  _ d  S(   N(   s   outfp_as   selfs   _outfp_as   outfp_bs   _outfp_b(   s   selfs   outfp_as   outfp_b(    (    s+   /var/mailman/Mailman/Handlers/SpamDetect.pys   __init__?   s    	c         C   s$   |  i i | ƒ |  i i | ƒ d  S(   N(   s   selfs   _outfp_as   writes   ss   _outfp_b(   s   selfs   s(    (    s+   /var/mailman/Mailman/Handlers/SpamDetect.pys   writeC   s    (   s   __name__s
   __module__s   __init__s   write(    (    (    s+   /var/mailman/Mailman/Handlers/SpamDetect.pys   Tee>   s   	s   HeaderGeneratorc           B   s)   t  Z e d d „ Z d „  Z d „  Z RS(   NiN   c         C   s#   t  i |  | | | ƒ d |  _ d  S(   Ns    (   s	   Generators   __init__s   selfs   outfps   mangle_from_s   maxheaderlens
   _headertxt(   s   selfs   outfps   mangle_from_s   maxheaderlen(    (    s+   /var/mailman/Mailman/Handlers/SpamDetect.pys   __init__J   s    c         C   sX   t  ƒ  } |  i } t | | ƒ |  _ z t i |  | ƒ Wd  | |  _ X| i	 ƒ  |  _
 d  S(   N(   s   StringIOs   sfps   selfs   _fps   oldfps   Tees	   Generators   _write_headerss   msgs   getvalues
   _headertxt(   s   selfs   msgs   oldfps   sfp(    (    s+   /var/mailman/Mailman/Handlers/SpamDetect.pys   _write_headersN   s    		 
c         C   s   |  i Sd  S(   N(   s   selfs
   _headertxt(   s   self(    (    s+   /var/mailman/Mailman/Handlers/SpamDetect.pys   header_textX   s    (   s   __name__s
   __module__s   Trues   __init__s   _write_headerss   header_text(    (    (    s+   /var/mailman/Mailman/Handlers/SpamDetect.pys   HeaderGeneratorI   s   	
c         C   s°  | i d ƒ o d  Sn xe t i D]Z \ } } t i | t i ƒ } | | }
 |
 o q" n | i |
 ƒ }	 |	 o
 t ‚ q" q" Wt t ƒ  ƒ } | i | ƒ | i ƒ  } x|  i D]ö \ } } } | t i j o q² n xÍ | i ƒ  D]¿ } | i d ƒ o qå n t i | | t i ƒ o‰ | t i j o t i  ‚ n | t i! j o t i" t# d ƒ ƒ ‚ n | t i$ j o t% |  | | t& ƒ n | t i' j o d  Sq¤qå qå Wq² Wd  S(   Ns   approveds   #s%   Message rejected by filter rule match((   s   msgdatas   gets   mm_cfgs   KNOWN_SPAMMERSs   headers   regexs   res   compiles
   IGNORECASEs   cres   msgs   values   searchs   mos   SpamDetecteds   HeaderGenerators   StringIOs   gs   flattens   header_texts   headerss   mlists   header_filter_ruless   patternss   actions   emptys   DEFERs
   splitliness   patterns
   startswiths   DISCARDs   Errorss   DiscardMessages   REJECTs   RejectMessages   _s   HOLDs   hold_for_approvals   HeaderMatchHolds   ACCEPT(   s   mlists   msgs   msgdatas   headers   regexs   headerss   patterns   emptys   gs   mos   values   patternss   cres   action(    (    s+   /var/mailman/Mailman/Handlers/SpamDetect.pys   process]   s>    
 

  (   s   __doc__s   res	   cStringIOs   StringIOs   email.Generators	   Generators   Mailmans   mm_cfgs   Errorss   i18ns   Mailman.Handlers.Holds   hold_for_approvals   Trues   Falses	   NameErrors   _s   DiscardMessages   SpamDetecteds   HoldMessages   HeaderMatchHolds   Tees   HeaderGenerators   process(   s   Errorss   Falses	   Generators   StringIOs   processs   SpamDetecteds   Tees   hold_for_approvals   res   HeaderMatchHolds   mm_cfgs   i18ns   HeaderGenerators   Trues   _(    (    s+   /var/mailman/Mailman/Handlers/SpamDetect.pys   ?   s&   			