| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
release.
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
interoperability with Pipermail.
|
| |
|
|
| |
the one pointing to the list-admin.
|
| |
|
|
| |
string read from Web text box.
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
case-preserving way.
|
| | |
|
| |
|
|
| |
DictType.
|
| |
|
|
|
|
|
|
|
| |
mlist.digest_members dictionaries have already been converted to
lowercase-only keys, any key with a case-preserved value would have
been lost by being overwritten with 0. :-(
UpdateOldUsers(): Implement the mlist.passwords constraints fix. The
keys of this dictionary are now guaranteed to be lowercased.
|
| |
|
|
|
| |
Bump DATA_FILE_VERSION to 14 to trigger mlist.passwords dictionary fix
in versions.py
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
address case matching. These changes require the DATA_FILE_VERSION to
be bumped, which should auto-update your config.db files. I sure hope
this works correctly! Details of changes:
MailList.GetUserSubscribedAddress(): New method. If the address is a
member, this returns the case-preserved address the user is subscribed
with. If not a member, None is returned.
MailList.GetUserCanonicalAddress(): New method. If the address is a
member, this returns the lowercased address the user is subscribed
with. If not a member, None is returned.
MailList.FindUser(): Wrote down, in a big comment, the constraints for
the dictionaries self.members, self.digest_members, self.passwords.
This wasn't always followed, but now it should be. FindUser() is now
also guaranteed to return the lowercased version of the subscribed
email address. This wasn't always the case. FindUser() also provides
a shortcut for the common case.
ApprovedAddMember(): Guarantee that passwords stored in self.passwords
are keyed off the lowercased address.
Deliverer.MailUserPassword(): Find the user's password using the
lowercased version of their address. However, be sure to use their
case-preserved address for the recipient of the password email.
Digester.SetUserDigest(): Fixed a fairly old bug where a user
switching from regular to digest membership (or vice versa) would get
their case-preserved address blown away. I don't think there's any
way to recover this information, but at least now we properly save it.
SecurityManager.ConfirmUserPassword(): Simplified address matching
stuff, since we now guarantee that FindUser() will return a lowercased
address, and that the passwords dictionary has lowercased keys.
FindUser() will return None if the address isn't found, and it also
has a built-in shortcut so that the more expensive
FindMatchingAddresses() isn't called in the common case. I eliminated
the case-insensitive password comparision that Ken rightly questioned
in his comment.
admin.py: In the list of members, display a member's case-preserved
address instead of their lowercased address. Also, obscure the URL in
the hyperlink (probably not terribly necessary).
handle_opts.py: When the password can't be found (when emailing it),
put the address we tried to find in the result message. Makes for
better debugging.
options.py: Use a better mechanism for finding if the member has a
case-preserved address different from their lowercased address.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
"""
- It needlessly used the makefile() method for each response that is
read from the SMTP server.
- If the remote SMTP server closes the connection unexpectedly the
code raised an IndexError. It now raises an SMTPServerDisconnected
exception instead.
- The code now checks that all lines in a multiline response actually
contains an error code.
"""
The Dragon approves.
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
decide whether to use msg.GetEnvelopeSender() or not.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(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.
|
| |
|
|
| |
script which does a much better job of reporting the error.
|
| |
|
|
|
|
| |
made, we now change the `norcv' option to be `notmetoo'. This is
still backwards, but changing the sense of this option is to much work
right now. `norcv' is accepted as an alias for `notmetoo'.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
| |
user's address, which jumps you to their member info page.
Second, reorder the items in the table so that digest comes just
before plain. Didn't make sense to separate these two digest related
items.
|
| | |
|
| |
|
|
| |
letters.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
bottom" => "button at the bottom". Sounds somehow obscene the other
way, but nonetheless we'd like it to make sense.
While i was here i did a few *more* trivial things...
Using "not metoo" instead of "norcv" for member's status column
headings (and legend), to disambiguate from "nomail"! (I think i
recall "metoo" from things like /bin/mail, in any case, it's a lot
more descriptive of the intention.)
While i'm here i centered all the checkbuttons, which i think looks a
lot tidier.
|
| |
|
|
|
| |
changed the message so it only says it's at the bottom of the page
when it really is.
|
| |
|
|
| |
1.0b9
|
| |
|
|
| |
members table [and testing the emailing of this checkin message, as well].
|
| |
|
|
|
|
| |
on the page. (It should be available on the top, even more, but i
don't see how to do so without cluttering at the moment, and my
connection is so low band that i can't scope it out right now.)
|
| |
|
|
|
|
|
|
| |
posting is being rejected. (This enables them to explain the right
place to send administrivia, for example.)
((Barry - i know these are niggly little things - it's all i have time
for. I just want to mention that i'm really greatful that you've been
taking care of as much of the substantial stuff as you've been doing!))
|
| |
|
|
|
|
|
|
|
| |
occur for transient things, like procmail errors or "can't create
output".
In general i'm dubious about the immediate-removal class, and would
lean towards treating all bounces the same, with action on a
cumulative incidence, so any transient problems get time to be
fixed...
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
1 by default. This instructs the MailList.Post() method to use first
the envelope sender (i.e. Unix "From " line) and then the From:
header. However, this breaks member_only_posting on some systems (for
reasons unknown). Set this variable to 0 in mm_cfg.py to use only the
From: header, although this can open the list up to spam.
(MailList.py): in Post(), check USE_ENVELOPE_SENDER to see if
GetEnvelopeSender() should be called.
(FAQ): Add a question refering to USE_ENVELOPE_SENDER.
|
| |
|
|
| |
it's a string.
|
| |
|
|
| |
`general' category page. The others are just too noisy.
|
| |
|
|
|
|
|
|
|
|
|
| |
digest_members onto one_last_digest attribute. This attribute is
checked in SendDigest().
SendDigest(): Add the members in one_last_digest attribute to the
digest recipients. This means that folks who turn digests off at
least don't lose messages. This is a kludge but it was much harder to
send the digest to the user when they undigest, so this is a workable
compromise.
|
| |
|
|
| |
user may get one last digest.
|
| |
|
|
| |
whole message as <MM_Case-Preserved-User> replacement).
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
| |
user (if different than their lowercased address). This could be done
better if lists didn't have their own copies of options.html :-(
|
| |
|
|
|
| |
as their lowercased address, then the key in self.members is 0. Watch
out for this situation.
|
| |
|
|
|
| |
not post the message to Usenet) is now whether the msg object has an
attribute `fromusenet' and this attribute is true.
|
| |
|
|
|
|
|
|
|
| |
lowercased match. I think the idiom is
casepreservedaddr = mlist.members.get(self.FindUser(caseanyaddr))
This seems to fix the problem of getting your password mailed back to
you when you've subscribed with an uppercase username part.
|