| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| | |
|
| |
|
|
|
|
|
| |
part of the email command. This means "help" [sic] works and you
don't have to say:
Send the word "help" (sans quotes) to ...
|
| |
|
|
|
|
| |
can bomb out with MMAlreadyAMember if the address has already been
subscribed by some other mechanism after the pending confirmation
was registered. Catch this and reply politely.
|
| |
|
|
| |
member password mailed back -- if given with no arguments.
|
| |
|
|
|
|
|
|
|
| |
to be a per-line operation, done after addition of prefix.
AddError(): Use AddToResponse with the new `prefix' argument to make
sure the prefix is added to all the lines of the error message.
Added info on the `help' mail command to the response indicating
processing problems.
Quite a lot of buglet fixes and general cleanup.
|
| |
|
|
|
| |
lines is reached, inclusion of the rest of the original message was
being truncated (and was using a strange line prefix). Fixed.
|
| |
|
|
| |
SecurityManager raises when the user addr isn't on the list.
|
| | |
|
| |
|
|
|
| |
insensitive. Fixes the problem for Outlook wrapping the Subject
lines.
|
| |
|
|
|
|
|
|
|
|
| |
regexp matching against the confirmation line. This may have to be
further extended to ignore differences in whitespace (this was all
triggered by potential MS Outlook mungifications).
Second, if there /was/ an error, put the whole subject line on it's
own line in the error message. This'll make it easier to debug in the
future.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(option_descs, option_info): Provide much more detailed descriptions
of the options. Also changed `norcv' to `notmetoo' although the
former is still acceptable as an alias.
(options): New global to preserve the order that we want to display
the options in response messages. These options are in the same order
as shown on the membership management admin page. The user option
page still needs to be changed to support this order.
MailCommandHandler.__init__(): All private variables are fixed to
start with double underscore (e.g. __dispatch). Added an __errors
ivar to count the number of AddError() calls made. A different error
message format is now used, which should be much more concise, and
more informative information is provided at the head of error
messages.
AddToResponse(), AddError(): Both methods now take a final argument
`trunc' which says what column to truncate the text to. With trunc=0
no truncation (this is useful for when we use Utils.wrap() to wrap the
text). AddError() also now takes a prefix argument, increments
self.__error, and essentially calls AddToResponse().
ParseMailCommands(): Some stylistic changes. The line being processed
is not placed in the response buffer unless we know it is a valid
command. If it's an invalid command, we print the error message more
concisely.
When `end' is found, include in the response all the following lines
that are ignored.
If the number of errors exceeds 5, then stop processing the message
immediately (don't keep processing more lines).
If an unexpected error occurs with a valid command (one that is
dispatched), we catch this and include the traceback in the response
message. We also send the traceback to the list administrator -- I
wonder if this should be the mailman-owner??? We also log the
exception.
In the error preamble, include human contact information.
Several of the Process*Cmd()'s have been modified to work with this
new framework, and to provide much more meaningful response messages.
|
| |
|
|
| |
and password before parsing the arguments.
|
| |
|
|
|
|
|
| |
includes digest, so the check for the special handling of the digest
option was no longer working. I've reinstated that by explicitly
checking for that special case first, so now the mailcommand version
of digest setting is working.
|
| |
|
|
| |
routine had mail.GetSender()...
|
| |
|
|
|
|
|
|
|
| |
was getting called with the wrong arguments - confirmation of the old
password needed to be done in a separate call to
ConfirmUserPassword().
(Incidentally, i am hoping that i repaired a problem with the
mechanism that pushes the cvs source - this will test it.)
|
| |
|
|
| |
confirmations expire after the set number of days.
|
| |
|
|
| |
scott
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
fix and one addition. Sorry, i realized that too late.
This change adds another list conifg variable "admin_notify_mchanges",
which is a boolean 0 or 1 and specifies whether or not the list admin
gets notifications of subscriptions and unsubscriptions.
The functions MailList.DeleteMember and MailList.ApprovedAddMember
trigger the delivery if it is turned on for the list or passed in as
an optional argument. This way, it is the duty of programs/code that
do mass subscriptions/unsubscriptions where this notification may not
be appropriate to specify that in the call to .DeleteMember or
.ApprovedAddMember.
There are 2 new templates, adminsubscribeack.txt and
adminunsubscribeack.txt which are used in sending these
notifications.
Defaults.py.in has a variable "DEFAULT_ADMIN_NOTIFY_MCHANGES" which is
set to 0 so that old lists will act the same by default, and the data
version is up'ed to 12. versions.py sets the variable if it's not
already there for a list. The config info for the admin cgi program
for this new variable is set right after the variable for immediate
notifications.
The second change is a fix where ApprovedAddMember was calling a
"self.Save()", which made mass subscribe situiations really far too
slow. I removed the .Save() from there and added it to the more outer
level code in the following places:
bin/convert_list
Mailman/ListAdmin.py
Mailman/MailCommandHandler.py
Mailman/Cgi/admin.py
Note that since AddMember can trigger a call to ApprovedAddMember, all
the places where AddMember is called needed a .Save() added as well.
I need to add a call to .Save() for Mailman/Cgi/subscribe.py as well
and will do that in a moment.
scott
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
dicts instead of lists, which optimizes Utils.FindMatchingAddresses
and general membership management, especially for large lists.
MailList.py now supplies .GetMembers() and .GetDigestMembers() to
supply the data in list form to anything that needs it that way.
An new install showed this worked fine with some cursory testing of
the cgi's and interactive poking around.
A detailed listing of the changes follows:
Mailman/Defaults.py.in: change data version to 11
Mailman/Digester.py: initvars now instantiates digest_members as {}
instead of []
lines 113-114 and 121-122 now use del
This change implements storing list members and digest members as
dicts instead of lists, which optimizes Utils.FindMatchingAddresses
and general membership management, especially for large lists.
MailList.py now supplies .GetMembers() and .GetDigestMembers() to
supply the data in list form to anything that needs it that way.
Though INSTALL shows up on the changed files section, a diff a few
seconds ago didn't show any differences in that file, so I hope nobody
changed it in the interim.
An new install showed this worked fine with some cursory testing of
the cgi's and interactive poking around.
A detailed listing of the changes follows:
Mailman/Defaults.py.in: change data version to 11
Mailman/Digester.py: initvars now instantiates digest_members as {}
instead of []
lines 113-114 and 121-122 now use del
list.[digest_]member instead of
list.[digest_]members.remove
when figuring who to actually send digests to,
use list.GetDigestMembers() instead of
list.digest_members.
Mailman/HTMLFormatter: now uses list.Get[Digest]Members to get
subscribers, and length of digested subscribers
and regular members
MailCommandHandler, SecurityManager,Cgi/handle_opts, Cgi/options: all
simple replacements of list.[digest_]members with
list.Get[Digest]Members().
Mailman/Cgi/admin.py: mostly simple replacements of
list.[digest_]members with the Get..() methods, however, the
membership management section now works much quicker and changes
digest->nodigest subscriptions via dictionary manipulations.
Mailman/versions.py: updates lists to use dicts and changed
list.[digest_]members to use the list.Get[Digest]Members() methods.
Mailman/Utils.py: added a function "GetPossibleMatchingAddresses"
which when fed an address, returns the list of addresses that "smart"
address matching would match.
changed FindMatchingAddresses(name, list) to use a new signature:
FindMatchingAddresses(name, *dicts), where dicts is a list of
dictionaries keyed by addresses. Just realized that this would better
be FindMatchingAddresses(name, dict, *dicts) so that it enforces
atleast 2 args... I'll make that change in a sec.
All uses of FindMatchingAddresses have been changed to fit the new
arguments.
scott
----:**-F1 cvs30458aaa 1:12PM 0.98 Mail (Text Fill)--L59--32%-------------------------------------------
?
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
was in (which was largely my fault from before).
Before:
1) web_subscribe_requires_confirmation was showing in the
admin cgi, but not working.
2) all subscribes that required admin approval were going
through the confirmation process.
3) the code implementing the confirmation process was
distributed between the subscribe cgi and
MailCommandHandler, duplicated in places and disrupting
the previous interface to list.AddMember.
4) the open_subscribe variable was confusing because
it didn't pay any attention to confirmations.
Now, things are organized a little differently, but in a much cleaner
way. there is one variable that deals with subscription policy, called
"subscribe_policy". It's setting determines what happens with both
the web based and the mail based subscriptions. there are 4 options:
0 - open subscribe policy
1 - confirmation required
2 - admin approval required
3 - confirmation and then admin approval required
there is a site configuration variable in Defaults.py called
ALLOW_OPEN_SUBSCRIBE, which determines whether or not an open
subscribe policy is an option. If it's not, the admin cgi interface
does not present it as an option.
I have restored a slightly modified version of the
prior-to-confirmations interface for list.AddMember, where all you
have to code is:
try:
list.AddMember(email, digest, password)
except Errors.MMBadEmail:
except Errors.MMAlreadySubscribed:
[ ... all those other good things it used to check ...]
except Errors.MMSubscribeNeedsConfirmation:
# the confirmation has already been sent.
# so just report accordingly to whatever the ap is.
In addition, I have moved the code for processing a confirmation
request to MailList.py so that it can be used in both a confirmation
cgi (which does not yet exist, but will) and the mailcmd script.
it's interface is:
try:
list.ProcessConfirmation(cookie)
except Errors.MMBadConfirmation:
# the cookie doesn't correspond to anything
except Errors.MMNeedApproval:
# the list is set to approve+confirm subscribe_policy.
A listing of the changes to the files follows:
Mailman/Defaults.in: added ALLOW_OPEN_SUBSCRIBE,DEFAULT_SUBSCRIBE_POLICY
deleted DEFAULT_OPEN_SUBSCRIBE, changed
DATA_FILE_VERSION to 5
Mailman/Errors.py: added MMBadConfirmation and
MMSubscribeNeedsConfirmation
Mailman/MailCommandHandler.py: moved the confirmation code to
MailList.py and use the new (old)
list.AddMember interface
MailMan/MailList.py: added .ProcessConfirmation(cookie), changed
AddMember to fit new (old) interface.
deleted config info for open_subscribe
and replaced with config info for
subscribe_policy that acts according to
mm_cfg.ALLOW_OPEN_SUBSCRIBE. Also made
list.ApprovedAddMember's "noack"
argument just "ack" for simplicities
sake and made it default to None
instead of 0 so that if the ack
variable isn't passed, it sets it to
the value of the lists
.send_welcome_msg setting.
Mailman/versions.py: added handling for new data file format,
replacing open_subscribe with a reasonable value
for subscribe_policy based on a combination of
what open_subscribe is and what
mm_cfg.ALLOW_OPEN_SUBSCRIBE is set to.
Mailman/Cgi/admin.py: made the cgi handle the output and processing of
subscribe_policy based on the setting of
mm_cfg.ALLOW_OPEN_SUBSCRIBE.
removed erroneous processing of whether or not
to send an ack with mass subscription based on
new interface to list.ApprovedAddMember (this
processing is to be replaced with a good idea
from john -- making mass subscribe have it's own
option of whether or not to send welcome
messages).
Mailman/Cgi/subscribe.py: made backgrounds white, and made it use the
MailList.AddMember interface described
above.
Mailman/Makefile.in: looks like this part of that distclean patch from
NAGY didn't make it in yet (rm'ing mm_cfg.py as well
as Defaults.py)
scott
|
| |
|
|
|
| |
to stop processing of .sigs
scott
|
| |
|
|
|
| |
- and log a message in the new log file, "mischief" indicating the
error and, if available, the identity of the host where it originated.
|
| |
|
|
|
|
| |
(Large, misdirected mail commands can lead to near-thrash conditions,
while the MailCommandHandler slogs through misguidedly trying to
process too many lines...)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
the constraints. (It looks like .FinishSubscribe() was made for this
purpose, but not used anywhere! Perhaps it was used but someone
inadvertantly switched away from it. I changed the location of the
definitions to reflect .FinishSubscribe()'s subordinate role.
Also, adapted to new version of verify.txt.
.FinishSubscribe(): added option for running AddApprovedMember, so
this routine can be used for both kinds of Add*Member. Also, fixed
crashing NameError reference in MMNeedApproval case. Also, logging
error details in case where unrecognized disposition exception is
encountered.
Added docstrings to help distinguish the relationship of
.ProcessSubscribeCmd() and .ProcessConfirmCmd()
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
into the confimation-expression pattern, to prevent regex-significant
characters in maillist names from tripping-up the regex compiler.
This really can happen - in fact, it does when people try to subscribe
to the "c++-sig"!
(I've cursorily checked through the python stuff in scripts, Mailman,
and Mailman/Cgi for other interpolations that might trip re.compile,
but didn't find any other instances. Be on the lookout, though, this
is a tricky one...)
(This was present in 1.0b4, as well, and i believe it accounts for two
elusive, outstanding problems:
- the "pcre.error : ('nothing to repeat', 2)" traceback, which i
mentioned on my recent "problems" list, and
- reports i've gotten (one this morning, coincidentally) of failures
in subscribing to c++-sig.)
I'm going to deliver a patch for 1.0b4 to the newsgroup, once i track
down a few other problems.)
|
| |
|
|
|
|
|
| |
particularly to avoid the inevitable duplication in the subject and
body, common for other mlm's, where people forget whether it's the
subject or the body that has effect. In mailman, it's both - but now,
not for duplicates.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
already-subscribed members. (The prior checkin was for web-based
subscription attempts.)
NOTE that both these already-subscribed actions can constitute privacy
leaks - someone could venture subscription attempts with addresses
which they are trying to test for already-existing membership - and
this response will provide unequivocal confirmation in the cases when
the addresses are subscribed.
One possible remedy is to send the refusal to the address being
subscribed. This way the person taking the action gets no additional
info unless they have access to the subscribees email channel.
Problem with this is that it complicates the mail-command refusal
process substantially, since it's currently geared, very simply, to
send the refusal to the requesting address. Do we think the privacy
leak is important enough to fill this hole?
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
| |
interface.
MailCommandHandler.ProcessConfirmCmd(): Near the bottom of the method,
where self.AddRequest() is called on a closed list, wrap the call in a
try/except so as to catch the MMNeedApproval exception that gets
raised.
John, please verify that I'm doing this right.
|
| |
|
|
|
|
|
| |
Removed RCS crud
Help text moved into templates/*.txt file, but there are still a few
TQS's to convert left.
|
| |
|
|
|
| |
relative paths, mainly GetScriptURL->the appropriate replacement.
Now I'm done w/ checkins, and I'm going to test the current snapshot.
|
| |
|
|
|
|
|
|
| |
dunno what changed there. In mm_mailcmd, I fixed a bug w/ Scott's
code, so that if a reply comes back with no body, the confirm still
works. I don't know why he was checking the body and not just the
header for the pattern, but I left that check in there in case he
had a good reason.
|
| |
|
|
| |
in pending...
|
| | |
|
| |
|
|
|
|
|
| |
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?)
|
| | |
|
| |
|
|
|
|
|
|
| |
mailer-daemon, postmaster, orphanage, postoffic) - they're almost
certainly delivery-failure notices.
I'm going to poll the mailman-developers list for suggestions about
refinements to this approach.
|
| |
|
|
|
|
|
|
|
| |
mailer-daemon, postmaster, orphanage, and postoffice - on the
presumption that they're failed subscribe instructions, bouncing back
to the -request addr.
I think this'll take care of that sticky problem fairly safely.
Nobody should be sending commands from those accounts, anyway...
|
| | |
|
| |
|
|
| |
the description a bit more tidily.
|
| |
|
|
| |
Correct typo "succeded".
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
| |
concurrent mm_defaults.py checkin for details.
|
| |
|
|
|
|
|
|
| |
"Sender:" lines are being bounced to the -request addr, and then being
treated as a bad request. This needs to be examined and solved, but
in the meanwhile i'm adding some info (the subject line) to the
"subject line ignored" line, so we get some more cues to go on when
things go awry.
|