| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| | |
|
| |
|
|
|
| |
would make .HasExplicitDest() return true for every list with an empty
acceptable_aliases - fixed.
|
| |
|
|
| |
lists.
|
| |
|
|
|
|
|
|
| |
acceptable_aliases, which designate alternate account names by which
this system may be known. This will be useful for lists transitioning
from old names (eg, currently happening jpython -> jpython-interest)
and for cascading lists, ie lists that are legitemately included by
others...
|
| | |
|
| |
|
|
|
| |
StampedLogger for debugging output can choose to initialize it so that
failure is detectable, and thus can be handled in the program.
|
| |
|
|
| |
past the explicit-destination constraint).
|
| | |
|
| |
|
|
|
|
| |
go+rw-x!) for adm.pw to 0022 (u+rw, go+r). I'm a bit shaking about
this - think it's right, but seems like the original error is so odd
that i may be seeing something incorrectly...
|
| |
|
|
|
|
|
|
|
|
| |
when one of the addresses has no domain.
StampedLogger(): New option manual_reprime makes better for use as
sys.stderr substitute - says to put the timestamp only on first write
or writes just succeeding a .reprime() call - so the timestamp divides
separate multi-line entries. And in any case, write the
timestamp/label prefix on when at the beginning of a new line.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The listinfo page now presents a button to get there, and
authentication blanks when the list has a private roster of
subscribers. This entailed several changes in mm_html, including new
methods:
- .FormatEditingOption() - Bound to a form replacement to provide the
html for the options editing text. Conditionalized to mention the
ability to get to user options editing via the subscriber's roster,
depending on list privacy options.
- .FormatRosterOptionForUser() - Another routine called via text
replacements, inserts the text for visiting the roster according to
list privacy settings.
One nice side effect is that now private list members *can* see the
list membership over the web, via entering their authentication info.
(Only the admin can see the members of an anonymous list, but they can
do that via the web form.)
|
| |
|
|
|
|
|
|
|
|
|
| |
default), timestamps will only be included at beginning of new entries
after the first entry and after entries that are preceeded by a call
to the .reprime() method.
This is handy for when StampedLogger is used as a substitute for
sys.stderr, where you would like to see groups of entries collected
together in a single timestamp (and you often only have a single
group, for uncaught exceptions where the script is failing...)
|
| |
|
|
| |
location.
|
| | |
|
| |
|
|
|
|
|
|
|
|
| |
like 'who', that is getting an alternate list-name as an argument,
instructing sender to use the '-request' address for the list. (This
way we can make 'majordomo@site' an alias to, eg, mailman-request@site,
and get most of the majordomo@site behavior without implementing any
exceptional behavior...)
Add a module docstring, wrap a bunch of long lines.
|
| | |
|
| |
|
|
| |
(nondgested) is shown second
|
| |
|
|
|
| |
storage on the list.
them before presenting an ordered list.
|
| |
|
|
| |
them before presenting an ordered list.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
disabled, rather than removed, and (2) that option can be accompanied
by email to the admin, or not, but the removal option always entails
email to the admin. (Email to the admin was previously not
implemented, though there were options that were supposed to do it.)
Mostly implemented in new method, .HandleBouncingAddress(), which
dispatches to RemoveBouncingAddress() or DisableBouncingAddress().
Improve logging - more terse messages, but more comprehensive
coverage.
|
| |
|
|
|
|
|
| |
them before presenting an ordered list.
Do not pad subject prefix with a trailing space - but prepare the
default one with a trailng space.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
when the domain side of the at sign of one address properly contains
the domain in the other example.
Wrap DeliverToUser body in a os.fork, to prevent a deadlock which can
happen when, eg, a message bounces before message aceptance in
sendmail. Message bouncing early on in message acceptance by sendmail
means reporting to list admin address, which is itself actually a
mailman program, which uses the instantiated list as a agent, and
which requires the same lock that the invoking process is holding -
ie, deadlock
Sendmail's deliver-in-background option would be great for this, except
that the error processing for immediately recognized delivery problems
turns out to be handled in the foreground, regardless of the bg
delivery option.
|
| | |
|
| |
|
|
|
| |
introduced via the standard interface, or changed by finagling of one
sort or the other.
|
| |
|
|
| |
digestification status changes.
|
| |
|
|
|
|
|
|
|
| |
to make it easier to run it for just a specific list.
Added errorsto keyword args in delivery messages.
.MailUserPassword() accounts for corrupt accounts that lack any
passwords at all, sends a message to list admin when it observes that.
|
| | |
|
| |
|
|
|
| |
.ApprovedAddMember(): Do the .Save() before trying to send the
subscribe ack.
|
| |
|
|
|
|
|
|
|
| |
user account as an alternative to removal:
Option DEFAULT_MINIMUM_POST_COUNT_BEFORE_REMOVAL =>
DEFAULT_MINIMUM_POST_COUNT_BEFORE_BOUNCE_ACTION.
Option DEFAULT_AUTOMATICALLY_REMOVE => DEFAULT_AUTOMATIC_BOUNCE_ACTION.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
as an alternative to removal:
Option minimum_post_count_before_removal =>
minimum_post_count_before_bounce_action.
Option automatically_remove => automatic_bounce_action.
New method DisableBouncingAddress(), as alternative to
RemoveBouncingAddress().
|
| |
|
|
| |
italicizing their entry and putting it between parens.
|
| |
|
|
| |
with default setting.
|
| |
|
|
|
|
|
|
| |
concurrent mm_defaults.py checkin for details.
Moved basic logger functionality to mm_utils.Logger() and
particularly, .StampedLogger(), so it could be used outside of lists,
as well as within them via the LogMessage() routine.
|
| |
|
|
| |
concurrent mm_defaults.py checkin for details.
|
| |
|
|
|
|
|
|
| |
concurrent mm_defaults.py checkin for details.
Added FormatSubscriptionMsg(), which generates text describing the
current list's subscription approval, roster privacy, and post vetting
policies.
|
| |
|
|
|
|
|
| |
before the delivery, so the accumulated messages are not removed until
the first copies are about to be sent.
Refined digesting log messages.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
functionalities here.
Logger() and StampedLogger() routines provide file-like file logging
mechanisms. (I reimplmented the list .LogMsg() method based on this
routine.) This is implemented outside the list infrastructure so it
can be used for, eg, stderr substitution.
SendTextToUser() and DeliverToUser() implemented here likewise, so
they can be used outside list context (eg, when lists are broken...).
Made AddressesMatch not raise error when one of the address arguments
yields a null domain.
Moved comment about .FindMatchingAddresses() to be the function
docstring.
|
| |
|
|
|
| |
dispositions - for spam, it doesn't send email to poster, just
discards their posting.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
'closed' => 'private_roster'. 'Closed' was being used to control
whether the roster of list members was to be visible to non-list
members, but is used elsewhere (in mailman explanations for
subscription deferrals, as well as in majordomo and other maillist
system parlance) to refer to whether the subscription policy requires
admin approval or not.
'auto_subscribe' => 'open_subscribe'. This is the option that
controls whether or not the list is closed - 'open' is more clear than
'auto' - i would have switched to 'closed', but saw no need to have
the name refer to the *much* less common case, and didn't want to
change the default sense of the option.
Added listme.com to the roster of forbidden spam posters.
|
| |
|
|
|
|
|
|
| |
.DeliverToUser() methods to functions in mm_utils, so we can use them
outsid of lists, eg when we're unable to create lists, and then used
the functions in the body of the methods.
Refined subscribe-message text a bit.
|
| |
|
|
|
|
| |
maillist session. I was running out of file descriptors in the
extensive map_maillist() type activities. Not sure if it's the log
files, but it can't hurt.
|
| |
|
|
|
|
|
|
| |
sessions with lists, applies user specified routine to all of the
lists, or optionally, those lists with user-specified names. Optional
arg unlock says to unlocked immediately after instantiation, for
non-invasive actions. Optional arg verbose says to print list name
and result incrementally as they're handled.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
particular, "Don't remove, notify me" still *does* do the removal.
Sigh.
The right way to set this up will take some thought, but i think my
first cut fix will be, when this option is selected, to just disable
the user, and send a note to the admin. That way, the admin won't
just get extra notes accompanying continuing bounce results for the
user... I may get to this quick fix soon.
The long term (and fairly attractive) fix is to make a bounce-handling
subsystem which collects bounce messages and classifies them according
to a admin-configurable template, taking actions like disabling or
removing the user, notifying the admin, etc, when admin-configured
thresholds are reached. The admin interface could be handled very
like the admin-requests mechanism, with a page for bounce
administration and a periodic notice of pending bounce admin stuff.
|
| |
|
|
| |
In general, use .LogMsg() instead of arbitrary digest.log file.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Use a python-lib tempfile, instead of ginning one up distinguised by
pid. The problem with the old method is that the same process - eg,
senddigest - may be cycling through many lists, which means that all
the lists would use the same tempfile name. And deliver, having
opened the file for reading, would get it pulled out from under it
when, eg, senddigest got to having mm_deliver prepare digest for the
next list. tempfile.mktemp() specifically finds a filename that is
not in use.
I'm leaving in commented-out text for some special membership-
migration notices, for use later today or tomorrow, when i move over
the rest of the lists.
|
| |
|
|
| |
because it arrived broken?)
|
| | |
|