summaryrefslogtreecommitdiff
path: root/Mailman
Commit message (Collapse)AuthorAgeFilesLines
...
* Bumping rev numbers to 2.0beta3bwarsaw2000-04-081-2/+2
|
* ProcessSubscribeCmd(): Fixed small typo in previous checkinbwarsaw2000-04-081-1/+1
|
* ProcessSubscribeCommand(): Use MailList.GetAdminEmail() for obtaininghmeland2000-04-081-4/+4
| | | | | list admin contact address, instead of trusting the MMNeedApproval exception to have been raised with the correct address as argument.
* __handlepost(): Sender's address (which is taken from the incominghmeland2000-04-081-1/+1
| | | | | message) might contain '%' chars, quote them before they reach MailList.LogMsg().
* __init__(): Catch possible ValueErrors when the date contains a yearbwarsaw2000-04-071-1/+5
| | | | in the 100-1899 range. Coerce these to current GMT time.
* do_child(): Catch and cleanly report socket.error exceptions which canbwarsaw2000-04-071-5/+10
| | | | happen during the nntplib.NNTP() call.
* ChangeOptions(): When the gateway_to_mail option changes (in anybwarsaw2000-04-071-1/+8
| | | | | | direction), mlist.usenet_watermark is set to None. This tells gate_news to mass catchup the newsgroup, which avoids list flooding when gating from Usenet is turned back on.
* HEX_VERSION (et al): Implementation of a comparable integer describingbwarsaw2000-04-071-0/+18
| | | | | | the Mailman version number. This will always be linearly increasing with each release. Modelled after PY_VERSION_HEX in Python's patchlevel.h.
* Import new variable HEX_VERSION from Version.pybwarsaw2000-04-071-1/+1
|
* process_form(): MMListNotReady => MMListNotReadyErrorbwarsaw2000-04-041-4/+4
|
* ProcessPasswordCmd(), ProcessSetCmd(), ProcessUnsubscribeCmd(),bwarsaw2000-04-041-4/+4
| | | | ProcessSubscribeCmd(): MMListNotReady => MMListNotReadError
* process_form(): MMListNotReady => MMListErrorbwarsaw2000-04-041-1/+1
|
* Some meager consistency in handling errors when trying to open thebwarsaw2000-04-049-44/+55
| | | | | | | | | | | | | | mailing list. In all cases, catch the base exception class MMListError, and output HTML indicating the specified list doesn't exist. A more detail message gets printed to logs/error (the str() of the actual exception details). Also: admin.py - Don't catch MMBadConfigError around mlist.parse_matching_header_opt() since this method doesn't ever raise that exception. Actually, that exception isn't raised anywhere in Mailman, so it's been removed.
* __init__(): Avoid the costly scan of name in Utils.list_names(). Thisbwarsaw2000-04-041-10/+10
| | | | | | | | | | | | | | | | | | | | | | | | resulted in a huge number of useless stats (i.e. list_lists or blank listinfo could result in n**2 stats). Instead, exceptions raised in Load() are passed through the constructor, where essentially the same checks are made anyway (caught by Ted Cabeen). Load(): Several changes resulting from consistency in list-opening exceptions: - If an IOError occurs when opening the list's config.db file, transform the exception into MMUnknownListError. Also unlock the list before the exception is raised! - If the unmarshalled object is not a dictionary, raise MMCorruptListDatabaseError. Again, unlock the list first. - If unmarshalling raises an EOFError, ValueError, or TypeError, transform these into MMCorruptListDatabaseError -- after unlocking of course. IsListInitialized(): RAise MMListNotReadyError instead of MMListNotReady.
* ProcessListsCmd(): Catch base class MMListError.bwarsaw2000-04-041-1/+2
|
* Consistency in list-opening related exceptions.bwarsaw2000-04-041-4/+8
| | | | | | | | | | | | | MMListError: new base class for all list-opening related exceptions. MMUnknownListError: Change to class-based exception inheriting from MMListError. MMBadListError: Becomes class MMCorruptListDatabaseError MMListNotReady: Becomes class MMListNotReadyError MMBadConfigError: removed.
* do_child(): Move subjpref outside the if subj: test, otherwise abwarsaw2000-04-041-1/+1
| | | | missing Subject: header will cause a NameError.
* __get_f(): Since Python 1.5.2 is now required, we can get rid of thebwarsaw2000-04-031-4/+4
| | | | | | | Utils.reraise() hack. Also, use import statements which are more consistent with the rest of Mailman.
* makelink(), breaklink(), Archiver.InitVars(),bwarsaw2000-04-031-17/+11
| | | | | | | | Archiver.__archive_to_mbox(): Since Python 1.5.2 is now required, we can get rid of the Utils.reraise() hack. Also, use import statements which are more consistent with the rest of Mailman.
* open_ex(): Since Python 1.5.2 is now required, we can get rid of thebwarsaw2000-04-031-19/+1
| | | | | | Utils.reraise() hack. reraise(): removed.
* Save(): Since Python 1.5.2 is now required, we can get rid of thebwarsaw2000-04-031-3/+3
| | | | Utils.reraise() hack.
* process(): Michael Yount writes to describe the handling of error codebwarsaw2000-04-031-1/+10
| | | | | | | | | | | | 552, as described in draft-ietf-drums-smtpupd-11.txt: [RFC-821] incorrectly listed the error where an SMTP server exhausts its implementation limit on the number of RCPT commands ("too many recipients") as having reply code 552. The correct reply code for this condition is 452. Clients SHOULD treat a 552 code in this case as a temporary, rather than permanent failure so the logic below works. Handle code 552 as a temporary failure.
* Bump version number to 2.0beta2bwarsaw2000-04-031-1/+1
|
* Implementation of file queing on total or partial delivery failures.bwarsaw2000-03-281-7/+59
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Specifically, process(): move smptlib.SMTP() into the try/except so that socket.errors on the connection can be flagged and dealt with as total delivery failures. Better error logging. If the connection goes through but smtplib throws an SMTPRecipientsRefused exception, then Only persistent transient failures are queued, i.e. those with error code < 500. For failed recipients with codes >= 500, these are permanent failures and we do a bounce registration instead. queue_message(): handles all the actual queuing of files for future re-delivery attempts. Two files per message are written to $prefix/qfiles: one is a .txt containing the full text of the message, the other is a .db file containing a marshal of this information: listname - Python string naming the list for delivery recips - Python list of addr strings attepts - number of total delivery attempts for this queued message last_recip_count - number of recips the last time this delivery was re-tried (not sure how useful that will be). The base name of the two files is the SHA hexdigest hash of the message text.
* pipeline_delivery(): factoring out common delivery code.bwarsaw2000-03-281-15/+23
| | | | | | | DeliverToList(), DeliverToUser(): Use pipeline_delivery RedeliverMessage(): New delivery top-level function which is used by qrunner to attempt re-delivery.
* InitTempVars(): Use mm_cfg.LIST_LOCK_LIFETIME, which now defaults to 2bwarsaw2000-03-281-1/+1
| | | | minutes, instead of hardcoding a value in place.
* SMTPHOST now defaults to 'localhost'. I don't remember why I tried tobwarsaw2000-03-281-1/+9
| | | | | | | | | | default it to @URL@, but using 'localhost' doesn't seem to break anything. LIST_LOCK_LIFETIME: new variable which controls the default list lock lifetime, with an explanation adapted from Thomas Wouters'. QUEUE_DIR: Variable containing the location to the qfiles directory.
* do_child(): Move the global import of our own copy of nntplib intobwarsaw2000-03-231-7/+3
| | | | | this function, otherwise the "import nntplib" we forgot about whacks the one we wanted!
* process_form(): Catch MMBadUserError, which can get raised duringbwarsaw2000-03-231-0/+4
| | | | | password confirmation when the user doesn't have a password (and how can that happen?!)
* MailUserPassword(): If the user didn't have a password, requestaddrbwarsaw2000-03-231-1/+1
| | | | wasn't set.
* Jim Tittsler finds more buglets with the generated HTML:bwarsaw2000-03-221-4/+4
| | | | | | | | | | | My /mailman/listinfo page was missing a </BODY> tag. It looks like it is missing from all pages generated by mailman/htmlformat.py As long as I was looking at the HTML source, I noticed that it quoted the attribute values for some of the tags (like for the BODY tag), but not those for table, table rows, and cells. That led to things like 100% and #99CCFF not being quoted literals.
* SMTPHOST should get initialized from @URL@ instead of @FQDN@. Thisbwarsaw2000-03-221-1/+1
| | | | | latter config variable is misnamed: @URL@ really contains the complete fqdn for the host.
* do_child(): set reader mode when creating the NNTP connection.bwarsaw2000-03-211-1/+5
| | | | | | | Jim Tittsler writes: Posting also requires the server to be in 'mode reader' (at least our INN does). I think you only updated the cron/gatenews...
* With the new message delivery architecture, OutgoingQueue.py is nobwarsaw2000-03-211-198/+0
| | | | longer necessary.
* Update the copyright lines to include the years 1999 & 2000.bwarsaw2000-03-2176-87/+175
|
* UpdateOldVars(): Bug fix for schema updates. This used to setbwarsaw2000-03-211-4/+6
| | | | | | member_posting_only to 0 unconditionally -- which could whack the value on every schema update. Now we only do this when upgrading from data_version 10 or earlier.
* Bump version to 2.0beta1bwarsaw2000-03-211-2/+2
|
* Conversion of Mailman 1.1 pending admin database to 1.2/2.0 externalbwarsaw2000-03-161-12/+48
| | | | | | | | | | | | | requests.db database. This should be the last major hurdle for the new version. Specifically, NewRequestsDatabase(): This knows about the 1.1 style mlist.requests dictionary, which served as the pending requests database. It sucks everything out of this dict and resubmits the requests using the new APIs. Worst thing that happens its that the timestamps get blown away. Oh well. older(): Removed since it's not used anywhere.
* FormatListinfoOverview(): "mailman" => "Mailman"bwarsaw2000-03-151-1/+1
|
* Changes to Mailman's default footer so that open source logos forbwarsaw2000-03-151-9/+49
| | | | | | | | | | | | Mailman, Python, and GNU are displayed. I'm not 100% sure I like this... Specifically, Container.Format(): More efficient text generator which uses [].append and string.join instead of operator add. MailmanLogo(): New definition of standard footer as described above.
* Changes to Mailman's default footer so that open source logos forbwarsaw2000-03-151-5/+11
| | | | | | | | | | | | | Mailman, Python, and GNU are displayed. I'm not 100% sure I like this... Specifically, MAILMAN_URL: point this to the gnu.org subpage, instead of the list.org mirror. IMAGE_LOGOS: flag to specify whether logos are displayed or not (if not, then slogan alone in linked text is displayed).
* nntplib.py from Python 1.5.2+. This version supports setting modebwarsaw2000-03-131-0/+535
| | | | reader from the NNTP class constructor.
* process(): Use only msg.GetSender() as the way to get the "author"bwarsaw2000-03-031-4/+2
| | | | | | address of the message. GetEnvelopeSender() no longer exists (and GetSender() keys off of USE_ENVELOPE_SENDER, so it still has the same basic functionality).
* GetSender(): Every access of the "sender" (really author) should nowbwarsaw2000-03-031-32/+47
| | | | | | | | | go through this one method. This consolidates and makes consistent the use of the From:, Sender:, and envelope-sender headers, and the search order based on USE_ENVELOPE_SENDER. The docstring explains the semantics of this method. GetEnvelopeSender(): Removed.
* TEXTFIELDWIDTH: default value is better at 40 chars widebwarsaw2000-03-031-1/+1
|
* Some minor improvements to the admin UI, specifically:bwarsaw2000-03-031-31/+35
| | | | | | | | | | | | | | AddOptionsTableItem(): nodetails => detailsp (with bit flip on default value). FormatOptionHelp(): All options now have details. If a config attribute doesn't have an explicit details string, then the normal description is used as the details. This simplifies the logic a bit here and makes for a more consistent UI. Also, always include a link back to the category options page (on the quest for no dead ends!) GetItemGuiDescr(): Always include the "(Details)" link because now they /all/ have details.
* DeliverToUser(): 'fastrack' => 'fasttrack'bwarsaw2000-03-031-1/+1
|
* process(): 'fastrack' => 'fasttrack'. Elaborate the Reply-To: mungingbwarsaw2000-03-031-5/+10
| | | | | to handle the case where the header is set to an explicit address, as specified in mlist.reply_to_address.
* NewVars(): initialize reply_goes_to_list to the empty string.bwarsaw2000-03-031-0/+1
|
* Bump the DATA_FILE_VERSION to pick up the new reply_to_address configbwarsaw2000-03-031-1/+1
| | | | attribute.