;ò
¢)?Bc           @   s7  d  Z  d k Z d k Z d k Z d k Z d k Z d k l 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 d	 k l Z d
 k l Z d k l Z d k l Z d k l Z e i Z d Z d Z d Z d Z d Z  d Z! d Z" d Z# d Z$ d f  d „  ƒ  YZ% d „  Z& d S(   s  Mixin class for MailList which handles administrative requests.

Two types of admin requests are currently supported: adding members to a
closed or semi-closed list, and moderated posts.

Pending subscriptions which are requiring a user's confirmation are handled
elsewhere.
N(   s   StringIO(   s   MIMEMessage(   s	   Generator(   s   getaddresses(   s   mm_cfg(   s   Utils(   s   Message(   s   Errors(   s   UserDesc(   s   get_switchboard(   s   syslog(   s   i18ni    i   i   i   s   -s   
s	   ListAdminc           B   sã   t  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d	 „  Z
 d
 „  Z d „  Z d „  Z d „  Z e e e e d „ Z h  d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z e e d „ Z d „  Z RS(   Nc         C   s   d |  _ d  S(   Ni   (   s   selfs   next_request_id(   s   self(    (    s!   /var/mailman/Mailman/ListAdmin.pys   InitVarsB   s    c         C   s+   t  |  _ t i i |  i ƒ  d ƒ |  _ d  S(   Ns   request.pck(   s   Nones   selfs   _ListAdmin__dbs   oss   paths   joins   fullpaths   _ListAdmin__filename(   s   self(    (    s!   /var/mailman/Mailman/ListAdmin.pys   InitTempVarsF   s    	c         C   s    |  i t j oŒ y7 t |  i ƒ } z t i | ƒ |  _ Wd  | i ƒ  XWqœ t	 j
 oB } | i t i j o ‚  n h  |  _ t t i f |  i d <qœ Xn d  S(   Ns   version(   s   selfs   _ListAdmin__dbs   Nones   opens   _ListAdmin__filenames   fps   cPickles   loads   closes   IOErrors   es   errnos   ENOENTs   IGNs   mm_cfgs   REQUESTS_FILE_SCHEMA_VERSION(   s   selfs   fps   e(    (    s!   /var/mailman/Mailman/ListAdmin.pys   __opendbJ   s       	c         C   sÏ   |  i t j	 o» t t i f |  i d <|  i d } t i	 d ƒ } zX t | d ƒ } z7 t i |  i | d ƒ | i ƒ  t i | i ƒ  ƒ Wd  | i ƒ  XWd  t i	 | ƒ Xt |  _ t i | |  i ƒ n d  S(   Ns   versions   .tmpi   s   wi   (   s   selfs   _ListAdmin__dbs   Nones   IGNs   mm_cfgs   REQUESTS_FILE_SCHEMA_VERSIONs   _ListAdmin__filenames   tmpfiles   oss   umasks   omasks   opens   fps   cPickles   dumps   flushs   fsyncs   filenos   closes   rename(   s   selfs   fps   tmpfiles   omask(    (    s!   /var/mailman/Mailman/ListAdmin.pys	   __closedbY   s"     
  	c         C   sH   x= t  o5 |  i } |  i d 7_ |  i i | ƒ o Pq q W| Sd  S(   Ni   (   s   Trues   selfs   next_request_ids   nexts   _ListAdmin__dbs   has_key(   s   selfs   next(    (    s!   /var/mailman/Mailman/ListAdmin.pys   __nextidq   s      	
c         C   s   |  i ƒ  d  S(   N(   s   selfs   _ListAdmin__closedb(   s   self(    (    s!   /var/mailman/Mailman/ListAdmin.pys   SaveRequestsDbz   s    c         C   s   |  i ƒ  t |  i ƒ d Sd  S(   Ni   (   s   selfs   _ListAdmin__opendbs   lens   _ListAdmin__db(   s   self(    (    s!   /var/mailman/Mailman/ListAdmin.pys   NumRequestsPending}   s    
c         C   si   |  i ƒ  g  i } |  i i ƒ  D]- \ } \ } } | | j o | | ƒ q! q! ~ } | i ƒ  | Sd  S(   N(   s   selfs   _ListAdmin__opendbs   appends   _[1]s   _ListAdmin__dbs   itemss   ks   ops   datas   rtypes   idss   sort(   s   selfs   rtypes   ks   idss   _[1]s   datas   op(    (    s!   /var/mailman/Mailman/ListAdmin.pys   __getmsgids‚   s    
M
c         C   s   |  i t ƒ Sd  S(   N(   s   selfs   _ListAdmin__getmsgidss   HELDMSG(   s   self(    (    s!   /var/mailman/Mailman/ListAdmin.pys   GetHeldMessageIdsˆ   s    c         C   s   |  i t ƒ Sd  S(   N(   s   selfs   _ListAdmin__getmsgidss   SUBSCRIPTION(   s   self(    (    s!   /var/mailman/Mailman/ListAdmin.pys   GetSubscriptionIds‹   s    c         C   s   |  i t ƒ Sd  S(   N(   s   selfs   _ListAdmin__getmsgidss   UNSUBSCRIPTION(   s   self(    (    s!   /var/mailman/Mailman/ListAdmin.pys   GetUnsubscriptionIdsŽ   s    c         C   s%   |  i ƒ  |  i | \ } } | Sd  S(   N(   s   selfs   _ListAdmin__opendbs   _ListAdmin__dbs   ids   types   data(   s   selfs   ids   datas   type(    (    s!   /var/mailman/Mailman/ListAdmin.pys	   GetRecord‘   s    
c         C   s%   |  i ƒ  |  i | \ } } | Sd  S(   N(   s   selfs   _ListAdmin__opendbs   _ListAdmin__dbs   ids   types   data(   s   selfs   ids   datas   type(    (    s!   /var/mailman/Mailman/ListAdmin.pys   GetRecordType–   s    
c   
      C   s¦   |  i ƒ  |  i | \ } }	 | t j o" |  i |	 | | | | | ƒ } n< | t j o |  i |	 | | ƒ } n |  i |	 | | ƒ } | t j o |  i | =n d  S(   N(   s   selfs   _ListAdmin__opendbs   _ListAdmin__dbs   ids   rtypes   datas   HELDMSGs   _ListAdmin__handleposts   values   comments   preserves   forwards   addrs   statuss   UNSUBSCRIPTIONs    _ListAdmin__handleunsubscriptions   _ListAdmin__handlesubscriptions   DEFER(
   s   selfs   ids   values   comments   preserves   forwards   addrs   rtypes   statuss   data(    (    s!   /var/mailman/Mailman/ListAdmin.pys   HandleRequest›   s    
 c         C   s`  | i ƒ  } |  i ƒ  |  i ƒ  } | i ƒ  } t	 i
 o
 d }	 n d }	 d |  i ƒ  | |	 f }
 t i d ƒ } zŽ t t i i t	 i |
 ƒ d ƒ } z[ t	 i
 o t i | | d ƒ n t | ƒ } | | d ƒ | i ƒ  t i | i ƒ  ƒ Wd  | i ƒ  XWd  t i | ƒ X| i d t d ƒ ƒ } t! i! ƒ  | | | |
 | f } t$ | f |  i% | <| Sd  S(	   Ns   pcks   txts   heldmsg-%s-%d.%si   s   wi   s   subjects   (no subject)(&   s   msgdatas   copys   selfs   _ListAdmin__opendbs   _ListAdmin__nextids   ids   msgs
   get_senders   senders   mm_cfgs   HOLD_MESSAGES_AS_PICKLESs   exts   internal_names   filenames   oss   umasks   omasks   opens   paths   joins   DATA_DIRs   fps   cPickles   dumps	   Generators   gs   flushs   fsyncs   filenos   closes   gets   _s
   msgsubjects   times   reasons   datas   HELDMSGs   _ListAdmin__db(   s   selfs   msgs   reasons   msgdatas   fps   datas
   msgsubjects   senders   gs   exts   filenames   ids   omask(    (    s!   /var/mailman/Mailman/ListAdmin.pys   HoldMessage®   s4    


!

  c   $      C   s  | \ } } } } } } t i i	 t
 i | ƒ } | ot i i | ƒ d i t ƒ } d | d <t i	 | ƒ }
 y t | ƒ } Wn3 t j
 o' } | i t i j o ‚  n t Sn Xz t i | ƒ } Wd  | i ƒ  Xt i i	 t
 i |
 ƒ } t i i | ƒ \ } }! | d } t | d ƒ } z t" | ƒ } | | d ƒ Wd  | i ƒ  Xn t$ }# t$ } t$ } t& }" | t
 i) j o
 t) }" nH| t
 i* j oâ y t+ | ƒ } Wn3 t j
 o' } | i t i j o ‚  n t Sn Xt+ | ƒ } d | d <d | d <y | d =Wn t, j
 o n Xt- i. i/ d	 d ƒ | d
 <t0 d d | i1 d d ƒ ƒ t2 t
 i3 ƒ }	 |	 i5 | d | ƒnV | t
 i6 j o? d }# |  i8 t9 d ƒ | | p
 t9 d ƒ d |  i; | ƒ ƒn d }# | o | oLy t+ | ƒ } Wn> t j
 o2 } | i t i j o ‚  n t? i@ | ƒ ‚ n XtA | g ƒ } tC | ƒ d j o# | d \ } } |  i; | ƒ } n7 g  iF }  | D] \ } } |  | ƒ qy~  } |  iI } tJ iK ƒ  } tJ iM | ƒ z+ tN iO | |  iP ƒ  t9 d ƒ d | ƒ} Wd  tJ iR | ƒ X| iS d ƒ | iT | ƒ | iU |  ƒ n |# oŽ d h  d |  iV ƒ  <d |# <d tW | ƒ iX d d ƒ <d tW | ƒ iX d d ƒ <} | o | d | iX d d ƒ 7} n t0 d | ƒ n |" t) j oK y t iZ | ƒ Wqt[ j
 o' } | i t i j o ‚  n t SqXn |" Sd  S(   Ni   s   spami    s   .msgs   ws   approveds   adminapproveds   filebases	   localtimes   X-Mailman-Approved-Ats   vettes%   held message approved, message-id: %ss
   message-ids   n/as	   _metadatas   Refuseds,   Posting of your message titled "%(subject)s"s   [No reason given]s   langs	   Discardeds   Forward of moderated messages   message/rfc822sL   %(listname)s: %(rejection)s posting:
	From: %(sender)s
	Subject: %(subject)ss   listnames	   rejections   senders   %s   %%s   subjects
   
	Reason: (\   s   records   ptimes   senders   subjects   reasons   filenames   msgdatas   oss   paths   joins   mm_cfgs   DATA_DIRs   preserves   splits   DASHs   partss   spamfiles   opens   fps   IOErrors   es   errnos   ENOENTs   LOSTs   cPickles   loads   msgs   closes   SPAM_DIRs   outpaths   splitexts   heads   exts   outfps	   Generators   gs   Nones	   rejections   REMOVEs   statuss   values   DEFERs   APPROVEs   readMessages   KeyErrors   emails   Utilss
   formatdates   syslogs   gets   get_switchboards   INQUEUE_DIRs   inqs   enqueues   REJECTs   selfs   _ListAdmin__refuses   _s   comments   getMemberLanguages   forwards   addrs   copys   Errorss   LostHeldMessages   getaddressess   addrss   lens   realnames   langs   appends   _[1]s   as   preferred_languages   i18ns   get_translations   otranss   set_languages   Messages   UserNotifications   GetBouncesEmails   fmsgs   set_translations   set_types   attachs   sends   internal_names   strs   replaces   notes   unlinks   OSError($   s   selfs   records   values   comments   preserves   forwards   addrs   fps   ptimes   inqs   spamfiles   outpaths   otranss   subjects   heads   filenames   notes   partss   gs   as   realnames   msgs   reasons   addrss   paths   copys   langs   outfps   es   senders   fmsgs   msgdatas   _[1]s   exts   statuss	   rejection(    (    s!   /var/mailman/Mailman/ListAdmin.pys   __handlepostÞ   s¼    
 	 
 
 	

	  -		 X c      	   C   s  |  i ƒ  |  i ƒ  } t i ƒ  | | | | | f } t | f |  i | <t d d |  i ƒ  | ƒ |  i o° |  i } t d ƒ } t i d h  d | <d |  i ƒ  <d |  i <d |  i d	 d
 d ƒ<d |  ƒ} |  i ƒ  }
 t i |
 |
 | | |  i ƒ }	 |	 i |  h  d d < n d  S(   Ns   vettes%   %s: held subscription request from %ss;   New subscription request to list %(realname)s from %(addr)ss   subauth.txts   usernames   listnames   hostnames   admindb_urls   admindbs   absolutei   s   mlists   tomoderators(    s   selfs   _ListAdmin__opendbs   _ListAdmin__nextids   ids   times   addrs   fullnames   passwords   digests   langs   datas   SUBSCRIPTIONs   _ListAdmin__dbs   syslogs   internal_names   admin_immed_notifys	   real_names   realnames   _s   subjects   Utilss   maketexts	   host_names   GetScriptURLs   texts   GetOwnerEmails	   owneraddrs   Messages   UserNotifications   preferred_languages   msgs   send(   s   selfs   addrs   fullnames   passwords   digests   langs   realnames   texts   subjects   msgs	   owneraddrs   datas   id(    (    s!   /var/mailman/Mailman/ListAdmin.pys   HoldSubscriptionh  s     

	
		?c         C   sÞ   | \ } } } }	 }
 } | t i	 j o t	 Sn§ | t i
 j o n“ | t i j o0 |  i t d ƒ | | p
 t d ƒ d | ƒnS y/ t | | |	 |
 | ƒ } |  i | d d ƒWn t i j
 o n X|  i ƒ  t Sd  S(   Ns   Subscription requests   [No reason given]s   langs   whences   via admin approval(   s   records   stimes   addrs   fullnames   passwords   digests   langs   values   mm_cfgs   DEFERs   DISCARDs   REJECTs   selfs   _ListAdmin__refuses   _s   comments   UserDescs   userdescs   ApprovedAddMembers   Errorss   MMAlreadyAMembers   _ListAdmin__opendbs   REMOVE(   s   selfs   records   values   comments   langs   addrs   userdescs   stimes   fullnames   passwords   digest(    (    s!   /var/mailman/Mailman/ListAdmin.pys   __handlesubscription  s"     
c      	   C   s   |  i ƒ  |  i ƒ  } t | f |  i | <t d d |  i ƒ  | ƒ |  i	 o° |  i
 } t d ƒ } t i d h  d | <d |  i ƒ  <d |  i <d |  i d	 d
 d ƒ<d |  ƒ} |  i ƒ  } t i | | | | |  i ƒ } | i |  h  d d < n d  S(   Ns   vettes'   %s: held unsubscription request from %ss8   New unsubscription request from %(realname)s by %(addr)ss   unsubauth.txts   usernames   listnames   hostnames   admindb_urls   admindbs   absolutei   s   mlists   tomoderators(   s   selfs   _ListAdmin__opendbs   _ListAdmin__nextids   ids   UNSUBSCRIPTIONs   addrs   _ListAdmin__dbs   syslogs   internal_names   admin_immed_notifys	   real_names   realnames   _s   subjects   Utilss   maketexts	   host_names   GetScriptURLs   texts   GetOwnerEmails	   owneraddrs   Messages   UserNotifications   preferred_languages   msgs   send(   s   selfs   addrs   texts   msgs	   owneraddrs   subjects   ids   realname(    (    s!   /var/mailman/Mailman/ListAdmin.pys   HoldUnsubscription¨  s    
	
		?c         C   s‘   | } | t i j o t Snl | t i j o nX | t i j o |  i t	 d ƒ | | ƒ n+ y |  i | ƒ Wn t i j
 o n Xt Sd  S(   Ns   Unsubscription request(   s   records   addrs   values   mm_cfgs   DEFERs   DISCARDs   REJECTs   selfs   _ListAdmin__refuses   _s   comments   ApprovedDeleteMembers   Errorss   NotAMemberErrors   REMOVE(   s   selfs   records   values   comments   addr(    (    s!   /var/mailman/Mailman/ListAdmin.pys   __handleunsubscriptionÄ  s     c         C   s  |  i }
 | t j o |  i | ƒ } n t i d h  d |
 <d | <d | <d |  i ƒ  <d | d |  ƒ} t i ƒ  } t i | ƒ zG | o0 t i | d t d	 ƒ d
 t | ƒ g ƒ } n t d ƒ }	 Wd  t i | ƒ Xt i | |  i ƒ  |	 | | ƒ } | i |  ƒ d  S(   Ns
   refuse.txts   listnames   requests   reasons	   adminaddrs   langs   mlists   ---------- s   Original Messages    ----------s-   Request to mailing list %(realname)s rejected(   s   selfs	   real_names   realnames   langs   Nones   getMemberLanguages   recips   Utilss   maketexts   requests   comments   GetOwnerEmails   texts   i18ns   get_translations   otranss   set_languages   origmsgs   NLs   joins   _s   strs   subjects   set_translations   Messages   UserNotifications   GetBouncesEmails   msgs   send(   s   selfs   requests   recips   comments   origmsgs   langs   texts   msgs   otranss   subjects   realname(    (    s!   /var/mailman/Mailman/ListAdmin.pys   __refuseÕ  s"    		-0 c         C   sN  t  i i |  i ƒ  d ƒ } yA t | ƒ } z t i	 | ƒ |  _
 Wd  | i ƒ  Xt  i | ƒ Wn¹ t j
 o­ } | i t i j o ‚  n t  i i |  i ƒ  d ƒ } y4 t | ƒ } z t i	 | ƒ |  _
 Wd  | i ƒ  XWqt j
 o, } | i t i j o ‚  n h  |  _
 qXn Xx%|  i
 i ƒ  D]\ } \ } } | t j o t | ƒ d j o% | \ } } }
 } d } |  i }	 n6 t | ƒ d j o | \ } } }
 } }	 d } n q(| | | |
 | |	 f |  i
 | <q(| t j oX t | ƒ d j o | \ } } } } } h  } n q(| | | | | | f |  i
 | <q(q(W|  i% ƒ  d  S(   Ns
   request.dbs   request.pcki   s    i   (&   s   oss   paths   joins   selfs   fullpaths   filenames   opens   fps   marshals   loads   _ListAdmin__dbs   closes   unlinks   IOErrors   es   errnos   ENOENTs   cPickles   itemss   ids   ops   infos   SUBSCRIPTIONs   lens   whens   addrs   passwds   digests   fullnames   preferred_languages   langs   HELDMSGs   senders   subjects   reasons   texts   msgdatas   _ListAdmin__closedb(   s   selfs   texts   ids   digests   subjects   addrs   whens   filenames   fps   langs   passwds   reasons   infos   es   senders   msgdatas   fullnames   op(    (    s!   /var/mailman/Mailman/ListAdmin.pys   _UpdateRecordsô  sV         
 #
 '(   s   __name__s
   __module__s   InitVarss   InitTempVarss   _ListAdmin__opendbs   _ListAdmin__closedbs   _ListAdmin__nextids   SaveRequestsDbs   NumRequestsPendings   _ListAdmin__getmsgidss   GetHeldMessageIdss   GetSubscriptionIdss   GetUnsubscriptionIdss	   GetRecords   GetRecordTypes   Nones   HandleRequests   HoldMessages   _ListAdmin__handleposts   HoldSubscriptions   _ListAdmin__handlesubscriptions   HoldUnsubscriptions    _ListAdmin__handleunsubscriptions   _ListAdmin__refuses   _UpdateRecords(    (    (    s!   /var/mailman/Mailman/ListAdmin.pys	   ListAdminA   s,   														0	Š	(			c         C   sq   t  i i |  ƒ d } t |  ƒ } z9 | d j o t i | t i ƒ } n t
 i | ƒ } Wd  | i ƒ  X| Sd  S(   Ni   s   .txt(   s   oss   paths   splitexts   exts   opens   fps   emails   message_from_files   Messages   msgs   cPickles   loads   close(   s   paths   fps   exts   msg(    (    s!   /var/mailman/Mailman/ListAdmin.pys   readMessage5  s      ('   s   __doc__s   oss   times   errnos   cPickles   marshals	   cStringIOs   StringIOs   emails   email.MIMEMessages   MIMEMessages   email.Generators	   Generators   email.Utilss   getaddressess   Mailmans   mm_cfgs   Utilss   Messages   Errorss   Mailman.UserDescs   UserDescs   Mailman.Queue.sbcaches   get_switchboards   Mailman.Logging.Syslogs   syslogs   i18ns   _s   IGNs   HELDMSGs   SUBSCRIPTIONs   UNSUBSCRIPTIONs   DEFERs   REMOVEs   LOSTs   DASHs   NLs	   ListAdmins   readMessage(   s   Errorss	   Generators   readMessages   syslogs   DEFERs   NLs   get_switchboards   errnos   UNSUBSCRIPTIONs   emails   cPickles   getaddressess   HELDMSGs   DASHs   UserDescs   mm_cfgs   i18ns   IGNs   _s   SUBSCRIPTIONs   LOSTs   MIMEMessages   StringIOs	   ListAdmins   Utilss   REMOVEs   times   Messages   oss   marshal(    (    s!   /var/mailman/Mailman/ListAdmin.pys   ?   s>   							ÿ õ