ó
Wü½cc           @   s¦   d  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	 y e
 e f Wn e k
 r‹ d Z
 d Z n Xd	 e	 f d
 „  ƒ  YZ d S(   s2   MailList mixin class managing the privacy options.iÿÿÿÿN(   t   mm_cfg(   t   Utils(   t   _(   t   GUIBasei   i    t   Privacyc           B   sA   e  Z d  „  Z d „  Z e d „ Z d „  Z d „  Z d „  Z RS(   c         C   s   d t  d ƒ f S(   Nt   privacys   Privacy options...(   R   (   t   self(    (    s2   /export/web/mailman/mailman/Mailman/Gui/Privacy.pyt   GetConfigCategory%   s    c         C   sP   | d k rL d t  d ƒ f d t  d ƒ f d t  d ƒ f d t  d	 ƒ f g Sd  S(
   NR   t   subscribings   Subscription&nbsp;rulest   senders   Sender&nbsp;filterst	   recipients   Recipient&nbsp;filterst   spams   Spam&nbsp;filters(   R   t   None(   R   t   category(    (    s2   /export/web/mailman/mailman/Mailman/Gui/Privacy.pyt   GetConfigSubCategories(   s    c         C   s7  | d k r d  St j } t j rp d t j t d ƒ t d ƒ t d ƒ t d ƒ f d t d ƒ t d	 ƒ f } nB d t j t d ƒ t d ƒ t d ƒ f d
 t d ƒ t d ƒ f } | j d ƒ } t d ƒ t d ƒ d t j t d ƒ t d ƒ f d t d ƒ f | d t j d | f d
 t d ƒ t d ƒ d t d ƒ f d t j t d ƒ t d ƒ f d t d ƒ t d ƒ f t d ƒ d t j d | f d
 t d ƒ t d ƒ f t d  ƒ d! t j t d" ƒ t d# ƒ t d$ ƒ f d t d% ƒ t d& ƒ f d' t j t d ƒ t d ƒ f d t d( ƒ t d) ƒ f g } | j d d* d
 ƒ} | j rUt d+ ƒ }	 n d, }	 t d- ƒ t d. ƒ d/ t j t d ƒ t d ƒ f d t d0 ƒ t d1 ƒ f d2 t j	 d3 d t d4 ƒ t d5 ƒ f d6 t j	 d3 d t d7 ƒ t d8 ƒ f d9 t j t d: ƒ t d; ƒ t d< ƒ f d t d= ƒ t d> ƒ f d? t j
 d | f d
 t d@ ƒ f dA t j t dB ƒ t dC ƒ t dD ƒ t d; ƒ t d< ƒ f d t dE ƒ t dF ƒ f dG t j t d ƒ t d ƒ f d t dH ƒ t dI ƒ f dJ t j t d ƒ t d ƒ f d t dK ƒ t dL ƒ f dM t j
 d | f d
 t dN ƒ f dO t j d | f d
 t dP ƒ t dQ ƒ f dR t j
 d | f d
 t dS ƒ t dT ƒ f dU t j
 d | f d
 t dV ƒ t dW ƒ f t dX ƒ dY t j d | f d
 t dZ ƒ t d[ ƒ f d\ t j d | f d
 t d] ƒ t d^ ƒ f d_ t j d | f d
 t d` ƒ t da ƒ f db t j d | f d
 t dc ƒ t dd ƒ f de t j t dB ƒ t d: ƒ t d; ƒ t d< ƒ f d t df ƒ t dg ƒ f dh t j t d ƒ t d ƒ f d t di ƒ f dj t j
 d | f d
 t dk ƒ f g }
 t dl ƒ t dm ƒ dn t j t d ƒ t d ƒ f d t do ƒ t dp ƒ f dq t j
 dr | f d t ds ƒ t dt ƒ f du t j	 d3 d t dv ƒ t dw ƒ f g } t dx ƒ t dy ƒ dz t j d d t d{ ƒ t d| ƒ f t d} ƒ d~ t j
 d | f d t d€ ƒ t d ƒ f g } | d‚ k r|
 S| dƒ k r| S| d„ k r/| S| Sd  S(…   NR   t   subscribe_policyR   t   Confirms   Require approvals   Confirm and approvei    s-   What steps are required for subscription?<br>sb  None - no verification steps (<em>Not
                           Recommended </em>)<br>
                           Confirm (*) - email confirmation step required <br>
                           Require approval - require list administrator
                           Approval for subscriptions <br>
                           Confirm and approve - both confirm and approve
                           
                           <p>(*) when someone requests a subscription,
                           Mailman sends them a notice with a unique
                           subscription request number that they must reply to
                           in order to subscribe.<br>

                           This prevents mischievous (or malicious) people
                           from creating subscriptions for others without
                           their consent.i   sÎ  Confirm (*) - email confirmation required <br>
                           Require approval - require list administrator
                           approval for subscriptions <br>
                           Confirm and approve - both confirm and approve
                           
                           <p>(*) when someone requests a subscription,
                           Mailman sends them a notice with a unique
                           subscription request number that they must reply to
                           in order to subscribe.<br> This prevents
                           mischievous (or malicious) people from creating
                           subscriptions for others without their consent.t   admins1  This section allows you to configure subscription and
            membership exposure policy.  You can also control whether this
            list is public or not.  See also the
            <a href="%(admin)s/archive">Archival Options</a> section for
            separate archive-related privacy settings.t   Subscribingt
   advertisedt   Not   YessP   Advertise this list when people ask what lists are on this
             machine?t   subscribe_auto_approvali
   sX   List of addresses (or regexps) whose subscriptions do not
             require approval.s  When subscription requires approval, addresses in this list
             are allowed to subscribe without administrator approval. Add
             addresses one per line. You may begin a line with a ^ character
             to designate a (case insensitive) regular expression match.t    ss   You may also use the @listname notation to designate the
             members of another list in this installation.t   unsubscribe_policysq   Is the list moderator's approval required for unsubscription
             requests?  (<em>No</em> is recommended)sb  When members want to leave a list, they will make an
             unsubscription request, either via the web or via email.
             Normally it is best for you to allow open unsubscriptions so that
             users can easily remove themselves from mailing lists (they get
             really upset if they can't get off lists!).

             <p>For some lists though, you may want to impose moderator
             approval before an unsubscription request is processed.  Examples
             of such lists include a corporate mailing list that all employees
             are required to be members of.s   Ban listt   ban_listsU   List of addresses which are banned from membership in this
             mailing list.s  Addresses in this list are banned outright from subscribing
             to this mailing list, with no further moderation required.  Add
             addresses one per line; start the line with a ^ character to
             designate a regular expression match.s   Membership exposuret   private_rostert   Anyones   List memberss   List admin onlys   Who can view subscription list?sg   When set, the list of subscribers is protected by member or
             admin password authentication.t   obscure_addressess[   Show member addresses so they're not directly recognizable
             as email addresses?su  Setting this option causes member email addresses to be
             transformed when they are presented on list web pages (both in
             text and as links), so they're not trivially recognizable as
             email addresses.  The intention is to prevent the addresses
             from being snarfed up by automated web scanners for use by
             spammers.t   absolutes   /Quarantinet    s¨  When a message is posted to the list, a series of
            moderation steps are taken to decide whether a moderator must
            first approve the message or not.  This section contains the
            controls for moderation of both member and non-member postings.

            <p>Member postings are held for moderation if their
            <b>moderation flag</b> is turned on.  You can control whether
            member postings are moderated by default or not.

            <p>Non-member postings can be automatically
            <a href="?VARHELP=privacy/sender/accept_these_nonmembers"
            >accepted</a>,
            <a href="?VARHELP=privacy/sender/hold_these_nonmembers">held for
            moderation</a>,
            <a href="?VARHELP=privacy/sender/reject_these_nonmembers"
            >rejected</a> (bounced), or
            <a href="?VARHELP=privacy/sender/discard_these_nonmembers"
            >discarded</a>,
            either individually or as a group.  Any
            posting from a non-member who is not explicitly accepted,
            rejected, or discarded, will have their posting filtered by the
            <a href="?VARHELP=privacy/sender/generic_nonmember_action">general
            non-member rules</a>.

            <p>In the text boxes below, add one address per line; start the
            line with a ^ character to designate a <a href=
            "https://docs.python.org/2/library/re.html"
            >Python regular expression</a>.  When entering backslashes, do so
            as if you were using Python raw strings (i.e. you generally just
            use a single backslash).

            <p>Note that non-regexp matches are always done first.s   Member filterst   default_member_moderations9   By default, should new list member postings be moderated?s‰  Each list member has a <em>moderation flag</em> which says
             whether messages from the list member can be posted directly to
             the list, or must first be approved by the list moderator.  When
             the moderation flag is turned on, list member postings must be
             approved first.  You, the list administrator can decide whether a
             specific individual's postings will be moderated or not.

             <p>When a new member is subscribed, their initial moderation flag
             takes its value from this option.  Turn this option off to accept
             member postings by default.  Turn this option on to, by default,
             moderate member postings first.  You can always manually set an
             individual member's moderation bit by using the
             <a href="%(adminurl)s/members">membership management
             screens</a>.t   member_verbosity_thresholdi   sg   Ceiling on acceptable number of member posts, per interval,
               before automatic moderation.sš  If a member posts this many times, within a period of time
               the member is automatically moderated.  Use 0 to disable.  See
               <a href="?VARHELP=privacy/sender/member_verbosity_interval"
               >member_verbosity_interval</a> for details on the time period.

               <p>This is intended to stop people who join a list or lists and
               then use a bot to send many spam messages in a short interval.

               <p>Be careful when using this setting.  If it is set too low,
               this can be triggered by a single post cross-posted to
               multiple lists or by a single post to an umbrella list.t   member_verbosity_intervalsœ   Number of seconds to remember posts to this list to determine
               member_verbosity_threshold for automatic moderation of a
               member.sø  If a member's total posts to all lists in this installation
               with member_verbosity_threshold enabled reaches this list's
               member_verbosity_threshold, the member is automatically
               moderated on this list.

               <p>Posts which are counted towards this list's
               member_verbosity_threshold are all posts to any list with
               member_verbosity_threshold enabled that arrived within that
               list's member_verbosity_interval.t   member_moderation_actiont   Holdt   Rejectt   DiscardsF   Action to take when a moderated member posts to the
             list.s  <ul><li><b>Hold</b> -- this holds the message for approval
             by the list moderators.

             <p><li><b>Reject</b> -- this automatically rejects the message by
             sending a bounce notice to the post's author.  The text of the
             bounce notice can be <a
             href="?VARHELP=privacy/sender/member_moderation_notice"
             >configured by you</a>.

             <p><li><b>Discard</b> -- this simply discards the message, with
             no notice sent to the post's author.
             </ul>t   member_moderation_noticesÅ   Text to include in any
             <a href="?VARHELP/privacy/sender/member_moderation_action"
             >rejection notice</a> to
             be sent to moderated members who post to this list.t   dmarc_moderation_actiont   Accepts
   Munge Froms   Wrap Messagesq   Action to take when anyone posts to the
             list from a domain with a DMARC Reject%(quarantine)s Policy.s  <ul><li><b>Munge From</b> -- applies the <a
             href="?VARHELP=general/from_is_list">from_is_list Munge From</a>
             transformation to these messages.

             <p><li><b>Wrap Message</b> -- applies the <a
             href="?VARHELP=general/from_is_list">from_is_list Wrap
             Message</a> transformation to these messages.

             <p><li><b>Reject</b> -- this automatically rejects the message by
             sending a bounce notice to the post's author.  The text of the
             bounce notice can be <a
             href="?VARHELP=privacy/sender/dmarc_moderation_notice"
             >configured by you</a>.

             <p><li><b>Discard</b> -- this simply discards the message, with
             no notice sent to the post's author.
             </ul>

             <p>This setting takes precedence over the <a
             href="?VARHELP=general/from_is_list"> from_is_list</a> setting
             if the message is From: an affected domain and the setting is
             other than Accept.t"   dmarc_quarantine_moderation_actions‚   Shall the above dmarc_moderation_action apply to messages
               From: domains with DMARC p=quarantine as well as p=rejectsù  <ul><li><b>No</b> -- this applies dmarc_moderation_action to
               only those posts From: a domain with DMARC p=reject.  This is
               appropriate if you are concerned about bounced messages, but
               want to apply dmarc_moderation_action to as few messages as
               possible.
               <p><li><b>Yes</b> -- this applies dmarc_moderation_action to
               posts From: a domain with DMARC p=reject or p=quarantine.
               </ul><p>If a message is From: a domain with DMARC p=quarantine
               and dmarc_moderation_action is not applied (this set to No)
               the message will likely not bounce, but will be delivered to
               recipients' spam folders or other hard to find places.t   dmarc_none_moderation_actionsœ   Shall the above dmarc_moderation_action apply to messages
               From: domains with DMARC p=none as well as p=quarantine and
               p=rejects  <ul><li><b>No</b> -- this applies dmarc_moderation_action to
               only those posts From: a domain with DMARC p=reject and
               possibly p=quarantine depending on the setting of
               dmarc_quarantine_moderation_action.
               <p><li><b>Yes</b> -- this applies dmarc_moderation_action to
               posts From: a domain with DMARC p=none if
               dmarc_moderation_action is Munge From or Wrap Message and
               dmarc_quarantine_moderation_action is Yes.
               <p>The intent of this setting is to eliminate failure reports
               to the owner of a domain that publishes DMARC p=none by applying
               the message transformations that would be applied if the
               domain's DMARC policy were stronger.t   dmarc_moderation_noticesþ   Text to include in any
             <a href="?VARHELP=privacy/sender/dmarc_moderation_action"
             >rejection notice</a> to
             be sent to anyone who posts to this list from a domain
             with a DMARC Reject%(quarantine)s Policy.t   dmarc_moderation_addressessí   List of addresses (or regexps) whose posts should always apply
             <a href="?VARHELP=privacy/sender/dmarc_moderation_action"
             >dmarc_moderation_action</a> 
             regardless of any domain specific DMARC Policy.s»  Postings from any of these addresses will automatically
             apply any DMARC action mitigation.  This can be utilized to
             automatically wrap or munge postings from known addresses or
             domains that might have policies rejecting external mail From:
             themselves.

             <p>Add member addresses one per line; start the line with a ^
             character to designate a regular expression match.t   dmarc_wrapped_message_textsð   If dmarc_moderation_action applies and is Wrap Message,
             and this text is provided, the text will be placed in a
             separate text/plain MIME part preceding the original message
             part in the wrapped message.sÕ  A wrapped message will either be a multipart/mixed message
             with up to four sub-parts; a text/plain part containing
             msg_header, a text/plain part containing 
             dmarc_wrapped_message_text, a message/rfc822 part containing the
             original message and a text/plain part containing msg_footer, or
             a message/rfc822 message containing only the original message if
             none of the other parts are applicable.t   equivalent_domainssž   A 'two dimensional' list of email address domains which are
               considered equivalent when checking if a post is from a list
               member.sK  If two poster addresses with the same local part but
               different domains are to be considered equivalents for list
               membership tests, the domains are put here.  The format is
               one or more groups of equivalent domains.  Within a group,
               the domains are separated by commas and multiple groups are
               separated by semicolons. White space is ignored.
               <p>For example:<pre>
               example.com,mail.example.com;mac.com,me.com,icloud.com
               </pre>
               <p>In this example, if user@example.com is a list member,
               a post from user@mail.example.com will be treated as if it is
               from user@example.com for list membership/moderation purposes,
               and likewise, if user@me.com is a list member, posts from
               user@mac.com or user@icloud.com will be treated as if from
               user@me.com.
               <p>Note that the poster's address is first tested for list
               membership, and the equivalent domain addresses are only tested
               if the poster's address is not that of a member.
               <p>Also note that moderation of the equivalent domain address
               will apply to the post, but other options such as 'ack' or
               'not&nbsp;metoo' will not.s   Non-member filterst   accept_these_nonmemberssZ   List of non-member addresses whose postings should be
             automatically accepted.s×  Postings from any of these non-members will be automatically
             accepted with no further moderation applied.  Add member
             addresses one per line; start the line with a ^ character to
             designate a regular expression match.  A line consisting of
             the @ character followed by a list name specifies another
             Mailman list in this installation, all of whose member
             addresses will be accepted for this list.t   hold_these_nonmemberssa   List of non-member addresses whose postings will be
             immediately held for moderation.s‹  Postings from any of these non-members will be immediately
             and automatically held for moderation by the list moderators.
             The sender will receive a notification message which will allow
             them to cancel their held message.  Add member addresses one per
             line; start the line with a ^ character to designate a regular
             expression match.t   reject_these_nonmemberssX   List of non-member addresses whose postings will be
             automatically rejected.s9  Postings from any of these non-members will be automatically
             rejected.  In other words, their messages will be bounced back to
             the sender with a notification of automatic rejection.  This
             option is not appropriate for known spam senders; their messages
             should be
             <a href="?VARHELP=privacy/sender/discard_these_nonmembers"
             >automatically discarded</a>.

             <p>Add member addresses one per line; start the line with a ^
             character to designate a regular expression match.t   discard_these_nonmemberssY   List of non-member addresses whose postings will be
             automatically discarded.s7  Postings from any of these non-members will be automatically
             discarded.  That is, the message will be thrown away with no
             further processing or notification.  The sender will not receive
             a notification or a bounce, however the list moderators can
             optionally <a href="?VARHELP=privacy/sender/forward_auto_discards"
             >receive copies of auto-discarded messages.</a>.

             <p>Add member addresses one per line; start the line with a ^
             character to designate a regular expression match.t   generic_nonmember_actionsb   Action to take for postings from non-members for which no
             explicit action is defined.sG  When a post from a non-member is received, the message's
             sender is matched against the list of explicitly
             <a href="?VARHELP=privacy/sender/accept_these_nonmembers"
             >accepted</a>,
             <a href="?VARHELP=privacy/sender/hold_these_nonmembers">held</a>,
             <a href="?VARHELP=privacy/sender/reject_these_nonmembers"
             >rejected</a> (bounced), and
             <a href="?VARHELP=privacy/sender/discard_these_nonmembers"
             >discarded</a> addresses.  If no match is found, then this action
             is taken.t   forward_auto_discardssu   Should messages from non-members, which are automatically
             discarded, be forwarded to the list moderator?t   nonmember_rejection_notices÷   Text to include in any rejection notice to be sent to
             non-members who post to this list. This notice can include
             the list's owner address by %%(listowner)s and replaces the
             internally crafted default message.sg   This section allows you to configure various filters based on
            the recipient of the message.s   Recipient filterst   require_explicit_destinations€   Must posts have list named in destination (to, cc) field
             (or be among the acceptable alias names, specified below)?sØ  Many (in fact, most) spams do not explicitly name their
             myriad destinations in the explicit destination addresses - in
             fact often the To: field has a totally bogus address for
             obfuscation.  The constraint applies only to the stuff in the
             address before the '@' sign, but still catches all such spams.

             <p>The cost is that the list will not accept unhindered any
             postings relayed from other addresses, unless

             <ol>
                 <li>The relaying address has the same name, or

                 <li>The relaying address name is included on the options that
                 specifies acceptable aliases for the list.

             </ol>t   acceptable_aliasesi   sf   Alias names (regexps) which qualify as explicit to or cc
             destination names for this list.sÊ  Alternate addresses that are acceptable when
             `require_explicit_destination' is enabled.  This option takes a
             list of regular expressions, one per line, which is matched
             against every recipient address in the message.  The matching is
             performed with Python's re.match() function, meaning they are
             anchored to the start of the string.
             
             <p>For backwards compatibility with Mailman 1.1, if the regexp
             does not contain an `@', then the pattern is matched against just
             the local part of the recipient address.  If that match fails, or
             if the pattern does contain an `@', then the pattern is matched
             against the entire recipient address.
             
             <p>Matching against the local part is deprecated; in a future
             release, the pattern will always be matched against the entire
             recipient address.t   max_num_recipientss9   Ceiling on acceptable number of recipients for a posting.sx   If a posting has this number, or more, of recipients, it is
             held for admin approval.  Use 0 for no ceiling.sÁ   This section allows you to configure various anti-spam
            filters posting filters, which can help reduce the amount of spam
            your list members end up receiving.
            s   Header filterst   header_filter_ruless7   Filter rules to match against the headers of a message.sŽ  Each header filter rule has two parts, a list of regular
             expressions, one per line, and an action to take.  Mailman
             matches the message's headers against every regular expression in
             the rule and if any match, the message is rejected, held, or
             discarded based on the action you specify.  Use <em>Defer</em> to
             temporarily disable a rule.

             You can have more than one filter rule for your list.  In that
             case, each rule is matched in turn, with processing stopped after
             the first match.

             Note that headers are collected from all the attachments
             (except for the mailman administrivia message) and
             matched against the regular expressions. With this feature,
             you can effectively sort out messages with dangerous file
             types or file name extensions.s   Legacy anti-spam filterst   bounce_matching_headersi   s9   Hold posts with header value matching a specified regexp.s«  Use this option to prohibit posts according to specific
             header values.  The target value is a regular-expression for
             matching against the specified header.  The match is done
             disregarding letter case.  Lines beginning with '#' are ignored
             as comments.

             <p>For example:<pre>to: .*@public.com </pre> says to hold all
             postings with a <em>To:</em> mail header containing '@public.com'
             anywhere among the addresses.

             <p>Note that leading whitespace is trimmed from the regexp.  This
             can be circumvented in a number of ways, e.g. by escaping or
             bracketing it.R	   R
   R   (   R   R    t   TEXTFIELDWIDTHt   ALLOW_OPEN_SUBSCRIBEt   RadioR   t   GetScriptURLt   EmailListExR)   t   Numbert   Textt   HeaderFilter(   R   t   mlistR   t   subcatt   WIDTHt   sub_cfentryR   t   subscribing_rtnt   adminurlt
   quarantinet
   sender_rtnt	   recip_rtnt   spam_rtn(    (    s2   /export/web/mailman/mailman/Mailman/Gui/Privacy.pyt   GetConfigInfo1   s„   											
	!	
!						!		!			
			!			$		
														*		!											c         C   s„   | j  d ƒ r d  S| d k r6 t j r6 | d 7} n  | d k rp | t j k  rp | j t d ƒ ƒ t j } n  t | | | ƒ d  S(   Nt
   hdrfilter_R   i   R'   s[   dmarc_moderation_action must be >= the configured
                           default value.(   t
   startswithR    R<   t   DEFAULT_DMARC_MODERATION_ACTIONt   addErrorR   t   setattr(   R   RC   t   propertyt   valt   doc(    (    s2   /export/web/mailman/mailman/Mailman/Gui/Privacy.pyt	   _setValuee  s    	
c         C   sZ  | j  d ƒ s d  Sg  } d } d  } xñt rd | }	 d | }
 d | } d | } d | } d | } d	 | } d
 | } | d 7} | j  |	 ƒ r q( n  | j |
 ƒ } y t | j | ƒ ƒ } Wn  t t f k
 rç t j } n X| d  k rø Pn  | j  | ƒ r9| r9| d k r q( n  | j	 t
 d ƒ ƒ q( n  t j d t j j d d ƒ t j ƒ } | rx| j d ƒ } n t j | j ƒ } y) t j | | ƒ } t j | ƒ | } Wn? t j t f k
 rôt j | ƒ } | j	 t
 d ƒ ƒ q( n X| j  | ƒ rƒ| j | ƒ } | d k rQ| j d t j t f ƒ | j | | t f ƒ q| j | | t f ƒ | j d t j t f ƒ q( | j  | ƒ rÍ| r´| j d | | t f ƒ q| j | | t f ƒ q( | j  | ƒ rÿ| d } | j | | t f ƒ q( | j | | t f ƒ q( W| d  k	 rM| | } | | =| j | d | ƒ n  | | _ d  S(   Nt   hdrfilter_rebox_01i   s   hdrfilter_delete_%02ds   hdrfilter_rebox_%02ds   hdrfilter_action_%02ds   hdrfilter_where_%02ds   hdrfilter_add_%02ds   hdrfilter_new_%02ds   hdrfilter_up_%02ds   hdrfilter_down_%02di   s_   Header filter rules require a pattern.
                Incomplete filter rules will be ignored.s   .*charset=([-_a-z0-9]+)t   CONTENT_TYPER   s   The header filter rule pattern
                '%(safepattern)s' is not a legal regular expression.  This
                rule will be ignored.t   beforeiÿÿÿÿ(   t   has_keyR   t   Truet   getfirstt   intt
   ValueErrort	   TypeErrorR    t   DEFERRQ   R   t   ret   matcht   ost   environt   gett
   IGNORECASEt   groupR   t
   GetCharSett   preferred_languaget   xml_to_unicodet   compilet   errort   websafet   appendt   Falset   insertR9   (   R   RC   R   RD   t   cgidataRU   t   rulest   it   downit   deltagt   reboxtagt	   actiontagt   wheretagt   addtagt   newtagt   uptagt   downtagt   patternt   actiont   mot   csett   upatternt   safepatternt   wheret   rule(    (    s2   /export/web/mailman/mailman/Mailman/Gui/Privacy.pyt   _handleFormz  s‚    	








	
	
	


c         C   sH   | d k r( |  j  | | | | | ƒ n  t j |  | | | | | ƒ d  S(   NR   (   R…   R   t
   handleForm(   R   RC   R   RD   Rq   RU   (    (    s2   /export/web/mailman/mailman/Mailman/Gui/Privacy.pyR†   Ú  s    (	   t   __name__t
   __module__R   R   R   RM   RV   R…   R†   (    (    (    s2   /export/web/mailman/mailman/Mailman/Gui/Privacy.pyR   $   s   			ÿ ÿ 6		`(   t   __doc__Rc   Ra   t   MailmanR    R   t   Mailman.i18nR   t   Mailman.Gui.GUIBaseR   R[   Ro   t	   NameErrorR   (    (    (    s2   /export/web/mailman/mailman/Mailman/Gui/Privacy.pyt   <module>   s   
