| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| | |
|
| |
|
|
| |
treated like all the other scripts now.
|
| |
|
|
|
|
|
|
|
| |
run(): After once through the loop, look at the freshen flag and if
true, clear the cache. Thus all subsequent MailList objects will get
updated state, but we'll gain the performance benefits of the cache
for each iteration the the big loop.
_open_list(): Return this function to its original state.
|
| |
|
|
|
| |
_open_list(): If we've pulled the list object from the cache, then
freshen the state by re-Load()-ing it.
|
| |
|
|
|
|
|
|
| |
class knows to reload the state when pulling the object from the
cache. Hmm, why do we even have a cache now?
_dispose(): Don't do the `verp' key calculation here; it's done
earlier and better in the ToOutgoing.py handler.
|
| |
|
|
|
|
|
| |
and VERP_DELIVERY_INTERVAL. We used to do this in OutgoingRunner, but
that was inconvenient due to the latter never freshing the state of
MailList objects (that's fixed, but this is still a better place to
set this key).
|
| |
|
|
|
|
|
|
|
| |
paths.py.in file. The problem is that even for Python 2.2, we need
site-packages to appear /before/ the standard library so that we can
pick up the newer version of the email package. Defaults.py/mm_cfg.py
is usually imported to late in the game to work, but paths.py is about
right (although we'll have to audit the command line scripts to make
sure they import paths.py before they import email.*).
|
| |
|
|
|
|
|
| |
the language that the message should be in. This allows us to get the
character set and header encodings right.
Patch by Ben Gertzfield.
|
| |
|
|
|
|
|
|
| |
UserNotification message object, pass in the language that the message
should be in. This allows us to get the character set and header
encodings right.
Patch by Ben Gertzfield.
|
| |
|
|
|
|
|
| |
pass in the language that the message should be in. This allows us to
get the character set and header encodings right.
Patch by Ben Gertzfield.
|
| |
|
|
| |
Pychecker. Removed some unused local variables.
|
| |
|
|
|
|
|
| |
object, pass in the language that the message should be in. This
allows us to get the character set and header encodings right.
Patch by Ben Gertzfield, with modifications by Barry.
|
| |
|
|
|
|
|
|
|
|
|
| |
message object, pass in the language that the message should be in.
This allows us to get the character set and header encodings right.
Note that in the former method, we try to set the language to the
forwarding address, if it is a member of the list. If not, the list's
preferred language will be used.
Patch by Ben Gertzfield, with modifications by Barry.
|
| |
|
|
|
|
|
|
| |
creating the UserNotification message object, pass in the language
that the message should be in. This allows us to get the character
set and header encodings right.
Patch by Ben Gertzfield.
|
| |
|
|
|
|
|
|
| |
When creating the UserNotification message object, pass in the
language that the message should be in. This allows us to get the
character set and header encodings right.
Patch by Ben Gertzfield.
|
| |
|
|
|
|
|
|
| |
creating the UserNotification message object, pass in the language
that the message should be in. This allows us to get the character
set and header encodings right.
Patch by Ben Gertzfield.
|
| |
|
|
|
|
|
| |
charset information can be propagated into the headers, if necessary.
Use the new mimelib/email package's Charset and Header classes.
Patch by Ben Gertzfield. Requires email 0.97.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
ourselves. Given the incompatible state of BDB libraries on most
modern Linux distros, and given the sorry state of affairs in Python's
BDB wrappers, this is the only sensible solution.
Essentially, I've kept all the plain text (data/aliases and
data/virtual-mailman) update code, and then we just call postalias and
postmap on the files to get the .db counterparts regenerated. This
should be foolproof since only Postfix itself needs to use consistent
libraries -- attempting to match Postfix and Python would be a
nightmare.
I don't believe we're opening ourselves up to any vulnerabilities by
using os.system() in this case.
Also: all functions which are not meant to be part of the public MTA
interface are now prefixed by a single underscore.
I'm too tired to give detailed changes...
|
| |
|
|
|
|
| |
the plain text aliases and virtual-mailman files to their .db
counterparts. This will be /much/ less fragile than direct BerkeleyDB
hacking. See accompanying change to Postfix.py.
|
| |
|
|
|
| |
operating case insensitively w.r.t. the member key. Coerce the member
argument to lower case before it's used.
|
| |
|
|
|
|
| |
GetLangSelectBox() call for the <mm-list-langs> replacement, otherwise
a user's option page will always reset the user's language to the
list's preferred language.
|
| |
|
|
|
| |
delivery_status attributes when deleting a member. Don't call
setBounceInfo() directly.
|
| |
|
|
|
|
| |
removeMember() -- which is eventually called by ApprovedDeleteMember()
should to any necessary cleanup of the bounce info. Found by Dan
Mick.
|
| | |
|
| | |
|
| |
|
|
| |
directory.
|
| |
|
|
| |
refusal messages. Use the same default as in __handlepost().
|
| | |
|
| |
|
|
| |
catch it and return false.
|
| | |
|
| |
|
|
|
|
| |
members with bounce info. This overlaps w/ getDeliveryStatusMembers()
since it will return members who have bounced, but have not yet
reached the disable threshold.
|
| |
|
|
|
| |
sitedir to sys.path instead of appending it. This means our email
package will override the one in Python 2.2.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
administrator has adjusted the threshold (inspired by Dan Mick).
Specifically,
ZEROHOUR_PLUSONEDAY: New constant that is supposed to represent the
day containing the first midnight after the epoch. We'll add (0,)*6
to this tuple to get a value appropriate for time.mktime().
_BounceInfo.reset(): New method to encapsulate resetting stale bounce
scores. Also used in the constructor.
registerBounce(): Implement refined rules for setting and checking the
bounce score. As described in a message to mailman-developers:
1) are we a member? No, return
2) do we have previous bounces? No, register it, skip to step 7
3) is the member disabled? yes, return
4) is the bounce info from today? yes, don't increment, skip to step 7
5) is the info stale? yes, reset it and skip to step 7
6) increment score for today's bounce
7) is score > threshold? yes, disable 'em.
disableBouncingMember(): Refactor since cron/disabled can call this
method too now.
__sendAdminBounceNotice(): msg argument can now be a Message instance
or a string. Wrap in a MIME* instance as appropriate.
|
| |
|
|
| |
"raise NotImplemented".
|
| |
|
|
| |
declared global.
|
| |
|
|
|
|
|
|
|
|
| |
MessageParseError during parsing of the message. Most likely cause is
because of bad MIME encapsulation. /That's/ likely caused by the
message being a virus <wink>.
Disposition depends on QRUNNER_SAVE_BAD_MESSAGES. When true, the
message text is saved in qfiles/bad. When false, it is discarded. We
always log the error.
|
| |
|
|
|
| |
not making it to the end of the try ought to be morally equivalent to
an aborted transaction.
|
| |
|
|
| |
the queue directory to inject to, defaulting to qfiles/in.
|
| |
|
|
|
|
| |
QRUNNER_SAVE_BAD_MESSAGES. The latter controls what Mailman should do
when it encounters a parse error on the email message (likely because
of bad MIME encapsulation, itself likely because it's a virus).
|
| |
|
|
|
| |
return a generator, which doesn't have a pop() method. Always convert
it to a concrete list object first.
|
| |
|
|
|
|
| |
trick Python into potentially revealing too much information. So
instead of using the MailList's __dict__ and removing known sensitive
entries, we create a whitelisted dict with only known safe entries.
|
| | |
|
| |
|
|
|
|
|
|
| |
__opendb(): Catch EOFError that marshal.load() could throw. In that
case, log the error and blow away the old database.
__closedb(): A more robust save of the requests.db file. Save to a
temp file first and then atomically os.rename() it to the real file.
|
| |
|
|
| |
that key is obsolete.
|
| |
|
|
|
| |
form data, because that key is obsolete. In change_options(), removed
Scott's way old comment since I think it's no longer applicable.
|
| |
|
|
|
| |
member_moderation_action and member_moderation_notice. Also, add a
separator for "Member filters" vs. "Non-member filters".
|
| |
|
|
| |
member_moderation_notice.
|
| |
|
|
| |
member_moderation_action and member_moderation_notice.
|
| |
|
|
| |
member_moderation_notice.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
possible to assign an action to the flag, which ought to work better
for e.g. announce-only lists. Specifically,
process(): If we're looking at a member and that member has their
moderation flag turned on, then we look at
mlist.member_moderation_action. This is a 3-way selector specifying
whether the message should be held for approval, rejected (bounced),
or discarded. There's also a member_moderation_notice attribute which
includes text to send back to the member when their posting is
automatically rejected (WIBNI we could include that text in any held
or discard notification? Too much code disruption to do that right
now).
|