summaryrefslogtreecommitdiff
path: root/Mailman
Commit message (Collapse)AuthorAgeFilesLines
...
* processUnixMailbox(): Add some useful diagnostics which only getbwarsaw2001-11-301-0/+4
| | | | | printed in VERBOSE mode (i.e. running bin/arch). Print out a message counter and the Message-ID: of the message being processed.
* Forward port security patch from Mailman 2.0.8:bwarsaw2001-11-3010-29/+44
| | | | | | | | | | Fixes to prevent cross-site scripting exploits. See http://www.cert.org/advisories/CA-2000-02.html Reported by zeno@cgisecurity.com Fix is to cgi.escape() any strings regurgitated from the url back to the browser in the html response.
* ParseMailCommands(): Dang, this is /really/ the way to guarantee thatbwarsaw2001-11-271-1/+6
| | | | the thing we muck about with is a concrete list object.
* ParseMailCommands(): Work around a difference in email 1.0 and 0.96.bwarsaw2001-11-271-1/+1
| | | | | In Python 2.2, email 1.0, body_line_iterator() returns a generator, which has no insert() method, so be sure to turn it into a list.
* Dan Mick discovers we need to import LockFile.bwarsaw2001-11-271-0/+1
|
* Much changes for better virtual domain support.bwarsaw2001-11-261-33/+88
| | | | | | | | | | | | | | - Import bsddb directly instead of dbhash - delete virtual_files() - _zapfile(), _zapdb(): New internal function - clear(): New public function for clearing out both the plain text files and the db files. - addlist(), and friends: better support for writing virtual alias entries based on the value of POSTFIX_STYLE_VIRTUAL_DOMAINS.
* POSTFIX_STYLE_VIRTUAL_DOMAINS: Describe new API for this variable.bwarsaw2001-11-261-5/+9
|
* Support for Postfix-style virtual domains.bwarsaw2001-11-241-33/+105
| | | | | | | | | | | | | | | | | virtual_files(): Return the .db filename and text filename based on the host_name. addlist(): Some generalizations for the writing of the site list's loop entry. addvirtual(): Implements writing the virtual file plain text and dbhash files. do_create(), create(): Reorg to call both addlist() and addvirtual() if necessary. do_remove(), remove(): Reorg so that both the entries from the aliases file and the virtual file will be removed.
* POSTFIX_STYLE_VIRTUAL_DOMAINS: New flag to let Mailman/MTA/Postfix.pybwarsaw2001-11-241-7/+18
| | | | know whether to create virtual-<domain> files. Defaults to 0.
* Handler module which sets the recips metadata to the list owners (plusbwarsaw2001-11-221-0/+23
| | | | the list moderators).
* Fixed some typos found by Dan Mick.bwarsaw2001-11-221-9/+10
|
* process(): When VERPing, blow away the Sender: and Errors-To: headersbwarsaw2001-11-211-2/+14
| | | | | so bouncing MTAs won't be tempted to delivery bounces there (and those headers won't contain the VERPed response address).
* The qrunner that consumes qfiles/bounce messages, which come from thebwarsaw2001-11-211-0/+136
| | | | listname-bounces alias.
* process(): Simplify by calling out to matches_p() to do the actualbwarsaw2001-11-211-9/+28
| | | | | | | | | match of the sender against the nonmember addresses. matches_p(): Implements the matching rules: - match literal addresses first - match re's next (they must start with a ^ which stays as part of the regular expression)
* hold_for_approval(): In setting up the initial interpolationbwarsaw2001-11-211-1/+1
| | | | dictionary, translate `reason' through i18n.
* GetConfigInfo(): Describe how the nonmember match rules can containbwarsaw2001-11-211-9/+28
| | | | | regular expressions, and provide a link to Python's re module documentation.
* get_item_gui_value(), get_valid_value(): Added EmailListEx widgetbwarsaw2001-11-211-3/+6
| | | | | | which is just like EmailList except that it also allows "extended email addresses", really just regular expressions, which must start with a ^ (otherwise it's taken as a literal address).
* ProcessConfirmCmd(): Need to define listname and url local vars forbwarsaw2001-11-211-1/+4
| | | | | | the i18n string interpolation. Also, rewrite the MMBadConfirmation message, since they may be confirming something other than a subscription request.
* I don't think we need to import Mailman.i18n anymore. Anybwarsaw2001-11-211-6/+6
| | | | | | translatable strings here just need to be marked as such, using the identity _() function. They'll always get translated before they're used.
* Added EmailListEx widget which is just like EmailList except that itbwarsaw2001-11-211-12/+15
| | | | | | also allows "extended email addresses", really just regular expressions, which must start with a ^ (otherwise it's taken as a literal address).
* Hungarian is iso-8859-2bwarsaw2001-11-211-1/+1
|
* _dispose(): Support for regular non-personalized VERP delivery.bwarsaw2001-11-201-0/+7
| | | | | Consults VERP_DELIVERY_INTERVAL to decide whether to set the `verp' metadata key.
* Some updating of the big comment. I'm not spending a lot of time onbwarsaw2001-11-201-6/+8
| | | | | this because I want to create a flow chart later to give a better description of the details.
* This runner now only handles -request, -join, and -leave emails. Itbwarsaw2001-11-201-102/+10
| | | | | | | | | | | no longer handles any -admin or -owner messages, or any bounce processing. _dispose(): Don't look at the `authoritah' metadata key. Also, vastly simplify the main switch because it only needs to look at torequest, tojoin, and toleave. _toadmins(): Removed as unnecessary.
* makealiases(): The list of aliases now includes -bounces which goes tobwarsaw2001-11-201-4/+6
| | | | | | | | the new bounces script. -admin no longer delivers to the mailowner script since the mailowner script no longer does bounce processing. For backwards compatibility -admin goes to the bounces script now (should it?). Also, -owner is no longer an alias for -admin but pipes to the mailowner script directly.
* addlist(): When creating the aliases file for the first time, be surebwarsaw2001-11-201-1/+7
| | | | | | | | | | | to write out the mailman-loop address which is used to consume all messages sent to the mailman-owners address that bounces. This is now the best way to break bounce loops. All mail to mailman-loop@dom.ain will get appended to an mbox file called $prefix/data/owner-bounces.mbox. Similarly, make sure the mailman-loop address is in the database.
* Support for VERP deliveries.bwarsaw2001-11-201-22/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | process(): Don't hardcode the envelope sender to the -admin address. First off, we're directing bounces to the -bounces address. Second, if we're VERPing, we'll be calculating the envelope sender individually for each recipient in the deliver() function. When VERPIng, set the envsender local variable to a tuple containing some pre-calculated information needed by deliver(). Specifically it will contain the split mailbox and domain of the list's -bounces address. Also, when VERPing, each chunk will contain exactly one recipient, so use a list comprehension to calculate this (it's actually a list of lists where the inner list has one item). We'll also pass the envsender local variable to both threaded_deliver() and deliver(). To make VERP delivery slightly more efficient, every thread gets its own connection to the MTA. So we create an smtplib.SMTP instance once but do not connect it until we actually get to deliver() -- and there we have to use a kludge to determine whether we're connected or not. deliver() will re-use the connection to the MTA to do the conn.sendmail() calls. pre_deliver(): Add the conn argument. threaded_deliver(): Create one smtplib.SMTP instance for each thread. Be sure to close the connection when the thread is finished. deliver(): Add the conn argument. Craft the VERP envelope sender as described above. Make sure the MTA connection is connect()'ed.
* Update some commentsbwarsaw2001-11-201-1/+7
|
* process(): VERP support. If VERP_PERSONALIZED_DELIVERIES is true,bwarsaw2001-11-201-1/+4
| | | | | then set the `verp' flag in the message metadata. This will signal the SMTPDirect module to VERP this message delivery.
* process(): We're now setting Sender: and Errors-To: to thebwarsaw2001-11-201-3/+3
| | | | | | listname-bounces@dom.ain address instead of to the -admin address. This departure cleans up the return path for bounced deliveries, but does require a regeneration of the aliases file.
* process_request(): Utils.get_site_email()'s second argument should nobwarsaw2001-11-201-1/+1
| | | | longer include the leading dash.
* get_site_email(): Default the `extra' argument to None, and change thebwarsaw2001-11-201-2/+4
| | | | API so that the leading dash on extra shouldn't be included.
* CheckCookie(): Let's be explicit about using the Cookie.SimpleCookiebwarsaw2001-11-201-6/+19
| | | | | | | | | | | class to decode the cookie data so there's no possibility of unpickling exploits of untrusted data. I'm still mildly concerned about using marshal.loads() to de-serialize the cookie data we want to use for authorization, although I think we're more or less safe for the reasons described in the preceding comment. I should probably think about this some more, possibly using the newly documented pickle anti-exploit measures.
* getListAddress(): Basic method for calculating a sub-address of thebwarsaw2001-11-201-10/+16
| | | | | | | | | | list given the extension. GetAdminEmail(), GetOwnerEmail(), GetRequestEmail(), GetListEmail(): Define in terms of getListAddress(). ApprovedAddMember(), ApprovedDeleteMember(): Utils.get_site_email()'s second argument should not include the leading dash.
* New variables to control VERP-like behavior for better bouncebwarsaw2001-11-201-5/+73
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | detection. VERP_FORMAT: The string (with interpolations) that is used as the format for VERP'd envelope senders. VERP_REGEXP: The (unfortunately complex) regular expression which decodes strings encoded with VERP_FORMAT. WIBNI Python had a scanf() equivalent? VERP_PASSWORD_REMINDERS: A flag which controls whether password reminders are VERP'd. This is a golden opportunity because such emails are already individualized. VERP_PERSONALIZED_DELIVERIES: A flag which controls whether personalized regular deliveries are VERP'd. This is another golden opportunity because such emails are already individualized. VERP_DELIVERY_INTERVAL: A variable which controls the frequency with which to VERP regular, non-personalized deliveries. 0 means never VERP these, 1 means to always VERP them, and a number > 1 means to VERP every Nth delivery. GLOBAL_PIPELINE: Move the ToUsenet handler up to just after the ToArchive handler. Also, added some comments. QRUNNERS: Alphabetize, and also add a BounceRunner now that we're going to change the envelope sender address so that bounces always come to listname-bounces@dom.ain. IOW, we're finally separating administration from bounce processing, however this /will/ require folks to regenerate their aliases. We'll make that easier for them.
* Some code cleaning, and adjustment to new API.bwarsaw2001-11-201-7/+2
| | | | | | | RegisterBounce(): The dirty flag wasn't used anywhere. HandleBouncingAddress(): Utils.get_site_email()'s second argument should no longer include the leading dash.
* show_post_requests(): We have to translate the `reason' we get out ofbwarsaw2001-11-071-1/+1
| | | | | the admin database, otherwise it won't be in the list's preferred language.
* process_request(): Add an html comment to a string that otherwisebwarsaw2001-11-061-2/+7
| | | | | would be a duplicate of one in bin/newlist. Web version and email version should have different entries in the message catalog.
* subscription_prompt(), unsubscription_prompt(), heldmsg_prompt(): Thebwarsaw2001-11-061-3/+38
| | | | | | | | | | results strings should be displayed in the language that the subscribee has requested. Also, tailor the response message based on whether the moderators have to approve a confirmed request or not. Reported by Daniel Buchmann. subscription_confirm(): Need a `listname' local variable for _() string interpolation.
* HoldSubscription(): Because the subscription authorization message isbwarsaw2001-11-061-1/+1
| | | | | | to be sent to the list moderators, it should be sent in the list's own preferred language, not in the requested language of the subscribee. Reported by Daniel Buchmann.
* main(): When using private rosters, and attempting to remind, unsub,bwarsaw2001-11-061-22/+32
| | | | | | | or login, be sure we test for membership with isMember() before we call the methods that require the user to be a member. Organize the code such that membership isn't leaked due to the result messages, and that mischievous attempts are logged.
* ChangeHTML(): Must make sure the language-specific directory for thebwarsaw2001-11-051-4/+12
| | | | list exists before we try to write the template file.
* password_input(): Daniel Buchmann rightly points out that the textbwarsaw2001-11-051-4/+5
| | | | | explanation needs to be written to reflect the fact that password inputs are not on the general optinos page anymore.
* Add the `cs' language code for Czech.bwarsaw2001-11-051-0/+1
|
* get_domain(): Lower case the host name since host names are case insensitive.bwarsaw2001-11-021-2/+2
|
* listinfo_overview(), admin_overview(): Simplify the test for virtualbwarsaw2001-11-022-6/+2
| | | | | host matching. We simply need to find the lowercased hostname in the web_page_url to find a match.
* write_index_entry(): Slight modification so that the subject andbwarsaw2001-10-281-3/+2
| | | | | author line are always html-escaped. This fixes index summaries for messages with html in their Subject: line for instance.
* inject(): kws must contain _plaintext (== 1) so that the stringbwarsaw2001-10-281-2/+3
| | | | message is read back as a string.
* process(): Implement ARCHIVE_HTML_SANITIZER == 3, strip but don'tbwarsaw2001-10-271-3/+16
| | | | escape text/html.
* ARCHIVE_HTML_SANITIZER can now take a value == 3 for removingbwarsaw2001-10-271-0/+10
| | | | | text/html as attachments and not HTML-escaping them. (The obvious == 4 value isn't possible given Pipermail's current implementation).