diff --git a/GnuPG/__init__.py b/GnuPG/__init__.py index 3a39577..c6da575 100644 --- a/GnuPG/__init__.py +++ b/GnuPG/__init__.py @@ -25,8 +25,8 @@ import random import string def public_keys( keyhome ): - cmd = '/usr/bin/gpg --homedir %s --list-keys --with-colons' % keyhome - p = subprocess.Popen( cmd.split(' '), stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) + cmd = ['/usr/bin/gpg', '--homedir', keyhome, '--list-keys', '--with-colons'] + p = subprocess.Popen( cmd, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) p.wait() keys = list() for line in p.stdout.readlines(): diff --git a/README.md b/README.md index b6e780a..3e1a438 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,19 @@ For installation instructions, please refer to the included INSTALL file. # Features - Correctly displays attachments and general email content; currently will only display first part of multipart messages - Public keys can be stored in a dedicated gpg-home-directory (see Note 1 in INSTALL) -- Encrypts matching incoming and outgoing mode +- Encrypts both matching incoming and outgoing mail (this means gpg-mailgate can be used to encrypt outgoing mail for software that doesn't support PGP) - Easy installation - gpg-mailgate-web extension is a web interface allowing any user to upload PGP keys so that emails sent to them from your mail server will be encrypted (see gpg-mailgate-web directory for details) This is forked from the original project at http://code.google.com/p/gpg-mailgate/ + +# Authors + +This is a combined work of many developers: + +* mcmaster +* Igor Rzegocki - [GitHub](https://github.com/ajgon/gpg-mailgate) +* perennate - [GitHub](https://github.com/uakfdotb/gpg-mailgate) +* Colin Moller - [GitHub](https://github.com/LeftyBC/gpg-mailgate) +* Taylor Hornby - [GitHub](https://github.com/defuse/gpg-mailgate) +* Martin (uragit) - [GitHub](https://github.com/uragit/gpg-mailgate) diff --git a/gpg-mailgate.conf.sample b/gpg-mailgate.conf.sample index b413699..7bf6059 100644 --- a/gpg-mailgate.conf.sample +++ b/gpg-mailgate.conf.sample @@ -14,8 +14,9 @@ keymap_only = no keyhome = /var/gpg/.gnupg [logging] -# file to log to +# For logging to syslog. 'file = syslog', otherwise use path to the file. file = /tmp/gpg-mailgate.log +#verbose = yes [relay] # the relay settings to use for Postfix diff --git a/gpg-mailgate.py b/gpg-mailgate.py index 8fecc28..b7ebef5 100755 --- a/gpg-mailgate.py +++ b/gpg-mailgate.py @@ -27,12 +27,7 @@ import re import GnuPG import smtplib import sys - -def appendLog(msg): - if cfg.has_key('logging') and cfg['logging'].has_key('file'): - log = open(cfg['logging']['file'], 'a') - log.write(msg + "\n") - log.close() +import syslog # Read configuration from /etc/gpg-mailgate.conf _cfg = RawConfigParser() @@ -43,6 +38,17 @@ for sect in _cfg.sections(): for (name, value) in _cfg.items(sect): cfg[sect][name] = value +def log(msg): + if cfg.has_key('logging') and cfg['logging'].has_key('file'): + if cfg['logging']['file'] == "syslog": + syslog.syslog(syslog.LOG_INFO | syslog.LOG_MAIL, msg) + else: + logfile = open(cfg['logging']['file'], 'a') + logfile.write(msg + "\n") + logfile.close() + +verbose=cfg.has_key('logging') and cfg['logging'].has_key('verbose') and cfg['logging']['verbose'] == 'yes' + # Read e-mail from stdin raw = sys.stdin.read() raw_message = email.message_from_string( raw ) @@ -52,7 +58,7 @@ to_addrs = sys.argv[1:] def send_msg( message, recipients = None ): if recipients == None: recipients = to_addrs - appendLog("Sending email to: <%s>" % '> <'.join( recipients )) + log("Sending email to: <%s>" % '> <'.join( recipients )) relay = (cfg['relay']['host'], int(cfg['relay']['port'])) smtp = smtplib.SMTP(relay[0], relay[1]) smtp.sendmail( from_addr, recipients, message.as_string() ) @@ -110,18 +116,22 @@ for to in to_addrs: elif cfg.has_key('keymap') and cfg['keymap'].has_key(to): gpg_to.append( (to, cfg['keymap'][to]) ) else: + if verbose: + log("Recipient (%s) not in domain list." % to) ungpg_to.append(to) if gpg_to == list(): if cfg['default'].has_key('add_header') and cfg['default']['add_header'] == 'yes': raw_message['X-GPG-Mailgate'] = 'Not encrypted, public key not found' + if verbose: + log("No encrypted recipients.") send_msg( raw_message ) exit() if ungpg_to != list(): send_msg( raw_message, ungpg_to ) -appendLog("Encrypting email to: %s" % ' '.join( map(lambda x: x[0], gpg_to) )) +log("Encrypting email to: %s" % ' '.join( map(lambda x: x[0], gpg_to) )) if cfg['default'].has_key('add_header') and cfg['default']['add_header'] == 'yes': raw_message['X-GPG-Mailgate'] = 'Encrypted by GPG Mailgate'