Hi,

(I'm sending this to -users because this seems like a user question.  If this
is more appropriate to send to -workers, my apologies.  I can resend.)

I'm having trouble getting the pipe filter source working.  In my incoming
filter I have the following:

        pipe "~/bin/tmda-fingerprint -q" accept

I use TMDA fingerprints on all of my outgoing email.  That program checks
the fingerprint and if it matches, it returns 0 exit status.  This allows me
to send myself email without being in my own whitelist (*).  I've attached
a copy of the tmda-fingerprint program.

As far as I can tell, the tmda-fingerprint works and correctly returns the
status that it's supposed to.  But I can't seem to get this to work in TMDA.
I sent myself an email, and it ended up going into pending:

        Date: Thu Mar 4 12:08:32 EST 2004
        XPri: [EMAIL PROTECTED]
        Sndr: [EMAIL PROTECTED]
        From: Mark Horn <[EMAIL PROTECTED]>
          To: [EMAIL PROTECTED]
        Subj: testing 5
        Actn: CONFIRM pending 1078420112.13638.msg

Now, when I take that message and send it through my program here's what
I get:

        $ cat .tmda/pending/1078420112.13638.msg | bin/tmda-fingerprint -q
        $ echo $?
        0
        $

So, it looks to me like it's performing like it should.  What am I doing
wrong?

Thanks,
- Mark

(*) I get a lot of spam that uses my email address as both the from and
    to address.  Which means that I need something more reliable in determing
    if I really sent myself email.  I could do this a number of different
    ways, I just like this way.
#!/usr/bin/env python
#
# Copyright (C) 2001,2002 Jason R. Mastaler <[EMAIL PROTECTED]>
# Modifications made by Mark Horn to make a fingerprint checker
#
# This file is part of TMDA.
#
# TMDA 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.  A copy of this license should
# be included in the file COPYING.
#
# TMDA 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 TMDA; if not, write to the Free Software Foundation, Inc.,
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

"""Tag and send outgoing messages.

Usage:  %(program)s [OPTIONS] 

OPTIONS:
        -h
        --help
           Print this help message and exit.

        -V
        --version
           Print TMDA version information and exit.
           
        -c <file>
        --config-file <file>
           Specify a different configuration file other than ~/.tmda/config.

        -H
        --header
           The message will be sent to standard output with an additional
           header (X-TMDA-Fingerprint-Match) set to "Yes" if the fingerprints
           match and "No" if they don't.
           
"""

import getopt
import os
import sys

try:
    import paths
except ImportError:
    # Prepend /usr/lib/python2.x/site-packages/TMDA/pythonlib
    sitedir = os.path.join(sys.prefix, 'lib', 'python'+sys.version[:3],
                           'site-packages', 'TMDA', 'pythonlib')
    sys.path.insert(0, sitedir)

from TMDA import Version

header = None
quiet = None
program = sys.argv[0]

def usage(code, msg=''):
    print __doc__ % globals()
    if msg:
        print msg
    sys.exit(code)
    
try:
    opts, args = getopt.getopt(sys.argv[1:],
                               'c:VhHq', ['config-file=',
                                               'version',
                                               'help',
                                               'header',
                                               'quiet'])

except getopt.error, msg:
    usage(1, msg)

for opt, arg in opts:
    if opt in ('-h', '--help'):
        usage(0)
    if opt == '-V':
        print Version.ALL
        sys.exit()
    if opt == '--version':
        print Version.TMDA
        sys.exit()
    elif opt in ('-c', '--config-file'):
        os.environ['TMDARC'] = arg
    elif opt in ('-H', '--header'):
        header = 1
    elif opt in ('-q', '--quiet'):
        quiet = 1

from TMDA import Defaults
from TMDA import Cookie
from TMDA import Util


import email
import string

msgout = email.message_from_file(sys.stdin)
orig_msgout_as_string = msgout.as_string()
orig_msgout_size = len(orig_msgout_as_string)
orig_msgout_body_as_raw_string = Util.body_as_raw_string(msgout)

orig_fingerprint = msgout.get("X-TMDA-Fingerprint")

if header:
    del msgout['X-TMDA-Fingerprint-Match']
 
if Defaults.FINGERPRINT:
    hdrlist = []
    for hdr in Defaults.FINGERPRINT:
        if hdr == 'body':
            hdrval = orig_msgout_body_as_raw_string
        else:
            hdrval = msgout.get(hdr)
        if hdrval:
            hdrlist.append(hdrval)
    if hdrlist:
        new_fingerprint = Cookie.make_fingerprint(hdrlist)
    if orig_fingerprint == new_fingerprint:
        if header:
            msgout['X-TMDA-Fingerprint-Match'] = "Yes"
        elif quiet:
            sys.exit(0)
        else:
            print "Fingerprints match"
            sys.exit(0)
    else:
        if header:
            msgout['X-TMDA-Fingerprint-Match'] = "No"
        elif quiet:
            sys.exit(-1)
        else:
            print "Fingerprints don't match"
            sys.exit(-1)

print msgout
_____________________________________________
tmda-users mailing list ([EMAIL PROTECTED])
http://tmda.net/lists/listinfo/tmda-users

Reply via email to