summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorbwarsaw2006-05-08 02:06:11 +0000
committerbwarsaw2006-05-08 02:06:11 +0000
commitbda25c546ef3964a3772c8dc8a3eefdd592ebd31 (patch)
tree55d46accf26b7192a0face80cf417111aea0c189 /bin
parentc46466663967674964c17ac33f31ce93079fa773 (diff)
downloadmailman-bda25c546ef3964a3772c8dc8a3eefdd592ebd31.tar.gz
mailman-bda25c546ef3964a3772c8dc8a3eefdd592ebd31.tar.zst
mailman-bda25c546ef3964a3772c8dc8a3eefdd592ebd31.zip
find_member converted.
Diffstat (limited to 'bin')
-rw-r--r--bin/Makefile.in8
-rwxr-xr-xbin/find_member184
2 files changed, 4 insertions, 188 deletions
diff --git a/bin/Makefile.in b/bin/Makefile.in
index dbf6bc295..67ceef621 100644
--- a/bin/Makefile.in
+++ b/bin/Makefile.in
@@ -46,16 +46,16 @@ SHELL= /bin/sh
SCRIPTS= mmshell \
remove_members clone_member update \
- sync_members check_db withlist check_perms find_member \
+ sync_members check_db withlist check_perms \
config_list dumpdb cleanarch \
list_admins genaliases mailmanctl qrunner \
fix_url.py convert.py transcheck \
msgfmt.py discard \
reset_pw.py templ2pot.py po2templ.py
-LN_SCRIPTS= add_members arch change_pw inject list_lists list_members \
- list_owners mmsitepass newlist rmlist show_qfiles unshunt \
- version
+LN_SCRIPTS= add_members arch change_pw find_member inject list_lists \
+ list_members list_owners mmsitepass newlist rmlist \
+ show_qfiles unshunt version
BUILDDIR= ../build/bin
diff --git a/bin/find_member b/bin/find_member
deleted file mode 100755
index 0c5d8711d..000000000
--- a/bin/find_member
+++ /dev/null
@@ -1,184 +0,0 @@
-#! @PYTHON@
-#
-# Copyright (C) 1998-2003 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
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-"""Find all lists that a member's address is on.
-
-Usage:
- find_member [options] regex [regex [...]]
-
-Where:
- --listname=listname
- -l listname
- Include only the named list in the search.
-
- --exclude=listname
- -x listname
- Exclude the named list from the search.
-
- --owners
- -w
- Search list owners as well as members.
-
- --help
- -h
- Print this help message and exit.
-
- regex
- A Python regular expression to match against.
-
-The interaction between -l and -x is as follows. If any -l option is given
-then only the named list will be included in the search. If any -x option is
-given but no -l option is given, then all lists will be search except those
-specifically excluded.
-
-Regular expression syntax is Perl5-like, using the Python re module. Complete
-specifications are at:
-
-http://www.python.org/doc/current/lib/module-re.html
-
-Address matches are case-insensitive, but case-preserved addresses are
-displayed.
-
-"""
-
-import sys
-import re
-import getopt
-
-import paths
-from Mailman import Utils
-from Mailman import MailList
-from Mailman import Errors
-from Mailman.i18n import _
-
-AS_MEMBER = 0x01
-AS_OWNER = 0x02
-
-
-
-def usage(code, msg=''):
- if code:
- fd = sys.stderr
- else:
- fd = sys.stdout
- print >> fd, _(__doc__)
- if msg:
- print >> fd, msg
- sys.exit(code)
-
-
-
-def scanlists(options):
- cres = []
- for r in options.regexps:
- cres.append(re.compile(r, re.IGNORECASE))
- #
- # dictionary of {address, (listname, ownerp)}
- matches = {}
- for listname in options.listnames:
- try:
- mlist = MailList.MailList(listname, lock=0)
- except Errors.MMListError:
- print _('No such list: %(listname)s')
- continue
- if options.owners:
- owners = mlist.owner
- else:
- owners = []
- for cre in cres:
- for member in mlist.getMembers():
- if cre.search(member):
- addr = mlist.getMemberCPAddress(member)
- entries = matches.get(addr, {})
- aswhat = entries.get(listname, 0)
- aswhat |= AS_MEMBER
- entries[listname] = aswhat
- matches[addr] = entries
- for owner in owners:
- if cre.search(owner):
- entries = matches.get(owner, {})
- aswhat = entries.get(listname, 0)
- aswhat |= AS_OWNER
- entries[listname] = aswhat
- matches[owner] = entries
- return matches
-
-
-
-class Options:
- listnames = Utils.list_names()
- owners = None
-
-
-def main():
- try:
- opts, args = getopt.getopt(sys.argv[1:], 'l:x:wh',
- ['listname=', 'exclude=', 'owners',
- 'help'])
- except getopt.error, msg:
- usage(1, msg)
-
- options = Options()
- loptseen = 0
- excludes = []
- for opt, arg in opts:
- if opt in ('-h', '--help'):
- usage(0)
- elif opt in ('-l', '--listname'):
- if not loptseen:
- options.listnames = []
- loptseen = 1
- options.listnames.append(arg.lower())
- elif opt in ('-x', '--exclude'):
- excludes.append(arg.lower())
- elif opt in ('-w', '--owners'):
- options.owners = 1
-
- for ex in excludes:
- try:
- options.listnames.remove(ex)
- except ValueError:
- pass
-
- if not args:
- usage(1, _('Search regular expression required'))
-
- options.regexps = args
-
- if not options.listnames:
- print _('No lists to search')
- return
-
- matches = scanlists(options)
- addrs = matches.keys()
- addrs.sort()
- for k in addrs:
- hits = matches[k]
- lists = hits.keys()
- print k, _('found in:')
- for name in lists:
- aswhat = hits[name]
- if aswhat & AS_MEMBER:
- print ' ', name
- if aswhat & AS_OWNER:
- print ' ', name, _('(as owner)')
-
-
-
-if __name__ == '__main__':
- main()