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