Skip to content

Commit 7845714

Browse files
committed
Merge branch 'release/3.1.1'
2 parents ada4932 + 9452415 commit 7845714

File tree

11 files changed

+187
-132
lines changed

11 files changed

+187
-132
lines changed

.travis.yml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
language: python
2+
3+
python:
4+
- "2.7"
5+
- "3.3"
6+
- "3.4"
7+
- "3.5"
8+
- "3.5-dev"
9+
- "3.6"
10+
- "3.6-dev" # 3.6 development branch
11+
- "3.7-dev" # 3.7 development branch
12+
13+
install:
14+
- pip install -r requirements.txt
15+
- pip install -r requirements.test.txt
16+
- python setup.py install --record installed-files.txt
17+
18+
before_script:
19+
- make test-before
20+
21+
script:
22+
- python pretty_bad_protocol/test/test_gnupg.py basic encodings parsers keyrings listkeys genkey sign crypt expiration signing

Makefile

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,9 @@ py3k-test-run: test-before
7878
listkeys \
7979
genkey \
8080
sign \
81-
crypt \
82-
expiration \
83-
signing
81+
crypt
82+
# expiration \
83+
# signing
8484

8585
coverage-run: test-before
8686
coverage run --rcfile=".coveragerc" $(PYTHON) $(TESTHANDLE) \
@@ -119,9 +119,9 @@ clean-test:
119119
-rm $(TESTDIR)/logs/placeholder.log
120120
-rm $(TESTDIR)/random_seed*
121121

122-
test: test-run clean-test
122+
test: test-run
123123

124-
py3k-test: py3k-test-run clean-test
124+
py3k-test: py3k-test-run
125125

126126
coverage: coverage-run coverage-report coverage-html clean-test
127127

pretty_bad_protocol/_logger.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def create_logger(level=logging.NOTSET):
6666
50 CRITICAL Unhandled exceptions and tracebacks.
6767
==== ======== ========================================
6868
"""
69-
_test = os.path.join(os.path.join(os.getcwd(), 'gnupg'), 'test')
69+
_test = os.path.join(os.path.join(os.getcwd(), 'pretty_bad_protocol'), 'test')
7070
_now = datetime.now().strftime("%Y-%m-%d_%H%M%S")
7171
_fn = os.path.join(_test, "%s_test_gnupg.log" % _now)
7272
_fmt = "%(relativeCreated)-4d L%(lineno)-4d:%(funcName)-18.18s %(levelname)-7.7s %(message)s"

pretty_bad_protocol/_parsers.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -978,7 +978,7 @@ def _handle_status(self, key, value):
978978
self.status = nodata(value)
979979
elif key == "PROGRESS":
980980
self.status = progress(value.split(' ', 1)[0])
981-
elif key == ("PINENTRY_LAUNCHED"):
981+
elif key == "PINENTRY_LAUNCHED":
982982
log.warn(("GnuPG has just attempted to launch whichever pinentry "
983983
"program you have configured, in order to obtain the "
984984
"passphrase for this key. If you did not use the "
@@ -1253,6 +1253,14 @@ def _handle_status(self, key, value):
12531253
if key == "IMPORTED":
12541254
# this duplicates info we already see in import_ok & import_problem
12551255
pass
1256+
elif key == "PINENTRY_LAUNCHED":
1257+
log.warn(("GnuPG has just attempted to launch whichever pinentry "
1258+
"program you have configured, in order to obtain the "
1259+
"passphrase for this key. If you did not use the "
1260+
"`passphrase=` parameter, please try doing so. Otherwise, "
1261+
"see Issues #122 and #137:"
1262+
"\nhttps://github.com/isislovecruft/python-gnupg/issues/122"
1263+
"\nhttps://github.com/isislovecruft/python-gnupg/issues/137"))
12561264
elif key == "KEY_CONSIDERED":
12571265
self.results.append({
12581266
'status': key.replace("_", " ").lower(),
@@ -1496,12 +1504,15 @@ def _handle_status(self, key, value):
14961504
"PLAINTEXT_LENGTH",
14971505
"POLICY_URL",
14981506
"DECRYPTION_INFO",
1507+
"DECRYPTION_KEY",
14991508
"DECRYPTION_OKAY",
15001509
"INV_SGNR",
15011510
"PROGRESS",
15021511
"PINENTRY_LAUNCHED",
15031512
"SUCCESS",
15041513
"UNEXPECTED",
1514+
"ENCRYPTION_COMPLIANCE_MODE",
1515+
"VERIFICATION_COMPLIANCE_MODE",
15051516
):
15061517
pass
15071518
elif key == "KEY_CONSIDERED":

pretty_bad_protocol/_util.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -200,9 +200,7 @@ def s(x):
200200
def binary(data):
201201
coder = find_encodings()
202202

203-
if _py3k and isinstance(data, bytes):
204-
encoded = coder.encode(data.decode(coder.name))[0]
205-
elif _py3k and isinstance(data, str):
203+
if _py3k and isinstance(data, str):
206204
encoded = coder.encode(data)[0]
207205
elif not _py3k and type(data) is not str:
208206
encoded = coder.encode(data)[0]
@@ -242,7 +240,11 @@ def _copy_data(instream, outstream):
242240
break
243241

244242
sent += len(data)
245-
encoded = binary(data)
243+
if ((_py3k and isinstance(data, str)) or
244+
(not _py3k and isinstance(data, basestring))):
245+
encoded = binary(data)
246+
else:
247+
encoded = data
246248
log.debug("Sending %d bytes of data..." % sent)
247249
log.debug("Encoded data (type %s):\n%s" % (type(encoded), encoded))
248250

@@ -440,7 +442,7 @@ def _has_readwrite(path):
440442
:rtype: bool
441443
:returns: True if real uid/gid has read+write permissions, False otherwise.
442444
"""
443-
return os.access(path, os.R_OK ^ os.W_OK)
445+
return os.access(path, os.R_OK | os.W_OK)
444446

445447
def _is_file(filename):
446448
"""Check that the size of the thing which is supposed to be a filename has

pretty_bad_protocol/gnupg.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
from ._util import _is_list_or_tuple
4545
from ._util import _is_stream
4646
from ._util import _make_binary_stream
47+
from ._util import b
4748
from ._util import log
4849

4950

@@ -468,13 +469,17 @@ def list_keys(self, secret=False):
468469
>>> assert print1 in pubkeys.fingerprints
469470
>>> assert print2 in pubkeys.fingerprints
470471
"""
471-
472472
which = 'public-keys'
473473
if secret:
474474
which = 'secret-keys'
475-
args = "--list-%s --fixed-list-mode --fingerprint " % (which,)
476-
args += "--with-colons --list-options no-show-photos"
477-
args = [args]
475+
476+
args = []
477+
args.append("--fixed-list-mode")
478+
args.append("--fingerprint")
479+
args.append("--with-colons")
480+
args.append("--list-options no-show-photos")
481+
args.append("--list-%s" % (which))
482+
478483
p = self._open_subprocess(args)
479484

480485
# there might be some status thingumy here I should handle... (amk)
@@ -528,7 +533,7 @@ def sign_key(self, keyid, default_key=None, passphrase=None):
528533
p = self._open_subprocess(args)
529534
result = self._result_map['signing'](self)
530535
confirm_command = "%sy\n" % input_command
531-
p.stdin.write(confirm_command)
536+
p.stdin.write(b(confirm_command))
532537
self._collect_output(p, result, stdin=p.stdin)
533538
return result
534539

@@ -626,10 +631,10 @@ def expire(self, keyid, expiration_time='1y', passphrase=None, expire_subkeys=Tr
626631

627632
args = ["--command-fd 0", "--edit-key %s" % keyid]
628633
p = self._open_subprocess(args)
629-
p.stdin.write(expiration_input)
634+
p.stdin.write(b(expiration_input))
630635

631636
result = self._result_map['expire'](self)
632-
p.stdin.write(expiration_input)
637+
p.stdin.write(b(expiration_input))
633638

634639
self._collect_output(p, result, stdin=p.stdin)
635640
return result
Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
-----BEGIN PGP PUBLIC KEY BLOCK-----
2-
Version: GnuPG v2
2+
Version: GnuPG v1
33

44
mQINBFPcDfoBEACjsm+2o3Ip5IFXA9mUMGuSfWBL2G2bMvB8ZEjp9+DmiWzDUApH
55
Bk5RQaXXN1lp41Z4POQy9FV735rpBJLcb36/uU8Fm1LwLBqJYcUiB2JsAUsS7scS
@@ -12,40 +12,40 @@ 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
50-
=JU4o
15+
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
50+
=Gq2d
5151
-----END PGP PUBLIC KEY BLOCK-----

0 commit comments

Comments
 (0)