diff options
-rw-r--r-- | Mailman/Bouncers/DSN.py | 28 | ||||
-rw-r--r-- | Mailman/Cgi/options.py | 5 | ||||
-rw-r--r-- | Mailman/Cgi/private.py | 2 | ||||
-rwxr-xr-x | Mailman/Defaults.py.in | 4 | ||||
-rw-r--r-- | NEWS | 5 | ||||
-rw-r--r-- | bin/mailmanctl | 2 | ||||
-rwxr-xr-x | messages/ja/doc/Defaults.py.in | 7 |
7 files changed, 19 insertions, 34 deletions
diff --git a/Mailman/Bouncers/DSN.py b/Mailman/Bouncers/DSN.py index b316c696..06edc5b0 100644 --- a/Mailman/Bouncers/DSN.py +++ b/Mailman/Bouncers/DSN.py @@ -35,7 +35,7 @@ except NameError: -def check(msg): +def process(msg): # Iterate over each message/delivery-status subpart addrs = [] for part in typed_subpart_iterator(msg, 'message', 'delivery-status'): @@ -86,29 +86,3 @@ def check(msg): realname, a = parseaddr(a) rtnaddrs[a] = True return rtnaddrs.keys() - - - -def process(msg): - # We've seen some fairly bogus DSNs, allegedly from postfix that are - # multipart/mixed with 3 subparts - a text/plain postfix like part, a - # message/delivery-status part and a message/rfc822 part with the original - # message. Deal with it as follows. - if (msg.is_multipart() and len(msg.get_payload()) == 3 and - msg.get_payload()[1].get_content_type() == 'message/delivery-status'): - return check(msg.get_payload()[1]) - # A DSN has been seen wrapped with a "legal disclaimer" by an outgoing MTA - # in a multipart/mixed outer part. - if msg.is_multipart() and msg.get_content_subtype() == 'mixed': - msg = msg.get_payload()[0] - # The above will suffice if the original message 'parts' were wrapped with - # the disclaimer added, but the original DSN can be wrapped as a - # message/rfc822 part. We need to test that too. - if msg.is_multipart() and msg.get_content_type() == 'message/rfc822': - msg = msg.get_payload()[0] - # The report-type parameter should be "delivery-status", but it seems that - # some DSN generating MTAs don't include this on the Content-Type: header, - # so let's relax the test a bit. - if not msg.is_multipart() or msg.get_content_subtype() <> 'report': - return None - return check(msg) diff --git a/Mailman/Cgi/options.py b/Mailman/Cgi/options.py index 3a3b7841..641ec134 100644 --- a/Mailman/Cgi/options.py +++ b/Mailman/Cgi/options.py @@ -144,7 +144,7 @@ def main(): doc.set_language(language) if lenparts < 2: - user = cgidata.getfirst('email') + user = cgidata.getfirst('email', '').strip() if not user: # If we're coming from the listinfo page and we left the email # address field blank, it's not an error. Likewise if we're @@ -161,11 +161,12 @@ def main(): # If a user submits a form or URL with post data or query fragments # with multiple occurrences of the same variable, we can get a list # here. Be as careful as possible. + # This is no longer required because of getfirst() above, but leave it. if isinstance(user, list) or isinstance(user, tuple): if len(user) == 0: user = '' else: - user = user[-1] + user = user[-1].strip() # Avoid cross-site scripting attacks safeuser = Utils.websafe(user) diff --git a/Mailman/Cgi/private.py b/Mailman/Cgi/private.py index 7112c6c4..731e2d19 100644 --- a/Mailman/Cgi/private.py +++ b/Mailman/Cgi/private.py @@ -119,7 +119,7 @@ def main(): cgidata = cgi.FieldStorage() try: - username = cgidata.getfirst('username', '') + username = cgidata.getfirst('username', '').strip() except TypeError: # Someone crafted a POST with a bad Content-Type:. doc.AddItem(Header(2, _("Error"))) diff --git a/Mailman/Defaults.py.in b/Mailman/Defaults.py.in index fabd95bd..3350f278 100755 --- a/Mailman/Defaults.py.in +++ b/Mailman/Defaults.py.in @@ -1171,7 +1171,9 @@ DEFAULT_DMARC_QUARANTINE_MODERATION_ACTION = Yes # Default action for posts whose From: address domain has a DMARC policy of # reject or quarantine. See DEFAULT_FROM_IS_LIST below. Whatever is set as -# the default here precludes the list owner from setting a lower value. +# the default here precludes the list owner from setting a lower value, however +# an existing list won't be changed until the first time "Submit Your Changes" +# is pressed on the list's Privacy options... -> Sender filters page. # 0 = Accept # 1 = Munge From # 2 = Wrap Message @@ -38,6 +38,11 @@ Here is a history of user visible changes to Mailman. - Implemented use of QRUNNER_SLEEP_TIME for bin/qrunner --runner=All. (LP: #1818205) + - Leading/trailing spaces in provided email addresses for login to private + archives and the user options page are now ignored. (LP: #1818872) + + - Fixed the spelling of the --no-restart option for mailmanctl. + 2.1.29 (24-Jul-2018) Bug Fixes diff --git a/bin/mailmanctl b/bin/mailmanctl index dcaac05c..cb6e649d 100644 --- a/bin/mailmanctl +++ b/bin/mailmanctl @@ -311,7 +311,7 @@ def main(): global quiet try: opts, args = getopt.getopt(sys.argv[1:], 'hnusq', - ['help', 'no-start', 'run-as-user', + ['help', 'no-restart', 'run-as-user', 'stale-lock-cleanup', 'quiet']) except getopt.error, msg: usage(1, msg) diff --git a/messages/ja/doc/Defaults.py.in b/messages/ja/doc/Defaults.py.in index f347ea7e..1c1d3255 100755 --- a/messages/ja/doc/Defaults.py.in +++ b/messages/ja/doc/Defaults.py.in @@ -20,7 +20,7 @@ # [訳註] このファイルは、Mailman 2.1.29 配布物に含まれる # Mailman/Defaults.py.in (launchpad.net でのファイルの Bazaar -# リビジョンは 1808) のコメント部分を日本語 (共通語) に翻訳したものです。 +# リビジョンは 1812) のコメント部分を日本語 (共通語) に翻訳したものです。 # 配布等の条件は原文と同様、GNU 一般公衆利用許諾契約書 (GNU # General Public License) に従います (上記も参照ください)。内容の # 正確な理解のためには、配布物に含まれる原文を参照されることを @@ -1300,7 +1300,10 @@ DEFAULT_DMARC_QUARANTINE_MODERATION_ACTION = Yes # From: のアドレスのドメインが拒否(reject)または隔離(quarantine)の # ポリシーであったときの既定の動作。下の DEFAULT_FROM_IS_LIST を # 参照してください。ここで設定した既定値よりも低い値をリスト管理者が -# 設定しても有効にはなりません。 +# 設定しても有効にはなりません。ただし、すでに作成されているリストで +# この既定値を変更した結果によって新たに既定値未満の設定値になったものは、 +# リスト設定の プライバシー・オプション... -> 送信フィルタ のページで +# 「変更を送信する」が押されるまではこの変更は反映されません。 # 0 = 許可(Accept) # 1 = From を書き換え(Munge From) # 2 = メール内に添付(Wrap Message) |