summaryrefslogtreecommitdiff
path: root/Mailman
Commit message (Collapse)AuthorAgeFilesLines
...
* Extensive cleanup and performance improvements. Most signficant changes are:jhylton2000-09-222-86/+101
| | | | | | | | | | | | | | | | - add support for decoding subjects in links to next and prev message if the encodings of the two messages are the same - change re.sub('"',...) with string.replace('"', ...) - remove unused __processbody_CGIescape method - vast simplification and speed up of format_article (still more to do in methods it calls) - change logic of loadbody_fromHTML to avoid unnecessary tests - add slightly optimized mailbox class
* misc cleanupjhylton2000-09-221-29/+18
| | | | | replace open calls with explicit open_ex add load method with code from __init__
* Fix index generation bug that oocasionally prevented messages fromjhylton2000-09-222-160/+202
| | | | | | | | | | | | | | | | | | | | | | | | appearing in index. pipermail generated several indexes by assuming that date was unique. If two messages arrived with, e.g., the same author and date, then the author index treated them as identical. As a result, both messages were archived, but only the last one was included in the index. Solution is to always include the msgid, which is unique, in the index key. Change database keys to combine elements using tuples instead of string concatenation with \000 as separator. Fix was accomplished by refactoring on pipermail.Database and its subclasses. Push index-key generation into common concrete base class Database; rename abstract base class to DatabaseInterface. Break up addArticle method into several pieces. TBD There is still more refactoring to do on Database class. Because date key has changed, HyperDatabase method to return first and last date changed to reflect format of date key. Refactor pipermail.T.add_article into several pieces.
* apply patch #100867-- add robot meta tags to cause more intelligentjhylton2000-09-221-0/+3
| | | | search engine indexing of index and message pages
* replace null bytes in message body with spacesjhylton2000-09-221-2/+4
|
* Article._get_body(): Python 1.5.2's int() takes only one argument.bwarsaw2000-09-221-1/+1
|
* decode quoted-printable message bodiesjhylton2000-09-221-4/+38
| | | | | | keep _charsets dictionary in pickled rep of archive; this allows the charset for an index page to be set based on the total count of charsets in all messages
* default should not be verbosejhylton2000-09-221-1/+1
|
* Bump to 2.0beta6bwarsaw2000-09-221-2/+2
|
* Several changes in support of David Champion's SF patch #101331.bwarsaw2000-09-221-8/+13
| | | | | | | | | | | | | | | | | | | Specifically, VAR_PREFIX gets substituted here by configure. This is where all the writable, variable directories in Mailman are installed, such as: LIST_DATA_DIR = $VAR_PREFIX/lists LOG_DIR = $VAR_PREFIX/logs LOCK_DIR = $VAR_PREFIX/locks DATA_DIR = $VAR_PREFIX/data QUEUE_DIR = $VAR_PREFIX/qfiles SPAM_DIR = $VAR_PREFIX/spam PUBLIC_ARCHIVE_FILE_DIR = $VAR_PREFIX/archives/public PRIVATE_ARCHIVE_FILE_DIR = $VAR_PREFIX/archives/private Also, MAILMAN_UID and MAILMAN_GID get substituted here by configure too.
* Several changes in support of David Champion's SF patch #101331.bwarsaw2000-09-221-2/+1
| | | | | | | Specifically, HyperArchive.html_TOC_entry(): Don't calculate path to archives/private here; it's already done for us in mm_cfg.
* do_child(): Use a slightly different algorithm for munging thebwarsaw2000-09-221-5/+26
| | | | | | | | | | | Message-ID: header in posted messages. We define a machine parsable format containing the listname and the hostname, and if these match our list's name and hostname, we do not munge the header. This continues to allow crossposting to multiple gated mailing lists, but should break loops involving the nntpd in the most common case. Thanks to Jim Tittsler for pointing out the problem.
* HyperArchive.__init__(): charset attribute needs to be initialized tobwarsaw2000-09-221-2/+3
| | | | | | None otherwise pure-ascii archives fail to build. Other de-Python-2.0-ifications.
* Coding style changes. De-Python-2.0-ification.bwarsaw2000-09-221-34/+58
| | | | Unit test returns same results in Python 1.5.2, 1.6, and 2.0.
* Numerous changes to support message bodies and headers that use ajhylton2000-09-222-196/+319
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | non-ascii charset. HyperArch: call write_index_entry from write_threadindex_entry more style issues; refactoring of several methods add ctype, charset, and decode attrs to Article; set based on Content-Type header and an encoded-words in header add extra blank lines to html templates so that they interact better with iso-2022-jp text handle msg <title> and <h1> tags separately to avoid non-ascii characters in title add encoding format to index and message headers add explicit template for index entry pipermail: handle messages with timezone gracefully catch EOFError when loading archive pickle fix a few bugs that were hidden by bogus overrides in HyperArch
* Decode encoded-words as defined by RFC 2047jhylton2000-09-221-0/+147
|
* pipermail:jhylton2000-09-212-114/+39
| | | | | | | | factor out "write article as html" as write_article method fix a few bugs in previous checkin HyperArch: get rid of bogus add_article override; over_ride write_article instead
* oops! time machine problemjhylton2000-09-211-1/+1
|
* Fix Article class in HyperArch. It is a subclass of pipermail.Article,jhylton2000-09-212-107/+57
| | | | | | | | but it also had some methods that were overridden cut-n-paste style. pipermail: move Article date handling into separate method (should probably do this for the rest of __init__)
* massive reformatting and refactoringjhylton2000-09-212-335/+401
| | | | | | | | | fix some of the hardest-to-read style problems: - no space around = in assignment - obscure comparisons (e.g. use if seq: instead of if len(seq):) - put body of if/else try/except on separate lines refactoring: separate some large and/or obscure chunks of code into methods
* process(): To finally break -admin autoreply loops, we need to add thebwarsaw2000-09-211-2/+3
| | | | "X-Ack: no" header if the `noack' flag is set on msgdata.
* Three new bounce detectors:bwarsaw2000-09-214-0/+179
| | | | | | | | | | | | | | | | | | | | | | | | | | - GroupWise.py which detects (I believe) Novell's GroupWise Internet Agent 5.5.3.1 and something called NTMail v4.30.0012 - SMTP32.py which detects something that claims in its X-Mailer: header to be "<SMTP32 vXXXXXX> where the X's are various version numbers. I've actually gotten a few bounces from three totally different domains with this header. I have no idea what it actually is. - SimpleMatch.py which detects a wide variety of simple matches of the form: ...a bunch of lines --- some start delimiter --- ...a bunch of lines some lines that look like they contain an email address ...maybe more bunches of lines --- some end delimiter --- There may actually be overlap between SimpleMatcher and other matches, I don't know. There's definitely overlap between SimpleMatcher and Catchall, the latter of which can probably go away eventually.
* Archiver.InitVars(): Ted Cabeen's SF patch #100554 to allowbwarsaw2000-09-201-1/+1
| | | | mlist.archive to be set from mm_cfg.py.
* Ted Cabeen's SF patch #100554 to allow mlist.archive to be set frombwarsaw2000-09-201-1/+5
| | | | mm_cfg.py. Adds DEFAULT_ARCHIVE.
* AppendMessage(): Patch to quote From_ lines in the body of a messagebwarsaw2000-09-201-2/+7
| | | | | | (unquoted lines will mess up the archiver). Inspired by Owen Taylor's SourceForge patch #101174, with a slight refinement to only quote From_ lines that match _isrealfromline().
* process(): Implementation of RFC 2369, inspired by zedboy's (Darrellbwarsaw2000-09-201-26/+41
| | | | | | | | | Fuhriman) SF patch #101290. List-Id: is kept for historical reasons even though it is not part of the RFC. The following headers included on each email: List-Help, List-Unsubscribe, List-Subscribe, List-Post with appropriate http and/or mailto urls for the list. List-Archive is also added if the mailing list supports archives. These headers are not added for "_nolist" messages (e.g. password reminders).
* GetListIdentifier(): Removed as obsolete (List-Id: is not part of thebwarsaw2000-09-201-7/+0
| | | | final RFC 2369).
* GatewayManager.InitVars(): Accepted SF patch #101333, David Champion'sbwarsaw2000-09-191-1/+1
| | | | patch to set the default nntp_host in mm_cfg.py.
* Accepted SF patch #101333, David Champion's patch to set the defaultbwarsaw2000-09-191-0/+3
| | | | nntp_host in mm_cfg.py.
* Article.__init__(): Chris Snell's patch for obscuring email addressesbwarsaw2000-09-191-0/+6
| | | | | | | | | in Pipermail archives. Wrap this in a configuration variable ARCHIVER_OBSCURES_EMAILADDRS because it breaks mailto: urls too. ARCHIVER_OBSCURES_EMAILADDRS defaults to false (no-obscure). Closes SF patch #101476.
* Article.__init__(): Chris Snell's patch for obscuring email addressesbwarsaw2000-09-191-0/+2
| | | | | in Pipermail archives. Wrap this in a configuration variable ARCHIVER_OBSCURES_EMAILADDRS because it breaks mailto: urls too.
* main(): syslog() call had unnecessary trailing \n. Closes SF patchbwarsaw2000-09-191-1/+1
| | | | #101554.
* FormatConfiguration(): Added Dan Mick suggestion for a link to thebwarsaw2000-09-191-4/+5
| | | | list's archives.
* SendSubscribeAck(): Since the notification message contains passwords,bwarsaw2000-09-191-0/+1
| | | | | this message should not be archived. Set "X-No-Archive: yes". Closes SF bug #114193.
* do_child(): Unconditionally munge the Message-ID: header to somethingbwarsaw2000-09-191-3/+3
| | | | | | | | unique for each copy of the message posted to the news server. My news server at least will silently ignore multiple postings with the same Message-ID Assuming this analysis is correct, this closes SF bug #114164.
* Removed debugging cruft.bwarsaw2000-09-181-1/+0
|
* DeliverToUser(): Since most calls to this function are on internallybwarsaw2000-09-181-0/+1
| | | | | | | | created messages, explicitly set the 'noack' flag to true so that by default, Replybot will ignore the message. This will get overridden by the flag set in qrunner (which is the only place that externally generated messages are injected into the system using DeliverToUser()). Closes SF bug #114603.
* process(): Do not send autoreplies to messages that have 'noack' setbwarsaw2000-09-181-1/+2
| | | | in their msgdata. Closes bug #114603.
* maketext(): Default dict argument to None, which means empty list.bwarsaw2000-09-171-1/+3
|
* GetConfigInfo(): Use Utils.maketest() to get the extra html forbwarsaw2000-09-171-2/+2
| | | | | msg_header and msg_footer. Closes SF bug #114167, Jitterbug PR #209.
* GetConfigInfo(): Use Utils.maketest() to get the extra html forbwarsaw2000-09-171-5/+6
| | | | | digest_header and digest_footer. Closes SF bug #114167, Jitterbug PR #209.
* MESSAGE_DECORATION_NOTE: Removed. Text has been moved tobwarsaw2000-09-171-23/+0
| | | | templates/headfoot.html. Closes SF bug #114167, Jitterbug PR #209.
* Do not set the List-Id: header if the msgdata contains the volatilebwarsaw2000-09-151-1/+1
| | | | | key "_nolist" (set by mailpasswords). Close SF bug #114127, Jitterbug PR#149.
* Upgrade to Python 2.0b1's cgi.py. We'll have to track changes to thisbwarsaw2000-09-151-447/+73
| | | | | module manually now, since it's subsequently been changed to use Python 1.6 features (string methods). :/
* ChangeOptions(): A previous change retained empty fields by passingbwarsaw2000-09-151-17/+18
| | | | | | | | | | | | | | | | | cgi.FieldStorage constructor keep_blank_values=1. Without this, it isn't possible to set a text field to the empty string. However, this breaks admin password changing on the General page because the test was for key presence. We now also check that the key's value is non-empty (meaning empty admin passwords are no longer allowed). Also, when changing the admin password, make sure that the new password isn't empty, and string.strip() the new and confirm password. Finally, use AddErrorMessage() more consistently. AddErrorMessage(): make the tag (i.e. "Warning: ") settable via arguments.
* PrintRequests(): Now that all footers contain links to the adminbwarsaw2000-09-151-7/+1
| | | | | pages, we can remove the extra links from the "no pending requests" information.
* loginpage(): Use full-on red for errors.bwarsaw2000-09-151-2/+5
| | | | | | | | | | authenticate(): Because admin.py now tells cgi.FieldStorage to keep_blank_values (necessary to fix other bugs), it isn't enough to test just for presence of the `adminpw' key. The key's value must also be non-empty. Not a great solution, but the best we can do right now. Yes, this means that empty admin keys aren't allowed.
* GetListIdentifier(): Don't include the description if it's emptybwarsaw2000-09-151-2/+4
| | | | (saves an extra leading space in that case).
* main(): When creating the cgi.FieldStorage instance, we need to setbwarsaw2000-09-151-1/+1
| | | | | keep_blank_values to 1 in order to be able to, e.g. set the msg_footer to the empty string!
* inject_digest(): Only send a mime digest if there actually are mimebwarsaw2000-09-151-7/+10
| | | | recipients. Likewise for plain text digests.