| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
| |
subject text, which contains the robot command "confirm" should
not be translated, otherwise MailCommandHandler will break.
Reported by Daniel Buchmann.
|
| | |
|
| |
|
|
|
|
| |
to stop processing immediately. This in effect provides for the
recognition of temporary problem bounce messages which shouldn't
RegisterBounce(), but /should/ discard the message.
|
| | |
|
| |
|
|
|
|
|
|
| |
TypeError, but only ValueError was being caught. This means stray
%'s can still crash Mailman.
Also, when interpolation fails, instead of using [INVALID FOOTER],
return the raw footer text template.
|
| |
|
|
| |
options. Caught by Ben Gertzfield.
|
| | |
|
| |
|
|
|
|
|
| |
mailto: to their personal email address. Instead, hyperlink the
lot of them with a mailto: to the list's -owner address. That
let's us do a spam detect on the message before forwarding on the
owners.
|
| | |
|
| |
|
|
|
|
|
| |
be properly configured in mm_cfg.py.
process(): Don't support the header == None semantics (it was broken
anyway). We may have to add this back later.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
_toadmins(): Run the message through SpamDetect to filter out known
spam patterns in messages to the list owners/moderators. Log such
detected spam to logs/spam and discard the message.
Also, for every message to a list's -owner or -admin address, we
always send it on to the list owners and moderators, even though
the moderators can't access the admin pages (only the admindb
pages).
Note 1: this makes the `tomoderators' key in the message metadata
obsolete.
Note 2: this may not be the Right Thing To Do.
|
| |
|
|
| |
_doperiodic().
|
| |
|
|
|
|
|
| |
allow deletion of list by anybody with a valid cookie
authentication. We /want/ to force the admin to enter the
password explicitly, as an extra confirmation step, so use
Authenticate() instead.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
host_name attributes based on the calculated values.
web_page_url's host name comes from get_domain() interpolated into
DEFAULT_URL_PATTERN, while host_name comes from a lookup in the
VIRTUAL_HOSTS table, defaulting to get_domain() if not found.
Also, we're now responsible for saving the list, and once we've
done so, we can unlock it and do the rest of the task (which
doesn't require the lock, so can be done outside the
try/finally).
|
| |
|
|
|
|
|
|
|
| |
DEFAULT_HOST_NAME to get the hostname.
Also, do the same kind of virtual host filtering for the admin
overview as we do in the listinfo overview. This more clearly
separates the virtual domains (there perhaps should be a site
overview).
|
| |
|
|
|
|
|
|
|
|
| |
DEFAULT_URL_PATTERN and interpolate in the calculated web-request
based host name (via get_domain()). This should improve vhost
support.
get_site_email(): Calculate hostname by looking up get_domain()
results in VIRTUAL_HOSTS, defaulting to get_domain() if no vhost
information was set.
|
| |
|
|
|
|
|
| |
I.e. don't catch and transform OSErrors to MMUnknownListErrors.
Also, don't do a Save() here. The caller is now responsible for
saving the list.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
VIRTUAL_HOSTS is a dictionary mapping url base hostnames to email base
hostnames. E.g. "mail.python.org" -> "python.org". When a new list
is created, we attempt to ascertain the web host from the web request.
We use that for web_page_url and then we look it up in VIRTUAL_HOSTS
to find host_name. If not found, we use the same host for
web_page_url and host_name.
DEAFULT_EMAIL_HOST is now the preferred way to specify the default
email host_name. It is set by configure to @FQDN@.
DEFAULT_URL_HOST is now the preferred way to specify the default host
for web_page_url. It is set by configure to @URL@.
DEFAULT_URL_PATTERN is how to convert DEFAULT_URL_HOST to
web_page_url. It must contain a single %s expansion.
For backwards compatibility, DEFAULT_HOST_NAME = DEFAULT_EMAIL_HOST
and DEFAULT_URL = DEFAULT_URL_PATTERN % DEFAULT_URL_HOST.
Also, added another commented out MAILMAN_URL mirror.
|
| |
|
|
| |
to point at the recipient instead of the list.
|
| |
|
|
| |
header munging.
|
| |
|
|
| |
multiline individual strings.
|
| |
|
|
| |
respond_to_post_requests
|
| |
|
|
|
| |
"administrator". Add a VARHELP link to member_posting_only when
describing "Restrict..." in the posters option
|
| |
|
|
|
|
|
|
|
|
| |
general#passwords section, and to the `moderator' option where
appropriate.
Likewise for `moderator' option.
Also, dont_respond_to_post_requests => respond_to_post_requests
and switch the polarity of the No/Yes radio.
|
| |
|
|
|
|
|
| |
this is ugly, but it makes the job much easier for translators of
certain languages.
Also say "list moderator" instead of "list administrator".
|
| |
|
|
|
|
|
| |
invalid.
password_inputs(): Add a <a name...> tag here so we can create a
<a href="general#passwords"> link directly to this section.
|
| | |
|
| |
|
|
| |
dont_respond_to_post_requests => respond_to_post_requests change.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
| |
binary radio options as "No" then "Yes", we had to change the
polarity of dont_respond_to_post_requests. Rename the option
respond_to_post_requests and use versions to update the attribute
and value.
AddMember(): In HoldSubscription() call, the local variable `name'
holds the user's full name, not `fullname'. Also say "moderator"
instead of "administrator".
|
| |
|
|
|
|
|
| |
this is ugly, but it makes the job much easier for translators of
certain languages.
Also, consistancy for strings which have similar messages.
|
| |
|
|
| |
integer since that's what MemberAdaptor eventually wants.
|
| | |
|
| |
|
|
|
| |
__checkone(): Likewise, if the secret isn't a string, return 0
(i.e. no the user isn't authenticated).
|
| |
|
|
|
|
|
|
| |
the evictions dictionary too.
_save(): Go through and delete any evictions keys which don't appear
in the pending dictionary (i.e. we're cleaning up after ourselves
due to the above bug).
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
kept as a bitfield value in user_options, even though there's an
mm_cfg.Digests `flag'. So special case asking for this option by
checking the `where' value returned by __get_cp_member().
addNewMember(): Similarly, there's no point in setting user_options to
mm_cfg.Digests if the member wants to receive digests, since the
state of that flag is kept elsewhere.
setMemberOption(): More of the same; we can always return from the "if
flag == Digests" clause without touching user_options.
|
| |
|
|
|
|
| |
UserDesc constructor. Previously, we were assigning the password
to the fullname, and the digest to the password, so users were
ending up with a password of the integer 0. Very bogus.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
getMemberPassword(user). First, we assert that the user is a
member because there should be no way to get here if that's not
the case. Second, it is a nasty bug if the user does not have a
valid password, but one that the list administrator really can do
little about. Instead, if the user is found to have a `false'
password, we simply assign them a new one, which is fine because
they're asking for their password now, so we'll just ship them the
new one.
This means we no longer need templates/*/nopass.txt, soon to be
deleted. It also means that we won't raise MMBadUserError here,
which is fine because the caller never checked for that exception
anyway. ;)
|
| |
|
|
|
| |
delete the `filebase' key. That should be enough to update it to
version 3.
|
| |
|
|
|
|
| |
`explicit' but the reply_to_address is invalid.
Also, include some notes about better RFC 2369 support...
|
| | |
|
| |
|
|
| |
non-breaking. Also, consistency in capitalization.
|
| | |
|
| |
|
|
|
|
|
|
| |
Language gui module. We'll group it with the available_languages
option.
Also, fix the category description so that it isn't specified as
two adjacent strings, but instead one TQS.
|
| |
|
|
|
|
|
|
|
|
| |
when creating the mailing list. A checkbox array is displayed that
contains all the server-supported languages, with the
DEFAULT_SERVER_LANGUAGE checked by default. List preferred language
still needs to be chosen after-the-fact through the admin pages (it
defaults to DEFAULT_SERVER_LANGUAGE).
process_request(): Make sure that the list name isn't the empty string!
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Make sure most tables have an explicit width of 100%, otherwise
vertical Checkboxes cause the table to be squashed.
show_results(): Split the "Configuration Categories" unordered list
into two columns. Still not perfect, but better than having 11
members in one column on the left.
"Edit the HTML for the public list pages" => "Edit the public HTML pages"
get_item_gui_value(): Handle the new Checkbox widget.
get_valid_value(): If widget type is Email, only attempt to validate
the value if it is not the empty string. This fixes SF bug
#219571, which prevented the reply_to_address field from being
cleared.
Also, teach this about the Checkbox widget type. Make sure that
the value is a list. It'll be a scalar if exactly one of the
checkboxes is selected, but we always treat it as a list.
change_options(): When calling get_valid_value(), catch any
EmailAddressErrors that can occur due to hostile or otherwise bad
email addresses in the reply_to_address field. Print an error
message in that case.
add_error_message(): Change the way the `tag' argument is defaulted,
so we can translate the default value.
|
| |
|
|
| |
NewVars(): Add available_languages attribute if missing.
|
| |
|
|
|
|
|
|
| |
boxes (i.e. multiple selections). Refactor RadioButtonArray class
into new base class WidgetArray which contains most of the logic.
RadioButtonArray and CheckBoxArray inherit from WidgetArray.
map(None, ...) => zip(...)
|
| |
|
|
| |
attribute.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
used anywhere anymore.
InitVars(): Added the available_languages attribute which will hold
the list of language codes supported by this mailing list.
Create(): Take an extra optional argument `langs' which holds a list
of language codes that the mailing list should initially support.
Default this to the list's preferred language (which in turn
defaults to DEFAULT_SERVER_LANGUAGE).
Save(): I don't think we need IsListInitialized() any more.
Load(): Removed the _ready attribute.
IsListInitialized(): Removed.
GetAvailableLanguages(): Don't key the list of available languages off
the subdirectories in lists/<mylist>. The tiered-template lookup
only requires those directories to exist if there are site
customizations of the templates. Instead, return the value of
self.available_languages, but with DEFAULT_SERVER_LANGUAGE forced
as a member.
|