;ň
˘)?Bc           @   sĽ  d  Z  d k l Z d k Z d k Z d k Z d k Z d k Z d k Z d k	 Z	 d k
 Z
 d k Z d k Z d k Z d k l Z d k l Z l Z y d k l Z Wn) e j
 o d Z e e i   Z n Xd 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 Z" d Z# d Z$ e e d Z% e i& d e i'  Z( e i& d e i'  Z) d   Z* d   Z+ d e d  Z, d   Z- d   Z. d   Z/ e i& d  Z0 d   Z1 d d  Z2 e3 e d  Z4 d    Z5 e d!  Z6 d" d# d$ d% d& f Z7 d' d( d) d* d+ d, d- d. d/ d0 d1 d2 d3 d4 d5 d6 d7 f Z8 g  Z9 xA e7 D]9 Z: x0 e8 D]( Z; e9 i< e; e:  e9 i< e: e;  qsWqfW[; [: d8 d9  Z= d:   Z> e d;  Z? e d<  Z@ e d=  ZA d>   ZB d?   ZC e d@  ZD dA   ZE e3 e e3 e3 dB  ZF e3 e e3 e3 dC  ZG h  dD d d f <dE d d f <dF d d f <dG d d f <dH d d f <dI dJ dJ f <dK d d f <dL dM dM f <dN d dM f <dO d d f <dP d d f <ZH dQ   ZI e3 e dR  ZJ e3 e dS  ZK dT   ZL dU   ZM dV   ZN dW   ZO e3 e3 dX  ZP d aQ dY   ZR e3 dZ  ZS d[   ZT d\   ZU d]   ZV d^   ZW e3 d_  ZX e3 d`  ZY da   ZZ db   Z[ d S(c   sř   Miscellaneous essential routines.

This includes actual message transmission routines, address checking and
message and address munging, a handy-dandy routine to map a function on all
the mailing lists, and whatever else doesn't belong elsewhere.

(   s   nested_scopesN(   s   UnicodeType(   s
   whitespaces   digits(   s   ascii_letterss   abcdefghijklmnopqrstuvwxyz(   s   mm_cfg(   s   Errors(   s   Site(   s   SafeDicti   i    s    u    s   
s   .s   _s   %\(([_a-z]\w*?)\)s?s%   (\${2})|\$([_a-z]\w*)|\${([_a-z]\w*)}c         C   sh   t  i |   } xN d d d d f D]: } t i i | d |  } t i i	 |  o t
 Sq" q" Wt Sd S(   s'   Return true iff list `listname' exists.s   .pcks	   .pck.lasts   .dbs   .db.lasts   configN(   s   Sites   get_listpaths   listnames   basepaths   exts   oss   paths   joins   dbfiles   existss   Trues   False(   s   listnames   dbfiles   basepaths   ext(    (    s   /var/mailman/Mailman/Utils.pys   list_existsJ   s      c           C   s   t  i   Sd S(   s8   Return the names of all lists in default list directory.N(   s   Sites   get_listnames(    (    (    s   /var/mailman/Mailman/Utils.pys
   list_namesY   s     iF   c         C   s  d }	 t i d |   } xu| D]m} g  } t } x | i t	  D] }
 |
 o | i |
  qA n | o |
 d t j o
 t } n t } | o | o  | d i   d |
 | d <n | i |
  | } qA WxŻ| D]§}  x|  ot |   | j o |  }
 d }  n\| } x- | d j o |  | t j o | d 8} qW| } x- | d j o |  | t j o | d 8} qIW| d j o | } x3 | t |   j  o |  | t j o | d 7} qW| } x3 | t |   j  o |  | t j o | d 7} qČW| d 8} n |  | d  d }
 | d 7} x3 | t |   j  o |  | t j o | d 7} q(W|  | }  |	 |
 7}	 qŕ W|	 d 7}	 q× W|	 d 7}	 q W|	 d  Sd	 S(
   sŇ  Wrap and fill the text to the specified column.

    Wrapping is always in effect, although if it is not possible to wrap a
    line (because some word is longer than `column' characters) the line is
    broken at the next available whitespace boundary.  Paragraphs are also
    always filled, unless honor_leading_ws is true and the line begins with
    whitespace.  This is the algorithm that the Python FAQ wizard uses, and
    seems like a good compromise.

    s    s   

i    i˙˙˙˙s    i   s   
iţ˙˙˙N(   s   wrappeds   res   splits   texts   parass   paras   liness   Falses   fillprevs   NLs   lines   appends   honor_leading_wss
   whitespaces   fillthiss   Trues   rstrips   lens   columns   bols   eol(   s   texts   columns   honor_leading_wss   paras   liness   fillthiss   parass   bols   fillprevs   wrappeds   lines   eol(    (    s   /var/mailman/Mailman/Utils.pys   wrapa   sl    
   
 
  
   $ $
 $
c         C   s&   d } d } | i |  i |   Sd  S(   Ns   
 .
s   
.
(   s   JOINERs   SEPs   joins   texts   split(   s   texts   JOINERs   SEP(    (    s   /var/mailman/Mailman/Utils.pys   QuotePeriodsŹ   s    c         C   sw   t  } t  } |  i   }  |  i d  } | d j  o |  t  f Sn |  |  } |  | d } | i d  } | | f Sd  S(   Ns   @i   s   .(	   s   Nones   users   domains   emails   lowers   finds   at_signs   rests   split(   s   emails   domains   rests   users   at_sign(    (    s   /var/mailman/Mailman/Utils.pys
   ParseEmailł   s    
c         C   sF   |  i d  } | d j o |  Sn |  |  d |  | d i   Sd S(   s3   returns the address with the domain part lowercaseds   @i˙˙˙˙i   N(   s   addrs   finds   atinds   lower(   s   addrs   atind(    (    s   /var/mailman/Mailman/Utils.pys   LCDomainŔ   s
     s   [][()<>|;^,/\200-\377]c         C   s­   |  p |  i d  d j o t i  n t i |   p |  d d j o t i |   n t |   \ } } | o t i |   n t
 |  d j  o t i |   n d S(   s4   Verify that the an email address isn't grossly evil.s    i    s   -i   N(   s   ss   counts   Errorss   MMBadEmailErrors	   _badcharss   searchs   MMHostileAddresss
   ParseEmails   users   domain_partss   len(   s   ss   domain_partss   user(    (    s   /var/mailman/Mailman/Utils.pys   ValidateEmailË   s     !s	   PATH_INFOc         C   s^   t  i i |   } | o= g  i } | i d  D] } | o | |  q0 q0 ~ Sn t	 Sd  S(   Ns   /(
   s   oss   environs   gets   envars   paths   appends   _[1]s   splits   ps   None(   s   envars   _[1]s   ps   path(    (    s   /var/mailman/Mailman/Utils.pys   GetPathPiecesŰ   s    =c         C   s5  | t j o3 t i t   } | d d j o | d } q@ n t i i d  } | t j o, t i i d d  t i i d d  } n t	 i	 |  d } | o | i |  of | t |  } | i d  } | d	 j o | i d d	 |  } n | i d  } d
 | |  } n | |  } | t i Sd S(   sŁ   target - scriptname only, nothing extra
    web_page_url - the list's configvar of the same name
    absolute - a flag which if set, generates an absolute url
    i˙˙˙˙s   /s   REQUEST_URIs   SCRIPT_NAMEs    s	   PATH_INFOi   s   ?i    s   ../N(   s   web_page_urls   Nones   mm_cfgs   DEFAULT_URL_PATTERNs
   get_domains   oss   environs   gets   fullpaths   urlparses   baseurls   absolutes   endswiths   lens   finds   is   counts   targets   paths   CGIEXT(   s   targets   web_page_urls   absolutes   counts   is   baseurls   paths   fullpath(    (    s   /var/mailman/Mailman/Utils.pys	   ScriptURLă   s$     ,
c         C   s   |  i   }  t |   \ } } |  g } | oS | d } xF t |  d j o. | i d | t i	 |  f  | d } q; Wn | Sd S(   s  returns a sorted list of addresses that could possibly match
    a given name.

    For Example, given scott@pobox.com, return ['scott@pobox.com'],
    given scott@blackbox.pobox.com return ['scott@blackbox.pobox.com',
                                           'scott@pobox.com']i   i   s   %s@%sN(
   s   names   lowers
   ParseEmails   users   domains   ress   lens   appends   DOTs   join(   s   names   domains   ress   user(    (    s   /var/mailman/Mailman/Utils.pys   GetPossibleMatchingAddrs   s     	
  c         C   sU   h  } | o% x= |  D] } t | | i   <q Wn x |  D] } t | | <q9 W| Sd S(   s<   Return a dict keyed by the entries in the list passed to it.N(   s   ds   foldcases   Ls   is   Trues   lower(   s   Ls   foldcases   is   d(    (    s   /var/mailman/Mailman/Utils.pys	   List2Dict  s       s   as   es   is   os   us   bs   cs   ds   fs   gs   hs   ks   ms   ns   ps   rs   ss   ts   vs   ws   xs   zi   c         C   sP   g  } x2 t |  d |  j  o | i t i t   q	 Wt i |  |   Sd  S(   Ni   (	   s   sylss   lens   lengths   appends   randoms   choices
   _syllabless   EMPTYSTRINGs   join(   s   lengths   syls(    (    s   /var/mailman/Mailman/Utils.pys   MakeRandomPassword,  s
     c          C   sV   t  t i   d  } t  t i   d  }  d   } d t t | | |  f   Sd  S(   Ni4   c         C   s`   d |  j o
 d j  n o |  d 7}  n d |  j o
 d j  n o |  d 7}  n |  Sd  S(   Ni    i   iA   i4   iG   (   s   c(   s   c(    (    s   /var/mailman/Mailman/Utils.pys   mkletter5  s
    s   %c%c(   s   ints   randoms   chr1s   chr2s   mkletters   tuples   map(   s   chr2s   chr1s   mkletter(    (    s   /var/mailman/Mailman/Utils.pys   GetRandomSeed2  s    	c         C   s~   | o t i } n
 t i } t i d  } z= t | d  } | i
 t i |   i   d  | i   Wd  t i |  Xd  S(   Ni   s   ws   
(   s	   siteadmins   mm_cfgs   SITE_PW_FILEs   filenames   LISTCREATOR_PW_FILEs   oss   umasks   omasks   opens   fps   writes   shas   news   pws	   hexdigests   close(   s   pws	   siteadmins   fps   filenames   omask(    (    s   /var/mailman/Mailman/Utils.pys   set_global_password@  s    	  c         C   s   |  o t i } n
 t i } y* t |  } | i   d  } | i	   Wn3 t
 j
 o' } | i t i j o   n t Sn X| Sd  S(   Ni˙˙˙˙(   s	   siteadmins   mm_cfgs   SITE_PW_FILEs   filenames   LISTCREATOR_PW_FILEs   opens   fps   reads	   challenges   closes   IOErrors   es   errnos   ENOENTs   None(   s	   siteadmins   fps   es	   challenges   filename(    (    s   /var/mailman/Mailman/Utils.pys   get_global_passwordO  s    	 	c         C   s>   t  |  } | t j o t Sn | t i |   i   j Sd  S(   N(   s   get_global_passwords	   siteadmins	   challenges   Nones   shas   news   responses	   hexdigest(   s   responses	   siteadmins	   challenge(    (    s   /var/mailman/Mailman/Utils.pys   check_global_password_  s    c         C   s   t  i |  d t Sd  S(   Ns   quote(   s   cgis   escapes   ss   True(   s   s(    (    s   /var/mailman/Mailman/Utils.pys   websafeg  s    c         C   si   |  i d d  } t |  d j o6 y | d t | d  f SWq[ t j
 o q[ Xn |  d f Sd  S(   Ns   :i   i   i    iw   (   s   ss   splits   partss   lens   ints
   ValueError(   s   ss   parts(    (    s   /var/mailman/Mailman/Utils.pys	   nntpsplitk  s    	c         C   s/   | o |  i d d  Sn |  i d d  Sd S(   s˘   Make email address unrecognizable to web spiders, but invertable.

    When for_text option is set (not default), make a sentence fragment
    instead of a token.s   @s    at s   --at--N(   s   for_texts   addrs   replace(   s   addrs   for_text(    (    s   /var/mailman/Mailman/Utils.pys   ObscureEmaily  s     c         C   s   |  i d d  Sd S(   s!   Invert ObscureEmail() conversion.s   --at--s   @N(   s   addrs   replace(   s   addr(    (    s   /var/mailman/Mailman/Utils.pys   UnobscureEmail  s     c         C   ső  g  } | t j	 o | i |  n | t j	 o | i | i  n | i t i  g  } | t j	 o9 | i | i	    | i t
 i i t i | i   n | i t
 i i t i d   | i t i  d } t }
 y x | D]} } xt | D]l } t
 i i | | |   } y t |  }
 |  Wqó t j
 o) } | i t i j o   n t }
 qó Xqó Wqć WWn | j
 o n X|
 t j ov y+ t
 i i t i d |   } t |  }
 Wqt j
 o8 } | i t i j o   n t t i d |    qXn |
 i   }	 |
 i   |	 } | t j	 o˘ y` t |  } y | i  |	  } Wn: t! j
 o. t" |	 t# |  d  } | i  |  } n XWqĚt% t& f j
 o) } d k' l( } | d d | |  qĚXn | o | | f Sn t* |  | f Sd  S(	   Ns   sites	   quickexits   ens   No template file founds   replace(   s   syslogs   errors   broken template: %s
%s(+   s	   languagess   langs   Nones   appends   mlists   preferred_languages   mm_cfgs   DEFAULT_SERVER_LANGUAGEs
   searchdirss   fullpaths   oss   paths   joins   TEMPLATE_DIRs	   host_names	   quickexits   fps   dirs   templatefiles   filenames   opens   IOErrors   es   errnos   ENOENTs   reads   templates   closes   texts   dicts   SafeDicts   sdicts   interpolates   UnicodeErrors   unicodes
   GetCharSets	   utemplates	   TypeErrors
   ValueErrors   Mailman.Logging.Syslogs   syslogs   raws   wrap(   s   templatefiles   dicts   raws   langs   mlists   texts   sdicts   filenames	   languagess   templates   fps	   utemplates
   searchdirss   es   syslogs	   quickexits   dir(    (    s   /var/mailman/Mailman/Utils.pys   findtext  sn    4&  
  
	c         C   s   t  |  | | | |  d Sd  S(   Ni    (   s   findtexts   templatefiles   dicts   raws   langs   mlist(   s   templatefiles   dicts   raws   langs   mlist(    (    s   /var/mailman/Mailman/Utils.pys   maketextü  s    s   confirms   helps   infos   listss   optionss   passwordi   s   removes   seti   s	   subscribes   unsubscribes   whoc         C   sŕ  d }
 g  } xl t i i |   D]X }	 |	 d j o Pn |	 i   o |
 d 7}
 n |
 t i	 j o t
 Sn | i |	  q Wt i |  } t i | i   i    o t Sn | d  } t |  i d d   } | i |  xř | D]đ }	 |	 i   o qä n g  i } |	 i   D] } | | i    q~ } t i | d t t f  \ } } | t j o
 | t j o qä n | t | d  j o
 | j n o7 | d d j o | d d	 d
 f j o qä n t Sqä qä Wt
 Sd  S(   Ni    s   -- i   i   s   subjects    s   seti   s   ons   off(   s   linecnts   liness   emails	   Iteratorss   body_line_iterators   msgs   lines   strips   mm_cfgs   DEFAULT_MAIL_COMMANDS_MAX_LINESs   Falses   appends   NLs   joins   bodytexts	   ADMINDATAs   has_keys   lowers   Trues	   bodyliness   strs   gets   subjects   _[1]s   splits   words   wordss   Nones   minargss   maxargss   len(   s   msgs   bodytexts   minargss   wordss   maxargss   words   liness   _[1]s	   bodyliness   lines   linecnts   subject(    (    s   /var/mailman/Mailman/Utils.pys   is_administrivia  s<     
 3"((c         C   s   |  } t i i d  o t i d } nC t i i d  o t i i d  o t i d t i d } n | o t |  Sn | Sd S(   s  Return the full virtual path this CGI script was invoked with.

    Newer web servers seems to supply this info in the REQUEST_URI
    environment variable -- which isn't part of the CGI/1.1 spec.
    Thus, if REQUEST_URI isn't available, we concatenate SCRIPT_NAME
    and PATH_INFO, both of which are part of CGI/1.1.

    Optional argument `fallback' (default `None') is returned if both of
    the above methods fail.

    The url will be cgi escaped to prevent cross-site scripting attacks,
    unless `escape' is set to 0.
    s   REQUEST_URIs   SCRIPT_NAMEs	   PATH_INFON(   s   fallbacks   urls   oss   environs   has_keys   escapes   websafe(   s   fallbacks   escapes   url(    (    s   /var/mailman/Mailman/Utils.pys   GetRequestURI:  s     &c         C   sż   x¸ |  o° | o |   n y t i d t i  \ } } Wn: t j
 o. } | i	 t	 i
 j o   n |  i   Pn X| d j o% y |  | =WqŞ t j
 o qŞ Xn | o Pq q Wd  S(   Ni˙˙˙˙i    (   s   kidss   funcs   oss   waitpids   WNOHANGs   pids   statuss   OSErrors   es   errnos   ECHILDs   clears   KeyErrors   once(   s   kidss   funcs   onces   statuss   es   pid(    (    s   /var/mailman/Mailman/Utils.pys   reapT  s$     
	c         C   s   t  i |  d Sd  S(   Ni    (   s   mm_cfgs   LC_DESCRIPTIONSs   lang(   s   lang(    (    s   /var/mailman/Mailman/Utils.pys   GetLanguageDescrj  s    c         C   s   t  i |  d Sd  S(   Ni   (   s   mm_cfgs   LC_DESCRIPTIONSs   lang(   s   lang(    (    s   /var/mailman/Mailman/Utils.pys
   GetCharSetn  s    c         C   s   t  i i |   Sd  S(   N(   s   mm_cfgs   LC_DESCRIPTIONSs   has_keys   lang(   s   lang(    (    s   /var/mailman/Mailman/Utils.pys
   IsLanguageq  s    c          C   s§   t  i i d t  i i d   } t  i i d  } | o | i d |  o | t |  d  } n t i o | o | i	   Sn t i
 p t i }  |  i	   Sd  S(   Ns	   HTTP_HOSTs   SERVER_NAMEs   SERVER_PORTs   :i   (   s   oss   environs   gets   hosts   ports   endswiths   lens   mm_cfgs   VIRTUAL_HOST_OVERVIEWs   lowers   DEFAULT_HOST_NAMEs   DEFAULT_EMAIL_HOSTs   hostname(   s   hostnames   hosts   port(    (    s   /var/mailman/Mailman/Utils.pys
   get_domainv  s    !c         C   sf   |  t j o t i i t   t    }  n | t j o d t i |  f Sn d t i | |  f Sd  S(   Ns   %s@%ss   %s-%s@%s(   s   hostnames   Nones   mm_cfgs   VIRTUAL_HOSTSs   gets
   get_domains   extras   MAILMAN_SITE_LIST(   s   hostnames   extra(    (    s   /var/mailman/Mailman/Utils.pys   get_site_email  s
    c         C   s@   d t  t i   t i   |  i   |  i f } t  d 7a  | Sd  S(   Ns   <mailman.%d.%d.%d.%s@%s>i   (   s   _serials   times   oss   getpids   mlists   internal_names	   host_names   msgid(   s   mlists   msgid(    (    s   /var/mailman/Mailman/Utils.pys   unique_message_id  s     .
c         C   sD   |  t j o t i   d  }  n t i |  d f d d f  Sd  S(   Ni   i    i   i˙˙˙˙(   s   dates   Nones   times	   localtimes   mktime(   s   date(    (    s   /var/mailman/Mailman/Utils.pys   midnightĄ  s    c         C   sľ   |  i d d  i d d  }  t i |   } xt t d t |  d  D]Z } | | d o | | d d t j o d | | d	 | | <qF d | | | | <qF Wt	 i
 |  Sd
 S(   s$   Convert from %-strings to $-strings.s   $s   $$s   %%s   %i   i   i    s   ${s   }N(   s   ss   replaces   cres   splits   partss   ranges   lens   is
   IDENTCHARSs   EMPTYSTRINGs   join(   s   ss   is   parts(    (    s   /var/mailman/Mailman/Utils.pys	   to_dollar°  s      (c         C   sŢ   |  i d d  i d d  }  t i |   } x t d t |  d  D]z } | | t j	 o d | | <qF | | d t j	 o" d | | d d | | d <qF d | | d	 d | | d	 <qF Wt	 i
 t t |   Sd
 S(   s$   Convert from $-strings to %-strings.s   %s   %%s   $$s   $i   i   s   %(s   )si   N(   s   ss   replaces   dres   splits   partss   ranges   lens   is   Nones   EMPTYSTRINGs   joins   filter(   s   ss   is   parts(    (    s   /var/mailman/Mailman/Utils.pys
   to_percentź  s      ""c         C   ss   h  } xb t t g  i } t i |   D]' \ } } } | | p | p t  q& ~  D] } t | | <qW W| Sd S(   s?   Return the set (dictionary) of identifiers found in a $-string.N(   s   ds   filters   Nones   appends   _[1]s   dres   findalls   ss   as   bs   cs   names   True(   s   ss   as   _[1]s   bs   ds   cs   name(    (    s   /var/mailman/Mailman/Utils.pys   dollar_identifiersĘ  s     Q c         C   s2   h  } x! t i |   D] } t | | <q W| Sd S(   s?   Return the set (dictionary) of identifiers found in a %-string.N(   s   ds   cres   findalls   ss   names   True(   s   ss   ds   name(    (    s   /var/mailman/Mailman/Utils.pys   percent_identifiersŇ  s      c   	         s  g    t i d |   }   d   } xň t oę   i | i d   | o Pn | i d  } | i
 d  oG y | t | d   Wqt j
 o   i d | d  qXq' t i i | d  } | i
 d  o | i d  o | t | d d	 !  q'   i |  q' Wt i    } t | t  o | Sn | t j o
 d
 } n$ t |  } | d j o
 d
 } n t | | d  Sd  S(   Ns   &(?P<ref>[^;]+);c            s;   |  d j  o   i t |    n   i t |    d  S(   Ni   (   s   is   newpartss   appends   chrs   unichr(   s   i(   s   newparts(    s   /var/mailman/Mailman/Utils.pys   appchrŕ  s    i    s   #i   s   &s   ;s   ?i˙˙˙˙s
   iso-8859-1s   us-asciis   replace(   s   newpartss   res   splits   ss   partss   appchrs   Trues   appends   pops   refs
   startswiths   ints
   ValueErrors   htmlentitydefss
   entitydefss   gets   cs   endswiths   EMPTYSTRINGs   joins   newstrs
   isinstances   UnicodeTypes   langs   Nones   charsets
   GetCharSets   unicode(	   s   ss   langs   cs   refs   charsets   newpartss   newstrs   partss   appchr(    (   s   newpartss   /var/mailman/Mailman/Utils.pys   canonstrÝ  s6      

c         C   s   |  t j o
 d }  n | t j o
 d } n t |  } y8 t |  t  o |  i |  Sn t |  |  } |  SWn t
 j
 o t |   Sn Xd  S(   Nu    s   us-ascii(   s   ss   Nones   langs   charsets
   GetCharSets
   isinstances   UnicodeTypes   encodes   unicodes   us   UnicodeErrors   uquote(   s   ss   langs   charsets   u(    (    s   /var/mailman/Mailman/Utils.pys
   uncanonstr  s    

c         C   si   g  } xI |  D]A } t |  } | d j o | i d |  q | i |  q Wt t i |   Sd  S(   Ni   s   &#%3d;(	   s   as   ss   cs   ords   os   appends   strs   EMPTYSTRINGs   join(   s   ss   as   cs   o(    (    s   /var/mailman/Mailman/Utils.pys   uquote   s     c         C   s   yS t  i i t  i i |    } | i   } t i	 | i
    } | i | d  SWn, t t f j
 o t i	 |  i
    Sn Xd  S(   Ns   replace(   s   emails   Headers   make_headers   decode_headers   ss   hs   __unicode__s   ustrs   UEMPTYSTRINGs   joins
   splitliness   lines   encodes   csets   LookupErrors   UnicodeErrors   EMPTYSTRING(   s   ss   csets   ustrs   hs   line(    (    s   /var/mailman/Mailman/Utils.pys   oneline,  s    (\   s   __doc__s
   __future__s   nested_scopess   oss   res   randoms   urlparses   shas   errnos   times   cgis   htmlentitydefss   email.Headers   emails   email.Iteratorss   typess   UnicodeTypes   strings
   whitespaces   digitss   ascii_letterss   ImportErrors   _lowers   uppers   Mailmans   mm_cfgs   Errorss   Sites   Mailman.SafeDicts   SafeDicts   Trues   Falses	   NameErrors   EMPTYSTRINGs   UEMPTYSTRINGs   NLs   DOTs
   IDENTCHARSs   compiles
   IGNORECASEs   cres   dres   list_existss
   list_namess   wraps   QuotePeriodss
   ParseEmails   LCDomains	   _badcharss   ValidateEmails   GetPathPiecess   Nones	   ScriptURLs   GetPossibleMatchingAddrss	   List2Dicts   _vowelss   _consonantss
   _syllabless   vs   cs   appends   MakeRandomPasswords   GetRandomSeeds   set_global_passwords   get_global_passwords   check_global_passwords   websafes	   nntpsplits   ObscureEmails   UnobscureEmails   findtexts   maketexts	   ADMINDATAs   is_administrivias   GetRequestURIs   reaps   GetLanguageDescrs
   GetCharSets
   IsLanguages
   get_domains   get_site_emails   _serials   unique_message_ids   midnights	   to_dollars
   to_percents   dollar_identifierss   percent_identifierss   canonstrs
   uncanonstrs   uquotes   oneline(L   s   Errorss   get_site_emails   ascii_letterss   randoms   midnights
   get_domains   is_administrivias   UEMPTYSTRINGs   onelines	   _badcharss   percent_identifierss   wraps   unique_message_ids   ValidateEmails   GetPossibleMatchingAddrss
   uncanonstrs   DOTs
   IDENTCHARSs
   _syllabless   QuotePeriodss   LCDomains   NLs
   whitespaces   GetRandomSeeds   errnos   findtexts   reaps   _lowers   res   GetRequestURIs   GetPathPiecess   get_global_passwords   _vowelss   Trues   emails	   ScriptURLs   cgis   ObscureEmails   list_existss	   nntpsplits   nested_scopess	   to_dollars	   ADMINDATAs   cres   htmlentitydefss
   GetCharSets
   list_namess   mm_cfgs   GetLanguageDescrs   websafes   dollar_identifierss
   IsLanguages   maketexts   canonstrs	   List2Dicts   digitss   cs   SafeDicts   Falses   dres   MakeRandomPasswords   uquotes   vs   Sites   EMPTYSTRINGs   urlparses   shas   UnicodeTypes   check_global_passwords
   ParseEmails   times   UnobscureEmails   _consonantss
   to_percents   oss   set_global_password(    (    s   /var/mailman/Mailman/Utils.pys   ?   s°   													K						9  			
	qŤ	'									.	