aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xNEWS3
-rwxr-xr-xbin/list_members34
2 files changed, 32 insertions, 5 deletions
diff --git a/NEWS b/NEWS
index 60377a98..72c1582e 100755
--- a/NEWS
+++ b/NEWS
@@ -9,6 +9,9 @@ Here is a history of user visible changes to Mailman.
New Features
+ - bin/list_members now has options to display all moderated or all
+ non-moderated members.
+
- There is now a mm_cfg.py setting GLOBAL_BAN_LIST which is like the
individual list's ban_list but applies globally to all subscribe
requests. See the description in Defaults.py for more details.
diff --git a/bin/list_members b/bin/list_members
index cb574081..8995acf2 100755
--- a/bin/list_members
+++ b/bin/list_members
@@ -1,6 +1,6 @@
#! @PYTHON@
#
-# Copyright (C) 1998-2003 by the Free Software Foundation, Inc.
+# Copyright (C) 1998-2016 by the Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -48,6 +48,12 @@ Where:
Output member addresses case preserved the way they were added to the
list. Otherwise, addresses are printed in all lowercase.
+ --moderated / -m
+ Print just the moderated members. Ignores -r, -d, -n.
+
+ --non-moderated / -M
+ Print just the non-moderated members. Ignores -r, -d, -n.
+
--invalid / -i
Print only the addresses in the membership list that are invalid.
Ignores -r, -d, -n.
@@ -62,9 +68,8 @@ Where:
listname is the name of the mailing list to use.
-Note that if neither -r or -d is supplied, both regular members are printed
-first, followed by digest members, but no indication is given as to address
-status.
+Note that if neither -r or -d is supplied, regular members are printed first,
+followed by digest members, but no indication is given as to address status.
"""
import sys
@@ -154,6 +159,8 @@ def main():
fullnames = False
invalidonly = False
unicodeonly = False
+ moderatedonly = False
+ nonmoderatedonly = False
# Throw away the first (program) argument
args = sys.argv[1:]
@@ -200,10 +207,22 @@ def main():
kind = opt[i+1:]
if kind not in ('mime', 'plain'):
usage(1, _('Bad --digest option: %(kind)s'))
+ elif opt in ('-m', '--moderated'):
+ moderatedonly = True
+ if nonmoderatedonly or invalidonly or unicodeonly:
+ usage(1, _('Only one of -m, -M, -i or -u may be specified.'))
+ elif opt in ('-M', '--non-moderated'):
+ nonmoderatedonly = True
+ if moderatedonly or invalidonly or unicodeonly:
+ usage(1, _('Only one of -m, -M, -i or -u may be specified.'))
elif opt in ('-i', '--invalid'):
invalidonly = True
+ if moderatedonly or nonmoderatedonly or unicodeonly:
+ usage(1, _('Only one of -m, -M, -i or -u may be specified.'))
elif opt in ('-u', '--unicode'):
unicodeonly = True
+ if moderatedonly or nonmoderatedonly or invalidonly:
+ usage(1, _('Only one of -m, -M, -i or -u may be specified.'))
else:
# No more options left, push the last one back on the list
args.insert(0, opt)
@@ -241,7 +260,7 @@ def main():
rmembers = mlist.getMemberCPAddresses(rmembers)
dmembers = mlist.getMemberCPAddresses(dmembers)
- if invalidonly or unicodeonly:
+ if invalidonly or unicodeonly or moderatedonly or nonmoderatedonly:
all = rmembers + dmembers
all.sort()
for addr in all:
@@ -251,6 +270,11 @@ def main():
showit = True
if unicodeonly and isunicode(addr):
showit = True
+ if moderatedonly and mlist.getMemberOption(addr, mm_cfg.Moderate):
+ showit = True
+ if nonmoderatedonly and not mlist.getMemberOption(addr,
+ mm_cfg.Moderate):
+ showit = True
if showit:
print >> fp, formataddr((safe(name), addr))
return