| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
variable (admin_member_chunksize). this is not yet settable by means
of cgi, but you can set it at an interactive python session. This is
a start on making the membership management part of the admin cgi
scalable for really big lists.
details:
* up'd DATA_FILE_VERSION in Mailman/Defaults.py.in
* replaced ADMIN_MEMBER_CHUNKSIZE with DEFAULT_ADMIN_MEMBER_CHUNKSIZE in
Mailman/Defaults.py.in.
* added a list variable assignment in Mailman.MailList.InitVars
* added code to add the admin_member_chunksize attribute to a list
when versions change in Mailman/versions.py
* made admin.py format members according to
list.admin_member_chunksize instead of mm_cfg.ADMIN_MEMBER_CHUNKSIZE
scott
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
is editable via the admin cgi to turn the filter on and off.
I'm sure that the filter could catch more things, but it will have
less false positives than majordomo anway :)
a listing of the specific changes follows:
Defaults.py.in changed data file version and added
DEFAULT_ADMINISTRIVIA
Utils.py added a function IsAdministrivia(msg) that does the filtering
replaced re.sub with string.replace(much faster) in
(Un)ObscureEmail.
MailList.py: added the config info for the administrivia variable, and
made the post method check it if the list has the
variable set.
versions.py: make new lists have an administrivia variable
scott
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
list members. I have yet to look at handling of -admin addresses.
Also, there is a configurable variable in Defaults.py that allows the
site admin to decide whether or not to do "smart address matching" -
where scott@chronis.pobox.com matches scott@pobox.com as the same
address (these addresses are in reality different addresses ;).
A listing of the changes to the files follows:
Defaults.py.in - added SMART_ADDRESS_MATCH variable and a short
description, defaulting to 1.
MailCommanHandler: removed string.lower(address) in
processSubscribeCmd and replaced it with
Utils.LCDomain(address)
MailList.py: made AddMember and ApprovedAddMember use
Utils.LCDomain(address) instead of string.lower(address)
Utils.py: got rid of top level domain listing and commented out
corresponding code in ValidEmail since it seems clear that
we have no intention of using this anymore.
added LCDomain(address) which lowercases only the domain
part of an address if there is a domain part.
made AddressesMatch use LCDomain instead of string.lower,
made it check LCDomain(addr1) == LCDomain(addr2) if
mm_cfg.SMART_ADDRESS_MATCH is set to 0, and do the match it
used to do if that variable is set to 1.
scott
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
ditto for Utils.SendTextToUser.
rearranged OutgoingQueue so that
1) it sets a global lock to only allow on queue run at a time
2) enqueueMessage puts a queue entry in an active state
2) the queue run only processes messages in a deferred state
or messages that are in an active state but stale
3) it has a deferMessage interface. which is now used by Utils.TrySMTPDelivery
It now keeps track of the state of a q entry by means of file metadata - if the
qfile is setuid, it's in active state, if it's not it's in deferred state.
scott
|
| |
|
|
| |
expressed, and log failures to smtp-failures.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
or else failures, like bad local recipients, would remain on the queue
forever, and cause repeat deliveries. (I believe this is part of the
problem behind the repeats we're seeing - but i'm not convinced it's
all of it.)
To fix, i made it so only partcicular exceptions - currently
socket.error, for absent SMTP listener - cause items to be left on
queue. Otherwise it falls through to a blanket except which discards
the item, leaving a note in the error log to that effect.
*** I think where the info should go back to the maillist structure,
to, e.g., disable the recipient, or whatever. However, this is
happening in a forked process, so we cannot use an exception, and the
routine itself doesn't, and shouldn't know which the list is.
|
| |
|
|
|
| |
on the end of the last line of wrapped text; watch out for whitespace
at the front of split lines.
|
| | |
|
| |
|
|
| |
There's a new crontab entry that checks the queue once every 30 mins.
|
| |
|
|
|
|
| |
SendTextToUser() no longer has a raw argument and no longer calls
wrap() in any way. maketext() has a raw argument, default to zero,
which if true skips the call to wrap() on the interpolated text.
|
| |
|
|
| |
Mailman.Logging package
|
| |
|
|
|
|
| |
maketext(): New function which takes a template file name and a
dictionary, reads the template from mm_cfg.TEMPLATE_DIR and
interpolates the dictionary into the string.
|
| | |
|
| |
|
|
|
| |
needed to get back to http://xxxx/mailman/ based on the PATH_INFO
environment variable.
|
| |
|
|
| |
being wrapped was the same as the column parameter.
|
| |
|
|
|
|
| |
Note that it does have one problem... If you have cookies off, you
have to log in every time, plus your changes don't take effect!
That definitely needs to be fixed.
|
| |
|
|
|
| |
Note that I'm using my smtplib right now, and not the one that comes
w/ Python 1.5. That should probably be changed.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
wrap(): New function which implements the wrapping and filling
algorithm, as described in the function's docstring. After talking it
over with Guido and Ken, this seemed like the best compromise for
ensuring that emailed messages to users look okay, when their MUAs
don't auto-wrap.
SendTextToUser(): Added optional argument raw which defaults to zero
(meaning by default, wrap and fill as per the rules in wrap()). When
raw=1, no wrapping or filling of the text argument is performed.
While Ken thinks that wrapping/filling should be turned off by
default, I think there are many more cases where the text should be
wrapped and filled than not, so this go'round tries to minimize code
changes. If the consensus is to invert the default value, we can make
that change after grep'ing the code.
|
| | |
|
| |
|
|
|
|
|
| |
do so.
Added a copy of the GNU GPL.
Added information about mailman-users in README, and reworded some text in there (made the credits less verbose... perhaps they should move to a credits file?)
|
| |
|
|
| |
is doing the right thing right off the bat.
|
| |
|
|
| |
another.
|
| |
|
|
|
|
| |
domain among those iterated among valid_toplevels. Depending on
ensuing discussion on the mailman-developers list, i'll probably cut
this out completely.
|
| | |
|
| |
|
|
|
| |
lacking. Otherwise, multiple ones will glom (were gloming) together
on a single line.
|
| |
|
|
|
|
|
|
|
|
|
| |
quotes - eg, gordon_o'hara@vanguard.com - was losing the quote when
passed on the command line to sendmail. Fixed by doing a repr() of th
recipient, so eg gordon_o\'hara@vanguard.com was being passed - and
accepted properly by sendmail.
Now i think i have to do the same thing with scripts/deliver, sigh -
it'd be good to get the direct SMTP based mechanism in, but i didn't
have time to work it through, uncover the ramifications...
|
| |
|
|
| |
__version__ info.
|
| |
|
|
|
| |
headers to a add_headers optional arg - a list for headers like
Errors-To and X-No-Archive.
|
| |
|
|
|
| |
StampedLogger for debugging output can choose to initialize it so that
failure is detectable, and thus can be handled in the program.
|
| |
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
| |
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...)
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
| |
maillist.py.
Moved abstract description part of comment before ValidEmail in as a
docstring. (We need more and decent docstrings in this code!!)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
transforming email addresses so they're not apparent to web spiders,
therefore not scrapable by spammers.
The UnobscureEmail transformation should work like an identity
function on already-unobscured addresses, so it can be used with
impunity.
The routines should be used as functional interface to address
obscuring, so the scheme can be changed transparently to the rest of
the system, just by changing the routines. This should make it easy
to up the ante in the thwarting of spammers, if this catches on.
|
| |
|
|
| |
744) so group can get in created directories.
|
| |
|
|
|
|
|
|
| |
development have access, also. More importantly, zero the umask
before actually creating the dir (and restore it afterwards), so the
permissions are exactly as specified,
Also wrapped a long line.
|
| | |
|
| |
|