[Mailman-Developers] Re: [Mailman-Users] admin requests on the lists

Scott scott@chronis.pobox.com
Fri, 13 Nov 1998 14:24:26 -0500


Ok, here's a better version.  fixes the readlines thing, and strips the sig.

#
# given an IncomingMessage object,
# test for administrivia (eg subscribe, unsubscribe, etc).
# the test must be a good guess -- messages that return true
# get sent to the list admin instead of the entire list.
#
def IsAdministrivia(msg):
    lines = map(string.lower, string.split(msg.body, "\n"))
    #
    # check to see how many lines that actually have text in them there are
    #
    admin_data = {"subscribe": (0, 3),
                  "unsubscribe": (0, 1),
                  "who": (0,0),
                  "info": (0,0),
                  "lists": (0,0),
                  "set": (2, 3),
                  "help": (0,0),
                  "password": (2, 2),
                  "options": (0,0),
                  "remove": (0, 0)}
    lines_with_text = 0
    print lines
    for line in lines:
        if string.strip(line):
            lines_with_text = lines_with_text + 1
        if lines_with_text > 30: # we might want to change this to mm_cfg.DEFAULT_MAIL_COMMANDS_MAX_LINES.
            return 0
    sig_ind =  string.find(msg.body, "\n-- ")
    if sig_ind != -1:
        body = msg.body[:sig_ind]
    else:
        body = msg.body
    if admin_data.has_key(string.lower(string.strip(body))):
        return 1
    try:
        if admin_data.has_key(string.lower(string.strip(msg["subject"]))):
            return 1
    except KeyError:
        pass
    for line in lines[:5]:
        if not string.strip(line):
            continue
        words = string.split(line)
        if admin_data.has_key(words[0]):
            min_args, max_args = admin_data[words[0]]
            if min_args <= len(words[1:]) <= max_args:
                return 1
    return 0


scott


On Fri, Nov 13, 1998 at 08:18:32PM +0100, Gergely Madarasz wrote:
| Hello!
| 
| I think I found it.
| In IsAdministrivia:
|     lines = map(string.lower, msg.readlines())
| This returns the whole message, and then checks for administrivia in it,
| including the headers. Some mailers add custom headers, mta-s add Received
| headers, so we cannot tell how many header lines there can be. And then it
| checks 
| 	if lines_with_text > 10:
| headers will be counted too. So I guess this should be modified to check
| only the body of the message. Now I increased this number to 30, should
| work in most cases, but this is only a hack... :)
| 
| -- 
| Madarasz Gergely           gorgo@caesar.elte.hu         gorgo@linux.rulez.org
|       It's practically impossible to look at a penguin and feel angry.
|           Egy pingvinre gyakorlatilag lehetetlen haragosan nezni.
|                     HuLUG: http://mlf.linux.rulez.org/
| 
| 
| _______________________________________________
| Mailman-Developers maillist  -  Mailman-Developers@python.org
| http://www.python.org/mailman/listinfo/mailman-developers
|