| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
| |
printed in VERBOSE mode (i.e. running bin/arch). Print out a
message counter and the Message-ID: of the message being processed.
|
| |
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
| |
the thing we muck about with is a concrete list object.
|
| |
|
|
|
| |
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.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
- 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.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
| |
know whether to create virtual-<domain> files. Defaults to 0.
|
| |
|
|
| |
the list moderators).
|
| | |
|
| |
|
|
|
| |
so bouncing MTAs won't be tempted to delivery bounces there (and those
headers won't contain the VERPed response address).
|
| |
|
|
| |
listname-bounces alias.
|
| |
|
|
|
|
|
|
|
| |
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)
|
| |
|
|
| |
dictionary, translate `reason' through i18n.
|
| |
|
|
|
| |
regular expressions, and provide a link to Python's re module
documentation.
|
| |
|
|
|
|
| |
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).
|
| |
|
|
|
|
| |
the i18n string interpolation. Also, rewrite the MMBadConfirmation
message, since they may be confirming something other than a
subscription request.
|
| |
|
|
|
|
| |
translatable strings here just need to be marked as such, using the
identity _() function. They'll always get translated before they're
used.
|
| |
|
|
|
|
| |
also allows "extended email addresses", really just regular
expressions, which must start with a ^ (otherwise it's taken as a
literal address).
|
| | |
|
| |
|
|
|
| |
Consults VERP_DELIVERY_INTERVAL to decide whether to set the `verp'
metadata key.
|
| |
|
|
|
| |
this because I want to create a flow chart later to give a better
description of the details.
|
| |
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| | |
|
| |
|
|
|
| |
then set the `verp' flag in the message metadata. This will signal
the SMTPDirect module to VERP this message delivery.
|
| |
|
|
|
|
| |
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.
|
| |
|
|
| |
longer include the leading dash.
|
| |
|
|
| |
API so that the leading dash on extra shouldn't be included.
|
| |
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
| |
RegisterBounce(): The dirty flag wasn't used anywhere.
HandleBouncingAddress(): Utils.get_site_email()'s second argument
should no longer include the leading dash.
|
| |
|
|
|
| |
the admin database, otherwise it won't be in the list's preferred
language.
|
| |
|
|
|
| |
would be a duplicate of one in bin/newlist. Web version and email
version should have different entries in the message catalog.
|
| |
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
| |
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.
|
| |
|
|
| |
list exists before we try to write the template file.
|
| |
|
|
|
| |
explanation needs to be written to reflect the fact that password
inputs are not on the general optinos page anymore.
|
| | |
|
| | |
|
| |
|
|
|
| |
host matching. We simply need to find the lowercased hostname in the
web_page_url to find a match.
|
| |
|
|
|
| |
author line are always html-escaped. This fixes index summaries for
messages with html in their Subject: line for instance.
|
| |
|
|
| |
message is read back as a string.
|
| |
|
|
| |
escape text/html.
|
| |
|
|
|
| |
text/html as attachments and not HTML-escaping them. (The obvious ==
4 value isn't possible given Pipermail's current implementation).
|