ó
Aü½cc           @   sÞ   d  Z  d d l Z d d l Z d d l Z d d l 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 Td d	 l m Z e
 j Z e
 j e j ƒ d
 Z d „  Z d „  Z d „  Z d S(   s=   Provide a password-interface wrapper around private archives.iÿÿÿÿN(   t   mm_cfg(   t   Utils(   t   MailList(   t   Errors(   t   i18n(   t   *(   t   syslogt   /c         C   s?   g  |  j  t ƒ D] } | d k r | ^ q } t j | ƒ d S(   s+   Ensure that the path is safe by removing ..t   .s   ..i   (   R   s   ..(   t   splitt   SLASHt   join(   t   patht   xt   parts(    (    s2   /export/web/mailman/mailman/Mailman/Cgi/private.pyt	   true_path*   s    .c         C   s,   t  t d ƒ r t j |  | ƒ St j |  ƒ S(   Nt   common_types(   t   hasattrt	   mimetypest
   guess_type(   t   urlt   strict(    (    s2   /export/web/mailman/mailman/Mailman/Cgi/private.pyR   3   s    c          C   sÉ  t  ƒ  }  |  j t j ƒ t j ƒ  } | si |  j t d ƒ ƒ |  j t	 d t d ƒ ƒ ƒ |  j
 ƒ  GHd  St j j d ƒ } t | ƒ } | | d k rå t d ƒ } |  j | ƒ |  j t	 d | ƒ ƒ |  j
 ƒ  GHt d d	 | ƒ d  St j j t j | ƒ } | d
 j ƒ  } d } t | ƒ d k r2| d } n  | j d ƒ rq| j d ƒ rq| d  | d  k rq| d  } n d } t j j | ƒ r–| d } n  t j j | ƒ rÌt j j | d ƒ rÌ| d } n  y t j | d d
 ƒ} Wn~ t j k
 re}	 t j | ƒ }
 t d ƒ } |  j t d ƒ ƒ |  j t	 d | ƒ ƒ d GH|  j
 ƒ  GHt d d | |	 ƒ d  SXt j | j ƒ |  j | j ƒ t j ƒ  } y | j  d d ƒ j! ƒ  } WnW t" k
 r|  j t	 d t d ƒ ƒ ƒ |  j t# t d ƒ ƒ ƒ d GH|  j
 ƒ  GHd  SX| j  d d ƒ } d
 } | j$ } d } | j% t j& t j' t j( t j) f | | ƒ sb| j* d ƒ rÝt# t+ d t d ƒ ƒ ƒ j
 ƒ  } t j j d t j j d t j j d  d! ƒ ƒ ƒ } t d" d# | | | ƒ d$ GHn  | j* d% ƒ r„| rt# t+ d t d& ƒ ƒ ƒ j
 ƒ  } n! t# t+ d t d' ƒ ƒ ƒ j
 ƒ  } | j, | ƒ rV| j- | ƒ q„| r„| j. d
 k rt d d( | ƒ qq„n  t j/ | j ƒ } d) | d* GH| j0 d+ d, d ƒ} | rË| d 7} n  | d rút j j | t1 j | d ƒ ƒ } n  | j d ƒ r&| d- d. k r&| t1 7} n  t j2 d/ i t j | ƒ d0 6| j$ d1 6| d2 6d3 | ƒGHd  S| j3 | ƒ } t j | ƒ |  j | ƒ y® t4 | d4 d
 ƒ\ } } | d  k r»d5 } n  | rùt6 t j j | j7 ƒ  d | j8 ƒ  d ƒ ƒ } d6 } n? | j d ƒ r)d- d  l9 } | j6 | d7 ƒ } n t6 | d7 ƒ } Wn` t: k
 r›t d8 ƒ } |  j | ƒ |  j t	 d | ƒ ƒ d GH|  j
 ƒ  GHt d d9 | ƒ n* Xd: | GHt; j< j= | j> ƒ  ƒ | j? ƒ  d  S(;   Ns   Private Archive Errori   s   You must specify a list.t	   PATH_INFOi   s4   Private archive - "./" and "../" not allowed in URL.i   t   mischiefs    Private archive hostile path: %si    t    s   .mboxiûÿÿÿs   /index.htmls   .gzt   locks&   No such list <em>%(safelistname)s</em>s   Private Archive Error - %(msg)ss   Status: 404 Not Foundt   errors   private: No such list "%s": %s
t   usernamet   Errors   Invalid options to CGI script.s   Status: 400 Bad Requestt   passwordt   submits   +1s   Authorization failed.t   HTTP_FORWARDED_FORt   HTTP_X_FORWARDED_FORt   REMOTE_ADDRs   unidentified origint   securitys;   Authorization failed (private): user=%s: list=%s: remote=%ss   Status: 401 Unauthorizeds   login-remindsZ   If you are a list member,
                          your password has been emailed to you.s   Please enter your email addresss5   Reminder attempt of non-member w/ private rosters: %ss!   Content-type: text/html; charset=s   

t   privatet   absoluteiÿÿÿÿs
   index.htmls   private.htmlt   actiont   realnamet   messaget   mlistR   s	   text/htmls
   text/plaint   rs   Private archive file not founds"   Private archive file not found: %ss   Content-type: %s
(@   t   Documentt   set_languageR    t   DEFAULT_SERVER_LANGUAGER   t   GetPathPiecest   SetTitlet   _t   AddItemt   Headert   Formatt   ost   environt   getR   R   R   R   t   PRIVATE_ARCHIVE_FILE_DIRt   lowert   lent   endswitht   isdirt   existsR   R   t   MMListErrort   websafeR   t   preferred_languaget   cgit   FieldStoraget   getfirstt   stript	   TypeErrort   Boldt	   real_namet   WebAuthenticatet   AuthUsert   AuthListModeratort   AuthListAdmint   AuthSiteAdmint   has_keyt   FontSizet   isMembert   MailUserPasswordt   private_rostert
   GetCharSett   GetScriptURLR
   t   maketextt   getMemberLanguageR   t   Nonet   opent   archive_dirt   internal_namet   gzipt   IOErrort   syst   stdoutt   writet   readt   close(   t   docR   R   t   tpatht   msgt   true_filenamet   listnamet   mboxfileR(   t   et   safelistnamet   cgidataR   R   t   is_authR&   R'   t   remotet   charsetR%   t   langt   ctypet   enct   fRX   (    (    s2   /export/web/mailman/mailman/Mailman/Cgi/private.pyt   main:   sþ    				!	
%

			(   t   __doc__R3   RZ   R?   R   t   MailmanR    R   R   R   R   t   Mailman.htmlformatt   Mailman.Logging.SyslogR   R/   R+   R,   R
   R   R   Ro   (    (    (    s2   /export/web/mailman/mailman/Mailman/Cgi/private.pyt   <module>   s"   
				