diff options
| author | bwarsaw | 2006-05-08 02:06:11 +0000 |
|---|---|---|
| committer | bwarsaw | 2006-05-08 02:06:11 +0000 |
| commit | bda25c546ef3964a3772c8dc8a3eefdd592ebd31 (patch) | |
| tree | 55d46accf26b7192a0face80cf417111aea0c189 /bin | |
| parent | c46466663967674964c17ac33f31ce93079fa773 (diff) | |
| download | mailman-bda25c546ef3964a3772c8dc8a3eefdd592ebd31.tar.gz mailman-bda25c546ef3964a3772c8dc8a3eefdd592ebd31.tar.zst mailman-bda25c546ef3964a3772c8dc8a3eefdd592ebd31.zip | |
find_member converted.
Diffstat (limited to 'bin')
| -rw-r--r-- | bin/Makefile.in | 8 | ||||
| -rwxr-xr-x | bin/find_member | 184 |
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() |
