[FrontPage] [TitleIndex] [WordIndex]

tmda-fingerprint

#!/usr/bin/env python
#
# Copyright (C) 2001,2002 Jason R. Mastaler <jason@xxxxxxxxxxxx>
# 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.

        -p
        --procmail
           Use with procmail. 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)
    sys.path.insert(0,'/usr/local/src/tmda')
    sys.path.insert(0,'/usr/local/src/tmda/TMDA')

from TMDA import Version

procmail = 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:Vhp', ['config-file=',
                                               'version',
                                               'help',
                                               'procmail'])

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 ('-p', '--procmail'):
        procmail = 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 procmail:
    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 procmail:
            msgout['X-TMDA-Fingerprint-Match'] = "Yes"
            print msgout
        else:
            print "Fingerprints match"
    else:
        if procmail:
            msgout['X-TMDA-Fingerprint-Match'] = "No"
            print msgout
        else:
            print "Fingerprints don't match"
            sys.exit(-1)

2007-02-24 17:18