summaryrefslogtreecommitdiff
path: root/Mailman
Commit message (Collapse)AuthorAgeFilesLines
...
* ApprovedAddMember(), ApprovedDeleteMember(): The admin notificationbwarsaw2002-03-141-2/+4
| | | | | | messages should be sent to the -owner address rather than the self.owner[s] directly. Also, the messages should look like they're coming from the site list's -owner.
* _setValue(): We actually don't need to do the check on thebwarsaw2002-03-141-7/+0
| | | | | reply_to_address value, since this is already done in GUIBase.HandleForm().
* DEFAULT_DEFAULT_MEMBER_MODERATION: Giving in to pressure, we'll turnbwarsaw2002-03-141-1/+1
| | | | this off by default for the MM2.1 release.
* main(): Removed bogus i18n markup around a `whence' argument tobwarsaw2002-03-141-1/+1
| | | | | DeleteMember(). whence is destined for the log files, so it should definitely not be translated!
* _dispose(): Add support for the `toconfirm' key, used by the newbwarsaw2002-03-141-2/+12
| | | | confirm mail script.
* makealiases(): Add the -confirm address for VERP-ish confirmations.bwarsaw2002-03-141-2/+2
|
* main(), subscription_prompt(), subscription_confirm(): Thebwarsaw2002-03-141-6/+12
| | | | | Pending.SUBSCRIPTION key now uses UserDesc instances instead of tuples.
* mass_subscribe(), change_options(): Added a "subscribe or invite"bwarsaw2002-03-141-47/+66
| | | | | | | | | | button which changes the action of this page. When invite is chosen, the addresses in the list are invited to the mailing list instead of immediately subscribed. mass_subscribe(), mass_remove(): Rewrite the questions table to use a RadioButtonArray for consistency and cleanliness. Also the ui is slightly better (I think).
* _load(), _save(): Now that we're saving instances in the pendingbwarsaw2002-03-141-10/+35
| | | | | | | | | | database, we need to use pickle instead of marshal. Pickle's more reliable and portable anyway. We can do auto-upgrade from marshal to pickle. If the .pck file isn't found, we'll read the .db file. But we always write the .pck file and if that's successful we can delete the .db file. We also do the standard "write a .tmp file and rotate with os.rename()" dance.
* GetConfirmEmail(): Returns a VERP-ish reply address for VERPdbwarsaw2002-03-141-4/+49
| | | | | | | | | | | confirmation messages. Requires the confirmation cookie. InviteNewMember(): Perform the actions to invite a person to the mailing list. This involves sending the person an invitation confirmation message and sticking them in the pending database. AddMember(), ProcessConfirmation(): Pending.SUBSCRIPTION now takes a single object, a UserDesc, instead of a tuple of components.
* VERP_CONFIRM_FORMAT, VERP_CONFIRM_REGEXP, VERP_CONFIRMATIONS: Newbwarsaw2002-03-141-0/+16
| | | | | | | | | | | | variables which control an alternative way to do confirmations. Instead of relying on an error prone recitation of a Subject: line, we can (optionally) use a VERP-ish From: field with the confirmation cookie in the reply address. This has the added advantage of being able to include an actual human intelligible Subject: header in the confirmation message. ;) Currently, on the new invitation confirmation feature uses this, although the confirmation conversations should be converted.
* Dang, left some debugging syslog()'s in there.bwarsaw2002-03-131-2/+0
|
* We can get rid of the old list cache, and the freshen machinery. Nowbwarsaw2002-03-133-30/+11
| | | | | | | | | _open_list() caches the MailList instances in a WeakValueDictionary which don't contribute to the reference count, but ensure that each runner will get one and only one copy of the MailList data. This should help in the memory footprint of the runners, but I suspect we may still be leaking something.
* A fix for a subtle bug in lock file management. If a process openedbwarsaw2002-03-131-5/+15
| | | | | | | | | | | | | | | | two LockFile instances on the same file, both would report that they owned the lock. This is a bug because unlocking the one that shouldn't have had the lock will unlock both. __init__(): To fix this for now we keep a class attribute counter which is incremented each time a new LockFile instance is created. This wouldn't work in a multithreaded environment, be we don't have the problem. ;) __repr__(): Add a little more information to the repr. refresh(): When raising the NotLockedError, add a little useful debugging string as the exception value.
* change_options(): Filter out empty lines before we try to subscribebwarsaw2002-03-121-2/+2
| | | | the un-address that isn't on then <wink>.
* request_creation(): Present a "should we moderate" field on listbwarsaw2002-03-121-0/+24
| | | | | creation, which is used to set the list's default_member_moderation flag.
* hold_for_approval(): We don't need to remove the charset (in the outerbwarsaw2002-03-121-2/+0
| | | | | | | admin notification message on holds) by calling set_charset(None). Because we're not passing anything on the `text' argument to the UserNotification constructor, no charset will get automatically added.
* Dan Mick's patch (with mods ;) for disabling list owner notificationbwarsaw2002-03-121-0/+27
| | | | | | | | | | | on disabled-due-to-bounces and removal-due-to-bounces. Specifically, GetConfigInfo(): Added gui elements for bounce_notify_owner_on_disable and bounce_notify_owner_on_removal. Also add a separator between the knobs for controlling bounce processing behavior and the knobs for notification. _setValue(): Teach it to convert the new list attributes to integers.
* Dan Mick's patch (with mods ;) for disabling list owner notificationbwarsaw2002-03-121-0/+6
| | | | | | | on disabled-due-to-bounces and removal-due-to-bounces. Specifically, NewVars(): Add bounce_notify_owner_on_disable and bounce_notify_owner_on_removal if missing.
* Dan Mick's patch (with mods ;) for disabling list owner notificationbwarsaw2002-03-121-1/+1
| | | | | | on disabled-due-to-bounces and removal-due-to-bounces. Specifically, Bump the DATA_FILE_VERSION to pick up the new list attributes.
* UserNotification.__init__(): If no text argument is given, don't setbwarsaw2002-03-121-4/+2
| | | | | | | | | the character set. The most common reason for this is that the notification message is a multipart/mixed and it makes no sense to give those type of messages a charset. .send(): Set the `nodecorate' key to 1 so that messages that original from the virgin queue don't get headers and footers.
* Dan Mick's patch (with mods ;) for disabling list owner notificationbwarsaw2002-03-121-0/+7
| | | | | | | | on disabled-due-to-bounces and removal-due-to-bounces. Specifically, DEFAULT_BOUNCE_NOTIFY_OWNER_ON_DISABLE, DEFAULT_BOUNCE_NOTIFY_OWNER_ON_REMOVAL: Default values for the list config attributes of the similar name.
* Dan Mick's patch (with mods ;) for disabling list owner notificationbwarsaw2002-03-121-3/+10
| | | | | | | | | | | | | on disabled-due-to-bounces and removal-due-to-bounces. Specifically, InitVars(): Add bounce_notify_owner_on_disable, and bounce_notify_owner_on_removal. disableBouncingMember(): Only send the admin a bounce notification if bounce_notify_owner_on_disable is true. sendNextNotification(): In the ApprovedDeleteMember() call, set the admin_notif argument to the value of bounce_notify_owner_on_removal.
* subscription_confirm(): Dan Mick noticed that we didn't completelybwarsaw2002-03-121-17/+1
| | | | stamp out passwords. Get rid of all vestiges.
* change_options(): Use splitlines() to find the addressesbwarsaw2002-03-121-5/+2
| | | | | | | (one-per-line) for the mass subscribe or mass unsubscribe. This should make this feature immune to native line endings, as splitlines() handles all the common line endings: CR for Mac, LF for Unix, CRLF for Windows.
* process(): Don't decorate messages sent to the -owner address.bwarsaw2002-03-121-0/+3
|
* process(): Now that Decorate.py is called directly from SMTPDirect.pybwarsaw2002-03-121-2/+2
| | | | | | | | | instead of through the pipeline, we need to be able to disable decoration even when going through SMTPDirect.process(). Examples include messages sent to the -owners address and other messages crafted internally. Add a short-circuit recognition on the `nodecorate' metadata key.
* __init__(): Remove cachelists from the constructor arguments. We canbwarsaw2002-03-123-4/+7
| | | | | | more conveniently use a class attribute to specify this. On the BounceRunner, turn off MailList object caching so that it'll be more friendly to long-term memory use.
* process(): We don't need to do a ValidateEmail() on thebwarsaw2002-03-121-6/+1
| | | | | reply_to_address since, as the note says it's better to validate it on entry, and we now have the architectural support for doing that.
* DEFAULT_FIRST_STRIP_REPLY_TO: Default this to 0 so by default we don'tbwarsaw2002-03-111-4/+4
| | | | strip Reply-To: headers.
* GetConfigInfo(): Change the description for first_strip_reply_to tobwarsaw2002-03-111-5/+13
| | | | | | | describe the intent that an existing Reply-To: can always be stripped. _setValue(): Check to make sure that the reply_to_address has a valid email address before we allow the value to be set.
* process(): Catch any exception coming out of the deliveryfunc() andbwarsaw2002-03-111-1/+9
| | | | | | | | push the last chunk back on the undelivered list, then re-raise the exception. This ensures that delivery will be re-attempted for the last chunk. They'll get dupes but that's better than them missing the message, and we don't know how many in that chunk may or may not have gotten the message.
* DEFAULT_NEW_MEMBER_OPTIONS: Add a note that the member's initialbwarsaw2002-03-111-1/+3
| | | | moderation bit comes from somewhere else.
* UpdateOldVars(): When converting from a MM2.0.x era list, if we findbwarsaw2002-03-111-2/+6
| | | | | the list's moderate attribute is enabled, then we need to set each member's Moderate option to true.
* process(): Apply Ben Gertzfield's patch which always adds the headerbwarsaw2002-03-111-2/+8
| | | | | | | and footer by concatenation if the list's charset is us-ascii, since all charsets we support are strict supersets of us-ascii. Also, coerce the message's charset parameter to lowercase for the comparison.
* whichq(): New method which returns the queue directory.bwarsaw2002-03-111-0/+3
|
* __oneloop(): Stick the queue directory in the message metadata so thatbwarsaw2002-03-111-0/+2
| | | | we can unshunt it to the correct queue.
* process(): A slight improvement for robustness. Now we assign thebwarsaw2002-03-111-1/+14
| | | | | | | `undelivered' key in the message metadata to the list of chunks the message will be sent to. If something breaks during delivery of this message, the list of undelivered recipients will be saved with the metadata, and should be restored when the message is unshunted.
* hold_for_approval(): When crafting the notification message destinedbwarsaw2002-03-111-0/+2
| | | | | for the list owner, unset the charset parameter on the multipart/mixed Content-Type: header.
* main(): Fix the warnings for "one last digest", "must digest", andbwarsaw2002-03-101-3/+10
| | | | "can't digest". Noticed by Marc MERLIN.
* CanonicalizeUserOptions(): Two changes. First, when migratingbwarsaw2002-03-091-0/+9
| | | | | | | | | | | user_options, skip the key if its not a member. This can happen when upgrading legacy databases because I believe there were bugs long ago that caused some keys to appear in user_options but not in members or digest_members. Also, we now have a mini-version id for the user_options stuff so CanonicalizeUserOptions() won't try to run every time some other part of the schema changes.
* ScanMessages(): Provide the name of the module being processed in thebwarsaw2002-03-091-1/+6
| | | | syslog error message.
* process(): Fixed the calculation of whether to VERP or not.bwarsaw2002-03-091-9/+15
| | | | Previously we were forgetting about VERP_PERSONALIZED_DELIVERIES.
* A substantial rewrite to support deferring the final stitching of thebwarsaw2002-03-091-107/+120
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | message until SMTP delivery time. This makes VERPish delivery much more efficient. One casualty is that threaded delivery (which was always marked as experimental) is now gone. It might be resurrected as a separate delivery module -- possibly called SMTPThreaded.py -- if there is enough pressure. Specific changes: Connection: New class which abstracts away the handling of disconnect and re-establishment of a connection to the SMTP server in response to the new SMTP_MAX_SESSIONS_PER_CONNECTION setting. process(): Streamline this function now that threaded delivery is gone, but add in the calculation of two types of single-threaded delivery: verpdeliver() for any VERP or personalized delivery, and bulkdeliver() for delivery of an identical copy to a set of recipients. Note that verpdeliver() calls bulkdeliver() after setting up the per-recipient specializations. pre_deliver(), threaded_deliver(): Gone; a victim of threaded delivery removal. verpdeliver(): New function which takes a list of recipients and crafts an in-memory copy of the message to be specialized and delivered to exactly one recipient. bulkdeliver(): Deliver an identical copy to a list of recipients. That list may be of length 1 <wink>.
* We're removing the entire Personalize.py module. It's no longer needbwarsaw2002-03-091-65/+0
| | | | as its functionality has been subsumed by SMTPDirect.py
* process(): Largely unchanged since this still does the job ofbwarsaw2002-03-091-1/+1
| | | | | | decorating a message with its headers and footers. The only change is that the msgdata key is now a directive instead of state (i.e. `personalized' -> `personalize').
* process(): To support VERP+personalizing in SMTPDirect.py, we nobwarsaw2002-03-091-7/+1
| | | | longer munge the Sender: or Errors-To: headers in this module.
* Two changesbwarsaw2002-03-091-2/+7
| | | | | | | | | | | | | | | | | | | | | | - We need to make VERPish delivery much more efficient from a disk utilization pov. To that end, we no longer create a new copy on the disk of every message for every recipient. Instead we'll stitch the message together in memory as we're stuffing it down the SMTP socket. GLOBAL_PIPELINE: Don't call Decorate from the pipeline since we'll need to defer this as late as possible. SMTPDirect.py will call it now in the proper context (Decorate.py still does largely the same job as before though). Also, don't call Personalize. This module will go away as its functionality has been subsumed into SMTPDirect.py - Second change: Some MTAs have a limit on the number of SMTP sessions they'll allow on a single connection. SMTP_MAX_SESSIONS_PER_CONNECTION is the new variable that controls how many sessions Mailman will stuff down the socket before it tears it down and re-connects.
* process(): Application of Jason Mastaler's patch #509386 which loosensbwarsaw2002-03-071-9/+10
| | | | | | | | | | | | | | | | | | | the membership test to check additional headers. I've modified Jason's patch in the following ways: - get_author() -> get_senders() even though I suggested the former. ;) I'd like to eventually deprecate get_sender() so this will be its eventual replacement. - Some implementation details. do_discard(): Changed the message that gets sent with auto-discarded messages. It might have been discarded because of the default non-member action, in which case the old message wasn't really accurate. I don't think the reason for discarding is all that important right now. Translators: beware!
* get_senders(): Application of Jason Mastaler's patch #509386 whichbwarsaw2002-03-071-0/+43
| | | | | | | | | | | | | | | loosens the membership test to check additional headers. I've modified Jason's patch in the following ways: - get_author() -> get_senders() even though I suggested the former. ;) I'd like to eventually deprecate get_sender() so this will be its eventual replacement. - added an optional `headers' argument which defaults to None, meaning the list of headers we agreed on previously. This allows you to pass in the exact headers you want to consult (and their order). - Some implementation details.