;
)?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 |  i   p t  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   Lockeds   AssertionErrors   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 |  i   p t  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   Lockeds   AssertionErrors   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   s\   |  i   p t  x= t o5 |  i } |  i d 7_ |  i i |  o Pq q W| Sd  S(   Ni   (   s   selfs   Lockeds   AssertionErrors   Trues   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 |	 | | | | |  } nP | t j o |  i |	 | |  } n* | t j p t  |  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   SUBSCRIPTIONs   AssertionErrors   _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) }" n_| 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 | nm | t
 i6 j o? d }# |  i8 t9 d  | | p
 t9 d  d |  i; |  n | t
 i< j p t=  d }# | o | oLy t+ |  } Wn> t j
 o2 } | i t i j o   n tA iB |   n XtC | g  } tE |  d j o# | d \ } } |  i; |  } n7 g  iH }  | D] \ } } |  |  q~  } |  iK } tL iM   } tL iO |  z+ tP iQ | |  iR   t9 d  d | } Wd  tL iT |  X| iU d  | iV |  | iW |   n |# o d h  d |  iX   <d |# <d tY |  iZ d d  <d tY |  iZ d d  <} | o | d | iZ d d  7} n t0 d |  n |" t) j oK y t i\ |  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   DISCARDs   AssertionErrors   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 | nj | t i j p t  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	   SUBSCRIBEs   AssertionErrors   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 Sn | t i j o no | t i j o |  i t	 d  | |  nB | t i j p t  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   UNSUBSCRIBEs   AssertionErrors   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   s  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]N\ } \ } } | t j o t |  d j o% | \ } } }
 } d } |  i }	 nS t |  d j o | \ } } }
 } }	 d } n! t |  d j p
 t d  q(| | | |
 | |	 f |  i
 | <q(| t  j ou t |  d j o | \ } } } } } h  } n! t |  d j p
 t d  q(| | | | | | f |  i
 | <q(q(W|  i&   d  S(	   Ns
   request.dbs   request.pcki   s    i   i   s"   Unknown subscription record layouts   Unknown held msg record layout('   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   AssertionErrors   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   s   t  i i |   d } t |   } zM | d j o t i | t i  } n$ | d j p t
  t i |  } Wd  | i   X| Sd  S(   Ni   s   .txts   .pck(   s   oss   paths   splitexts   exts   opens   fps   emails   message_from_files   Messages   msgs   AssertionErrors   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>   							 