| [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-07-30 15:45