Fix unsanitised inputs for GPG() parameters 'gpgbinary' and 'gpghome'.

* Update all docstrings and functions to use 'gpghome' instead of
   'gnupghome'.
feature/documentation-builds-dirhtml
Isis Lovecruft 2013-03-07 01:04:01 +00:00 committed by Isis Lovecruft
parent 427b72b5c1
commit ea3e8aa86d
1 changed files with 32 additions and 16 deletions

View File

@ -29,7 +29,7 @@ Steve Traugott's documentation:
This module is *not* forward-compatible with amk's; some of the old
interface has changed. For instance, since I've added decrypt
functionality, I elected to initialize with a 'gnupghome' argument instead
functionality, I elected to initialize with a 'gpghome' argument instead
of 'keyring', so that gpg can find both the public and secret keyrings.
I've also altered some of the returned objects in order for the caller to
not have to know as much about the internals of the result classes.
@ -907,7 +907,7 @@ class GPG(object):
'sign': Sign,
'verify': Verify,}
def __init__(self, gpgbinary='gpg', gnupghome=None, verbose=False,
def __init__(self, gpgbinary='gpg', gpghome=None, verbose=False,
use_agent=False, keyring=None, options=None):
"""
Initialize a GPG process wrapper.
@ -919,8 +919,23 @@ class GPG(object):
the default keyring is not used.
@options: A list of additional options to pass to the GPG binary.
"""
self.gpgbinary = gpgbinary
self.gnupghome = gnupghome
safe_gpgbinary = _fix_unsafe(gpgbinary)
## if using the default, or if the given gpgbinary is not absolute,
## then find the absolute path and check that we have +x permissions
if not os.path.isabs(safe_gpgbinary):
that = _which(safe_gpgbinary)
self.gpgbinary = that[0] if (len(that) > 0) else None
else:
self.gpgbinary = safe_gpgbinary
assert self.gpgbinary, "Could not find gpgbinary", safe_gpgbinary
if gpghome:
self.gpghome = gpghome
assert _has_readwrite(gpghome), "Need r+w permissions: ", gpghome
else:
self.gpghome = gpghome
self.keyring = keyring
self.verbose = verbose
self.use_agent = use_agent
@ -930,8 +945,8 @@ class GPG(object):
self.encoding = locale.getpreferredencoding()
if self.encoding is None: # This happens on Jython!
self.encoding = sys.stdin.encoding
if gnupghome and not os.path.isdir(self.gnupghome):
os.makedirs(self.gnupghome,0x1C0)
if gpghome and not os.path.isdir(self.gpghome):
os.makedirs(self.gpghome,0x1C0)
p = self._open_subprocess(["--version"])
result = self.result_map['verify'](self) # any result will do for this
self._collect_output(p, result, stdin=p.stdin)
@ -946,8 +961,8 @@ class GPG(object):
a passphrase will be sent to GPG, else False.
"""
cmd = [self.gpgbinary, '--status-fd 2 --no-tty']
if self.gnupghome:
cmd.append('--homedir "%s" ' % self.gnupghome)
if self.gpghome:
cmd.append('--homedir "%s" ' % self.gpghome)
if self.keyring:
cmd.append('--no-default-keyring --keyring "%s" ' % self.keyring)
if passphrase:
@ -1108,7 +1123,7 @@ class GPG(object):
def verify(self, data):
"""Verify the signature on the contents of the string 'data'
>>> gpg = GPG(gnupghome="keys")
>>> gpg = GPG(gpghome="keys")
>>> input = gpg.gen_key_input(Passphrase='foo')
>>> key = gpg.gen_key(input)
>>> assert key
@ -1180,7 +1195,7 @@ class GPG(object):
>>> import shutil
>>> shutil.rmtree("keys")
>>> gpg = GPG(gnupghome="keys")
>>> gpg = GPG(gpghome="keys")
>>> input = gpg.gen_key_input()
>>> result = gpg.gen_key(input)
>>> print1 = result.fingerprint
@ -1235,7 +1250,7 @@ class GPG(object):
>>> import shutil
>>> shutil.rmtree("keys")
>>> gpg = GPG(gnupghome="keys")
>>> gpg = GPG(gpghome="keys")
>>> result = gpg.recv_keys('pgp.mit.edu', '3FF0DB166A7476EA')
>>> assert result
@ -1292,7 +1307,7 @@ class GPG(object):
>>> import shutil
>>> shutil.rmtree("keys")
>>> gpg = GPG(gnupghome="keys")
>>> gpg = GPG(gpghome="keys")
>>> input = gpg.gen_key_input()
>>> result = gpg.gen_key(input)
>>> print1 = result.fingerprint
@ -1335,10 +1350,11 @@ class GPG(object):
return result
def gen_key(self, input):
"""Generate a key; you might use gen_key_input() to create the
control input.
"""
Generate a key; you might use gen_key_input() to create the control
input.
>>> gpg = GPG(gnupghome="keys")
>>> gpg = GPG(gpghome="keys")
>>> input = gpg.gen_key_input()
>>> result = gpg.gen_key(input)
>>> assert result
@ -1438,7 +1454,7 @@ class GPG(object):
>>> import shutil
>>> if os.path.exists("keys"):
... shutil.rmtree("keys")
>>> gpg = GPG(gnupghome="keys")
>>> gpg = GPG(gpghome="keys")
>>> input = gpg.gen_key_input(passphrase='foo')
>>> result = gpg.gen_key(input)
>>> print1 = result.fingerprint