| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
| |
Found by Juan Carlos Rey Anaya.
|
| |
|
|
|
|
|
|
|
| |
is retrieved out of the cgidata early on, so as to catch any new
language setting the user is making. Falls back to using the last
stored user preference.
Also, fixed indentation bug which prevented user's language setting to
take effect unless they had set some other option as well.
|
| |
|
|
| |
as translatable.
|
| |
|
|
|
|
| |
doc.suppress_head to 1. This is because the output generated from
this function comes largely from the options.html template, which
includes those tags.
|
| |
|
|
|
|
|
|
|
| |
David Champion (SF patch #401372).
add_error_message(): Default tag is now 'Error: ' which was the more
commonly used tag.
Globally, WEB_HEADERCOLOR => WEB_HEADER_COLOR
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
the need for the handle_opts.py script. Specifically,
main():
- Do all form processing in this script, and point the form's
action back at this script. This is so we don't need
handle_opts anymore.
- Protect access to this form behind a login screen which also
contains a password mail-back button, and a quick unsubscribe
(with confirmation) button.
- Use the new world order for web authentication, allowing
AuthUser, AuthListAdmin, and AuthSiteAdmin to access a user's
options page.
- Add a "logout" button to the option page, and remove any need to
enter passwords once we're at the options page.
- Add support for a change-of-address, including the ability to
change the membership address globally for all lists the user is
a member of (requires confirmation from the new address).
- Add support for global change of password.
- Add support for global setting of enable/disable flag, and of
password reminder flag.
- Use IsMember() to test for address membership.
Also, we don't need to pass the document background color as an
argument anymore. Other colors are no longer hardcoded, but taken
from mm_cfg.
|
| |
|
|
|
|
| |
password reminder for this list. Support is added for
<mm-dont-get-password-reminder-button> and
<mm-get-password-reminder-button> replacements.
|
| |
|
|
| |
background color to white when there's no such member.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
De-string-module-ification.
Fix some _() wrappings to use local variables.
At global module scope, set the language to the server's default,
until we know which mailing list this request is being made on.
main(): Set the document's language to the server's default,
until we know which mailing list this request is being made on. Then,
once we know the list, set the system and document languages to the
list's preferred, until we know the user making the request. Finally,
once we've got the user, set the system and document languages to the
user's preferred.
(get rid of os.environ['LANG'] settings)
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
| |
bomb with tracebacks if PATH_INFO environment variable wasn't defined.
Fixed this by making them all use Utils.GetPathPieces() and "doing
something sensible" when that returned a false value.
Also, edithtml is now hidden behind a login screen, so there's no need
to enter the list password to edit the html. You can't even get to
the list of files to edit unless you've admin authenticated. Closes
SF bug #114091, Jitterbug PR# 24.
|
| |
|
|
|
|
| |
up in the user link. This would be interpreted as additional path
components, so we need to join the user name components to get the
actual address.
|
| | |
|
| |
|
|
| |
syslog() interface.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
mailing list. In all cases, catch the base exception class
MMListError, and output HTML indicating the specified list doesn't
exist. A more detail message gets printed to logs/error (the str() of
the actual exception details).
Also:
admin.py - Don't catch MMBadConfigError around
mlist.parse_matching_header_opt() since this method doesn't ever
raise that exception. Actually, that exception isn't raised
anywhere in Mailman, so it's been removed.
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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's a string.
|
| |
|
|
| |
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 :-(
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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%-------------------------------------------
?
|
| | |
|
| |
|
|
|
|
| |
instead of just the domain part. this was preventing some users with
caps in their usernames from logging onto the options section
scott
|
| |
|
|
|
|
|
| |
the Mailman package (using the semi-bogus, but quickly implemented
from ... import style).
main()-ify, but needed a few bogus global decls
|
|
|
handle logging to an error file, and no longer import paths. Also,
any checks for __main__ have been removed.
|