#!/opt/bin/python ## ## $Id: grep_members.py,v 1.6 2003/07/11 01:10:38 dgc Exp $ ## ## grep_members.py greps owners instead of members if argv[0] ## contains "owner". ## import sys import getopt import string import mailman import re from Mailman.MailList import MailList from Mailman.Utils import list_names self = sys.argv[0] members = {} r = None s = None i = 1 check_owners = 0 # otherwise, members show_all = 0 invert = 0 errors = 0 if len(sys.argv) == 1 or sys.argv[1] == "-h" or sys.argv[1] == "--help": print "usage: %s [!] regex [list [...]]" % (sys.argv[0]) print " %s [!] = address [list [...]]" % (sys.argv[0]) sys.exit(4) if (re.search("owner", sys.argv[0])): check_owners = 1 if sys.argv[i] == "!" or sys.argv[1] == '-': invert = 1 i = i + 1 if sys.argv[i] == "=": s = sys.argv[i+1] i = i + 2 elif sys.argv[i] == ".": show_all = 1 i = i + 1 else: r = re.compile(sys.argv[i], re.IGNORECASE) i = i + 1 if len(sys.argv) > i: names = sys.argv[i:] else: names = list_names() names.sort() if (invert and show_all): sys.exit(0) # ! . is no matches all the time for lname in names: try: m = MailList(lname, lock=0) except: print "%s: no list named %s" % (sys.argv[0], lname) errors = 1 continue if (check_owners): namelist = m.owner else: namelist = m.members.keys() + m.digest_members.keys() namelist.sort() for name in namelist: if (show_all): print lname + ": " + name elif (r == None): # use string matching if (invert ^ (name == s)): print lname + ": " + name else: # use regex matching if (r.search(name)): didmatch = 1 else: didmatch = 0 if (invert ^ didmatch): print lname + ": " + name if errors: sys.exit(10) sys.exit(0)