| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
| |
translation rather that that of the list language. (The subscribers language may
be different.)
|
| | |
|
| |
|
|
| |
address changes and confirmations of same.
|
| | |
|
| | |
|
| |
|
|
| |
before closing the config.pck file. Should improve robustness.
|
| |
|
|
|
|
|
| |
ENOENT but log all other IOErrors instead of propagating them up.
Closes a tiny exploit found by Ned Dawes.
Backport candidate.
|
| |
|
|
| |
invite invalid addresses. Backport candidate.
|
| |
|
|
|
|
| |
check to make sure the old address is a member of the list before
calling changeMemberAddress(). Bug report # 717096 and fix by Joe
Peterson.
|
| | |
|
| |
|
|
|
|
|
|
|
|
| |
being invited to, in order to prevent cross-list invitation
confirmation attacks.
ProcessConfirmation(): Check that the .invitation attribute matches
the name of the list confirming to.
Closes SF bug # 703941 by Stuart Bishop, who also suggested the basic fix.
|
| |
|
|
|
| |
the case when creating the mailing list, in which case fullpath() will
be None so we won't be able to locate the list directory.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
677668. Specifically,
ApprovedAddMember(): Make sure the admin notification is i18n safe by
temporarily setting the language to the list's preferred language, and
str-ifying the full name to the list's language, replacing any wacky
characters. :)
DeleteMember(): Set admin_notify default value to None instead of 0,
so that the list's admin_notify_mchanges takes precedence in most
cases.
|
| |
|
|
| |
database.
|
| |
|
|
|
|
|
|
|
|
| |
global change.
ApprovedChangeMemberAddress(): Don't worry about trying to reduce the
amount of work by testing on isMember(). This doesn't work anyway
when we're changing an address for case only. Just do the
changeMemberAddress() call and be done with it. Same goes for when
deciding whether to do the change in the other lists.
|
| |
|
|
|
|
|
|
| |
ProcessConfirmation(): In the Pending.SUBSCRIPTION section, move the
concatenation of the context with the userdesc to before we extract
the addr, fullname, password, digest, and lang. This is so we can
correctly pick up any changes made in the confirmation page, e.g. the
user's preferred language.
|
| |
|
|
|
|
| |
unsubscribe them, and then pass this to the SendUnsubscribeAck()
call. This is so the notification message can get sent in the correct
language -- i.e. the user's language while they were a member.
|
| |
|
|
| |
list's preferred language. Closes SF #629616.
|
| |
|
|
|
| |
the name/address of the person being pending subscribed or subscribed,
as written to logs/subscribe.
|
| |
|
|
|
|
|
|
|
| |
whether the old variable names have been overridden in mm_cfg.py or
not. If not, use the new variable names.
ApprovedDeleteMember(): Don't check for isMember() here since
the removeMember() call will raise the appropriate NotAMemberError if
necessary. Besides MMNoSuchUserError is removed now.
|
| |
|
|
|
|
|
|
|
|
| |
the lock object. The real problem, as sleuthed out by Dan Mick, was
that the archiver i18n patches added a _mlist attribute to Article
objects, which caused the MailList instances to get pickled into the
*-article pickles.
See fixes to HyperArch.py and HyperDatabase.py for additional
important fixes.
|
| |
|
|
| |
based on whether the context is a Message or not.
|
| |
|
|
|
|
|
|
|
|
|
| |
constructor is changing. We no longer pass the sender in since that's
calculated to be the site list's -bounces address to prevent mail
loops when a list's owner bounces.
ApprovedAddMember(): Change the UserNotification to an
OwnerNotification for the admin_notif section.
Problem diagnosed by Peer Heinlein.
|
| |
|
|
| |
when the posting address is invalid.
|
| |
|
|
| |
on both pickling and unpickling, for legacy archive pickles.
|
| |
|
|
| |
fixes SF bug # 625516, but more testing needs to happen.
|
| | |
|
| |
|
|
|
|
| |
the admin_notify_mchanges notice. This also fixes the bug Chuq saw
where the notification message was sent to the list owners via a
roundtrip through the mta. We now send it directly to the owners.
|
| |
|
|
|
|
|
|
| |
message. This is especially the case when debugging your filtering
rules. To support this we now have a "filter action" which can be
Discard, Reject, Forward to Admin, Preserve on disk.
InitVars(): Set the default filter action.
|
| |
|
|
|
|
|
| |
posting address. If not, reject the proposed new list. We use
DEFAULT_EMAIL_HOST because at this point we don't know what the
host_name of the list is (and in fact the attribute isn't set), but it
doesn't matter anyway.
|
| |
|
|
|
| |
it's not there. It could be that all the interesting bits get
executed as a side effect of the execfile().
|
| |
|
|
|
| |
#593454 in that typed_subpart_iterator must be converted to a sequence
#for subscripting.
|
| |
|
|
| |
Also, whitespace normalization.
|
| |
|
|
|
| |
controls whether the Subject: prefix gets encoded when it's ASCII and
the list's preferred language uses a non-ASCII character set.
|
| |
|
|
|
|
| |
address is already a member and don't make the address change in that
case. However, if the old address is still a member, we'll just
delete it.
|
| |
|
|
| |
no limit.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
to the invitation notification. Also, set an `invitation' attribute
on the UserDesc record stored in the pending database. This is a hack
so that ProcessConfirmation() can figure out if the subscription
request was an invitation or not (easier than adding an INVITATION
type to the Pending module).
ApprovedAddMember(): Option text argument for passing in prepended
text for subscription notifications.
ProcessConfirmation(): If the SUBSCRIPTION action was an invitation
(based on the magic existance of the `invitation' attribute on the
UserDesc record), don't do additional approvals. If the user was
invited, we /know/ the admin had to approve of that!
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
dictionary mapping sender addresses (they don't have to be members) to
a 2-tuple of information (date, count). date is a 3-tuple of
(year, month, day) and count is the number of auto-responses sent to
the sender today.
autorespondToSender(): This method is called whenever we're about to
send a response to a -request message, or a hold notification. It
returns 1 if the caller should send a normal autoresponse, and 0
otherwise. When we've just exceeded the maximum number of
autoresponses, we send a message indicating that no more responses
will be sent today (instead of the normal autoresponse).
|
| |
|
|
| |
reversed, or lists created with 2.0.x won't migrate correct to 2.1b2.
|
| |
|
|
| |
it's obsolete now. Also, update some comments.
|
| |
|
|
|
|
| |
compare it to 2 and 3 (approval & approval+confirm). It's possible
the policy was changed in the middle of the confirmation process.
Reported by Dale Newfield.
|
| |
|
|
|
| |
List-Post: is added or not. Announce-only lists should set this to
"No".
|
| |
|
|
|
| |
found. The Topics gui will catch these for newly defined patterns,
but there may be some legacy topic patterns in the list config.
|
| |
|
|
|
| |
InitVars(): Add attributes filter_mime_types, filter_content, and
convert_html_to_plaintext.
|
| |
|
|
|
|
|
|
| |
situation got set: there's an empty (after stripping)
reply_to_address, and reply_goes_to_list is set to "explicit
address". This isn't a legal combination (but could have gotten this
way through legacy settings or bad bin/withlist manners), so reset
both values.
|
| | |
|
| |
|
|
| |
timestamp implies we're up-to-date. Otherwise our state gets zapped!
|
| |
|
|
| |
file doesn't exist. Need to catch that.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
changed since the last Load(). This means it will be cost effective
to reload the state when necessary in qrunners which don't lock the
list (e.g. OutgoingRunner). Specifically,
InitTempVars(): Set a temporary timestamp attribute, which gets the
mtime of the config.pck file upon successful load.
__save(): When we save the file, set the timestamp to the file's mtime
(we just saved it so it must be up-to-date -- since this is done with
the list lock acquired, there shouldn't be a race).
__load(): If the file's mtime is <= the current timestamp, then we've
got the most current state. This method can now return (None, None)
meaning we didn't need to load anything.
Load(): Watch for dict is None and e is None, meaning we didn't need
to load anything.
|
| |
|
|
|
|
|
|
|
|
|
| |
GetBouncesEmail(): Return the list's -bounces address.
GetAdminEmail(): Obsolete, removed.
AddMember(), ChangeMemberAddress(), ConfirmUnsubscription(): Make the
notification email appear to come from the -bounces address. When the
sender is for human consumption, make it the -owner address (or in the
case of Cleanse.py for anonymous lists, the list posting address).
|