From c04db9c35f847a53a1c9559aebec490ef988c786 Mon Sep 17 00:00:00 2001 From: perennate Date: Sun, 11 Aug 2013 20:35:48 +0800 Subject: [PATCH] Fix bug causing messages to have extra characters or failing to encode properly. --- GnuPG/__init__.py | 18 +++++++++++++++--- gpg-mailgate.py | 2 +- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/GnuPG/__init__.py b/GnuPG/__init__.py index 5fc089a..7a358d5 100644 --- a/GnuPG/__init__.py +++ b/GnuPG/__init__.py @@ -16,10 +16,11 @@ def public_keys( keyhome ): return keys class GPGEncryptor: - def __init__(self, keyhome, recipients = None): + def __init__(self, keyhome, recipients = None, charset = None): self._keyhome = keyhome self._message = '' self._recipients = list() + self._charset = charset if recipients != None: self._recipients.extend(recipients) @@ -32,5 +33,16 @@ class GPGEncryptor: return encdata def _command(self): - cmd = "/usr/bin/gpg --trust-model always --homedir %s --batch --yes --pgp7 --no-secmem-warning -a -e -r %s" % (self._keyhome, ' -r '.join(self._recipients)) - return cmd.split() + cmd = ["/usr/bin/gpg", "--trust-model", "always", "--homedir", self._keyhome, "--batch", "--yes", "--pgp7", "--no-secmem-warning", "-a", "-e"] + + # add recipients + for recipient in self._recipients: + cmd.append("-r") + cmd.append(recipient) + + # add on the charset, if set + if self._charset: + cmd.append("--comment") + cmd.append('Charset: ' + self._charset) + + return cmd diff --git a/gpg-mailgate.py b/gpg-mailgate.py index ade4320..01765b1 100755 --- a/gpg-mailgate.py +++ b/gpg-mailgate.py @@ -44,7 +44,7 @@ def encrypt_payload( payload, gpg_to_cmdline ): raw_payload = payload.get_payload(decode=True) if "-----BEGIN PGP MESSAGE-----" in raw_payload and "-----END PGP MESSAGE-----" in raw_payload: return payload - gpg = GnuPG.GPGEncryptor( cfg['gpg']['keyhome'], gpg_to_cmdline ) + gpg = GnuPG.GPGEncryptor( cfg['gpg']['keyhome'], gpg_to_cmdline, payload.get_content_charset() ) gpg.update( raw_payload ) payload.set_payload( gpg.encrypt() ) if payload['Content-Disposition']: