Control: tag -1 -moreinfo On 2014-11-26 17:32:33, Jonathan Wiltshire wrote: [...] > They're all ok. You'll upset your translators though... please get as many > translations into your upload as possible, but don't leave it past 3rd > December. You can have a waiver for further translations after that. > > Please remove the moreinfo tag when it's in sid.
Unfortunately, there is little translation available on the project at this point and little workforce to update it, so I went ahead and uploaded a 2.0.2 release with the documented changes (plus another to fix another RC bug, #77090. An annoying part of the diff is a change in a OpenPGP ascii-armored key file that I had to perform in order to fix the test suite, which was making the package FTBS since well... today. :/ Sorry about that, but it seems necessary. The final debdiff is attached. debian/changelog | 27 ++ monkeysign/__init__.py | 2 monkeysign/cli.py | 12 monkeysign/gpg.py | 65 +++- monkeysign/gtkui.py | 28 +- monkeysign/ui.py | 3 tests/6D866396.asc | 661 +++++++++++++++++++++++++------------------------ tests/test_gpg.py | 5 8 files changed, 447 insertions(+), 356 deletions(-)
diff -Nru monkeysign-2.0.1/debian/changelog monkeysign-2.0.2/debian/changelog --- monkeysign-2.0.1/debian/changelog 2014-10-20 22:29:41.000000000 -0400 +++ monkeysign-2.0.2/debian/changelog 2014-12-01 22:02:20.000000000 -0500 @@ -1,3 +1,30 @@ +monkeysign (2.0.2) unstable; urgency=medium + + * this patch releases fixes critical issues... + * reported in the Debian BTS: + * encode prompt properly before prompting (closes: #771032) + * try to handle error when import actually works in GTK UI + (closes: #770900) + * improve debugging by wrapping all writes to gnupg in debug + * use the proper index when selecting key to sign + (closes: #771034) + * reported on the Monkeysphere mailing list: + * hotfix: properly verify the image signature file + * hotfix: disable scrolling in qrcode window + * don't try to remove non-existent video device, and clarify error + message + * output --version to stdout and don't make it an error + * those fix FTBS issues: + * fix tests after cd4e18c: guess encoding properly + * update zack's key so tests succeed again + + * and this makes sure this package will be easier to support for the + lifetime of jessie + * improve error handling again: distinguish different failure cases + and clearly transmit GPG errors + + -- Antoine Beaupré <anar...@debian.org> Mon, 01 Dec 2014 21:03:56 -0500 + monkeysign (2.0.1) unstable; urgency=medium * hot patch release while we still can before jessie: diff -Nru monkeysign-2.0.1/monkeysign/cli.py monkeysign-2.0.2/monkeysign/cli.py --- monkeysign-2.0.1/monkeysign/cli.py 2014-10-20 22:29:41.000000000 -0400 +++ monkeysign-2.0.2/monkeysign/cli.py 2014-12-01 22:02:20.000000000 -0500 @@ -15,6 +15,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. +import locale import sys import os import getpass @@ -78,14 +79,14 @@ # implicit def yes_no(self, prompt, default = None): - ans = raw_input(prompt.encode('utf-8')) + ans = raw_input(prompt.encode(sys.stdout.encoding or locale.getpreferredencoding(True))) while default is None and ans.lower() not in ["y", "n"]: - ans = raw_input(prompt) + ans = raw_input(prompt.encode(sys.stdout.encoding or locale.getpreferredencoding(True))) if default: return default else: return ans.lower() == 'y' def prompt_line(self, prompt): - return raw_input(prompt.encode('utf-8')) + return raw_input(prompt.encode(sys.stdout.encoding or locale.getpreferredencoding(True))) def prompt_pass(self, prompt): return getpass.getpass(prompt) @@ -99,10 +100,11 @@ prompt += _(' (1-%d or full UID, control-c to abort): ') % len(allowed_uids) - pattern = raw_input(prompt) + # workaround http://bugs.python.org/issue7768 + pattern = raw_input(prompt.encode(sys.stdout.encoding or locale.getpreferredencoding(True))) while not (pattern in allowed_uids or (pattern.isdigit() and int(pattern)-1 in range(0,len(allowed_uids)))): print _('invalid uid') - pattern = raw_input(prompt) + pattern = raw_input(prompt.encode(sys.stdout.encoding or locale.getpreferredencoding(True))) if pattern.isdigit(): pattern = allowed_uids[int(pattern)-1] return pattern diff -Nru monkeysign-2.0.1/monkeysign/gpg.py monkeysign-2.0.2/monkeysign/gpg.py --- monkeysign-2.0.1/monkeysign/gpg.py 2014-10-20 22:29:41.000000000 -0400 +++ monkeysign-2.0.2/monkeysign/gpg.py 2014-12-01 22:02:20.000000000 -0500 @@ -242,6 +242,16 @@ """ return self.expect_pattern(fd, '^\[GNUPG:\] ' + pattern) + def write(self, fd, message): + """write the specified message to gnupg, usually on stdout + + but really, the pipes are often setup outside of here so the + fd is hardcoded here + """ + if self.debug: + print >>self.debug, "WROTE:", message + print >>fd, message + def version(self): """return the version of the GPG binary""" self.call_command(['version']) @@ -320,8 +330,8 @@ self.context.call_command(command) return self.context.stdout - def verify_file(self, filename, sigfile): - self.context.call_command(['verify', filename, sigfile]) + def verify_file(self, sigfile, filename): + self.context.call_command(['verify', sigfile, filename]) fd = StringIO(self.context.stderr) try: self.context.seek(fd, 'VALIDSIG') @@ -416,20 +426,19 @@ while True: m = self.context.seek_pattern(proc.stdout, '^uid:.::::::::([^:]*):::[^:]*:(\d+),[^:]*:') if m and m.group(1) == pattern: - # XXX: we don't have the +1 that sign_key has, why? index = int(m.group(2)) break - print >>proc.stdin, str(index) + self.context.write(proc.stdin, str(index)) self.context.expect(proc.stderr, 'GOT_IT') self.context.expect(proc.stderr, 'GET_LINE keyedit.prompt') # end of copy-paste from sign_key() - print >>proc.stdin, 'deluid' + self.context.write(proc.stdin, 'deluid') self.context.expect(proc.stderr, 'GOT_IT') self.context.expect(proc.stderr, 'GET_BOOL keyedit.remove.uid.okay') - print >>proc.stdin, 'y' + self.context.write(proc.stdin, 'y') self.context.expect(proc.stderr, 'GOT_IT') self.context.expect(proc.stderr, 'GET_LINE keyedit.prompt') - print >>proc.stdin, 'save' + self.context.write(proc.stdin, 'save') self.context.expect(proc.stderr, 'GOT_IT') return proc.wait() == 0 @@ -468,12 +477,12 @@ try: multiuid = self.context.seek(proc.stderr, 'GET_BOOL keyedit.sign_all.okay') except GpgProtocolError as e: - raise GpgRuntimeError(self.context.returncode, _('cannot sign: %s') % re.sub(r'^.*found "(.*)', r'\1', str(e)).decode('utf-8')) + raise GpgRuntimeError(self.context.returncode, _('cannot select uid for signing: %s') % e.found().decode('utf-8')) else: - raise GpgRuntimeError(self.context.returncode, _('cannot sign: %s') % re.sub(r'^.*found "(.*)', r'\1', str(e)).decode('utf-8')) + raise GpgRuntimeError(self.context.returncode, _('cannot select uid for signing: %s') % e.found().decode('utf-8')) if multiuid: if signall: # special case, sign all keys - print >>proc.stdin, "y" + self.context.write(proc.stdin, "y") self.context.expect(proc.stderr, 'GOT_IT') # confirm signature try: @@ -483,8 +492,8 @@ raise GpgRuntimeError(self.context.returncode, _('you already signed that key')) else: # propagate gpg error message up - raise GpgRuntimeError(self.context.returncode, _('unable to open key for editing: %s') % re.sub(r'^expected.*, found "(.*)$"', r'\1', str(e)).decode('utf-8')) - print >>proc.stdin, 'y' + raise GpgRuntimeError(self.context.returncode, _('unable to confirm key signing: %s') % e.found().decode('utf-8')) + self.context.write(proc.stdin, 'y') self.context.expect(proc.stderr, 'GOT_IT') # expect the passphrase confirmation # we seek because i have seen a USERID_HINT <keyid> <uid> in some cases @@ -495,7 +504,7 @@ return proc.wait() == 0 # don't sign all uids - print >>proc.stdin, "n" + self.context.write(proc.stdin, "n") self.context.expect(proc.stderr, 'GOT_IT') # select the uid self.context.expect(proc.stderr, 'GET_LINE keyedit.prompt') @@ -503,23 +512,23 @@ # XXX: this will hang if the pattern requested is not found, we need a better way! m = self.context.seek_pattern(proc.stdout, '^uid:.::::::::([^:]*):::[^:]*:(\d+),[^:]*:') if m and m.group(1) == pattern: - index = int(m.group(2)) + 1 + index = int(m.group(2)) break - print >>proc.stdin, str(index) + self.context.write(proc.stdin, str(index)) self.context.expect(proc.stderr, 'GOT_IT') # sign the selected uid self.context.seek(proc.stderr, 'GET_LINE keyedit.prompt') - print >>proc.stdin, "sign" + self.context.write(proc.stdin, "sign") self.context.expect(proc.stderr, 'GOT_IT') # confirm signature try: self.context.expect(proc.stderr, 'GET_BOOL sign_uid.okay') except GpgProtocolError as e: # propagate gpg error message up - raise GpgRuntimeError(self.context.returncode, _('unable to open key for editing: %s') % re.sub(r'^expected.*, found "(.*)$"', r'\1', str(e)).decode('utf-8')) + raise GpgRuntimeError(self.context.returncode, _('unable to confirm signing one key: %s') % e.found().decode('utf-8')) # we fallthrough here if there's only one key to sign - print >>proc.stdin, 'y' + self.context.write(proc.stdin, 'y') try: self.context.expect(proc.stderr, 'GOT_IT') @@ -529,7 +538,7 @@ if 'EXPIRED' in str(e): raise GpgRuntimeError(self.context.returncode, _('key is expired, cannot sign')) else: - raise GpgRuntimeError(self.context.returncode, _('cannot sign, unknown error from gpg: %s') % str(e) + proc.stderr.read()) + raise GpgRuntimeError(self.context.returncode, _('unable to signing a single key: %s') % e.found().decode('utf-8') + proc.stderr.read()) # expect the passphrase confirmation try: self.context.seek(proc.stderr, 'GOOD_PASSPHRASE') @@ -538,7 +547,7 @@ if multiuid: # we save the resulting key in uid selection mode self.context.expect(proc.stderr, 'GET_LINE keyedit.prompt') - print >>proc.stdin, "save" + self.context.write(proc.stdin, "save") self.context.expect(proc.stderr, 'GOT_IT') return proc.wait() == 0 @@ -764,7 +773,21 @@ module should instead raise a GpgRutimeError with a user-readable error message (e.g. "key not found"). """ - pass + + def match(self): + return re.search(r'(?:\[Errno [0-9]*\] )?expected "([^"]*)", found "(.*)\n*"', str(self)) + + def found(self): + if self.match(): + return self.match().group(2) + else: + return '<no error found in GPG output>' + + def expected(self): + if self.match(): + return self.match().group(1) + else: + return '<not waiting for pattern>' class GpgRuntimeError(IOError): pass diff -Nru monkeysign-2.0.1/monkeysign/gtkui.py monkeysign-2.0.2/monkeysign/gtkui.py --- monkeysign-2.0.1/monkeysign/gtkui.py 2014-10-20 22:29:41.000000000 -0400 +++ monkeysign-2.0.2/monkeysign/gtkui.py 2014-12-01 22:02:20.000000000 -0500 @@ -264,7 +264,7 @@ self.clip = gtk.Clipboard() # Clipboard self.qrcodewidget = gtk.VBox() swin = gtk.ScrolledWindow() - swin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + swin.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER) swin.add_with_viewport(self.qrcode) label = gtk.Label(_('This is a QR-code version of your OpenPGP fingerprint. Scan this with another Monkeysign to transfer your fingerprint.')) label.set_line_wrap(True) @@ -394,13 +394,17 @@ # extract results found = False for symbol in rawimage: - self.zbarframe.remove(self.zbar) + try: + self.zbarframe.remove(self.zbar) + except AttributeError: + # no video display, ignore + pass self.zbarframe.add(self.capture) self.zbarframe.set_shadow_type(gtk.SHADOW_ETCHED_IN) self.process_scan(symbol.data) found = True if not found: - self.msui.warn(_('data found in image!')) + self.msui.warn(_('no data found in image!')) def save_qrcode(self, widget=None): @@ -474,7 +478,14 @@ """callback invoked when gpg key download is finished """ self.keep_pulsing=False - self.dialog.destroy() + try: + self.dialog.destroy() + except AttributeError: + # XXX: this should be handled better, bugfix for: + # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=770900 + # this is actually because the key was + # imported without having to create a dialog + pass self.msui.log(_('fetching finished')) if condition == 0: # 2. copy the signing key secrets into the keyring @@ -534,9 +545,12 @@ self.msui.log(_('looking for key %s in your keyring') % self.msui.pattern) self.msui.keyring.context.set_option('export-options', 'export-minimal') if self.msui.tmpkeyring.import_data(self.msui.keyring.export_data(self.msui.pattern)): - # XXXX: this actually hangs when signing the key, maybe because we're not in a callback? - # it's the prompting that hangs, see msui.ask... - self.watch_out_callback(0, 0) # XXX: hack, the callback should call a cleaner function + # for some reason, we were holding on to a lock already, release it + gtk.gdk.threads_leave() + self.msui.copy_secrets() + self.msui.sign_key() + self.msui.export_key() + self.resume_capture() return # XXX: also ugly, reindent everything instead # 1.b) if allowed (@todo), from the keyservers diff -Nru monkeysign-2.0.1/monkeysign/__init__.py monkeysign-2.0.2/monkeysign/__init__.py --- monkeysign-2.0.1/monkeysign/__init__.py 2014-10-20 22:29:41.000000000 -0400 +++ monkeysign-2.0.2/monkeysign/__init__.py 2014-12-01 22:02:20.000000000 -0500 @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -__version_info__ = ('2', '0', '0') +__version_info__ = ('2', '0', '2') __version__ = '.'.join(__version_info__) __copyright__ = """Copyright (C) 2010-2013 Antoine Beaupré, Jerome Charaoui This program comes with ABSOLUTELY NO WARRANTY. diff -Nru monkeysign-2.0.1/monkeysign/ui.py monkeysign-2.0.2/monkeysign/ui.py --- monkeysign-2.0.1/monkeysign/ui.py 2014-10-20 22:29:41.000000000 -0400 +++ monkeysign-2.0.2/monkeysign/ui.py 2014-12-01 22:02:20.000000000 -0500 @@ -156,7 +156,8 @@ self.tmpkeyring = TempKeyring() if self.options.version: - self.abort(monkeysign.__version__) + print(monkeysign.__version__) + sys.exit() if self.options.debug: self.tmpkeyring.context.debug = self.logfile self.keyring.context.debug = self.logfile diff -Nru monkeysign-2.0.1/tests/6D866396.asc monkeysign-2.0.2/tests/6D866396.asc --- monkeysign-2.0.1/tests/6D866396.asc 2014-10-20 22:29:41.000000000 -0400 +++ monkeysign-2.0.2/tests/6D866396.asc 2014-12-01 22:02:20.000000000 -0500 @@ -12,323 +12,346 @@ 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 -3M4hW0BFhDp16uYQLgYpQ8GRpkssDM2dju0TF19okvazAHcLAN25u9dY3W0MMB6y -+BKk1CxQjgTznaYRBEy7ZqYei5LPWAC0eOiGAZgteGs6Gcc2gAf7Rzm3RYQEiJkK -w7WrFR8yO1Qkx4kZjpUu7no2XUGR1I0kAtjoz0gCjmIk1hQFAQZ889fxTY4ke0P/ -kmBM77QoU3RlZmFubyBaYWNjaGlyb2xpIDx6YWNrQHBwcy5qdXNzaWV1LmZyPokC -HwQwAQgACQUCUgyvZwIdIAAKCRCcMVA8bYZjlpLyD/wKYIIRP/iir7xvHC/bJnBa -s4ym+1qA1gu+zFtBK79ZGAZgh3cMDJGvLuT3TYwOv8AsYj30eGCglYGRqMquq2fj -6lXPg6ZqzWdhDmj3GrY1Qyi4jpvRGMAD8T5q2gjcSjvM824pUMACqeEKNXQ1M7rT -B1hCo5qmnIVvLK4esReHBC+Z/RGWL1WSsGx4QCYiO2TwS40uq/9DwJbsKjPcuByw -o2/ASQMm9n+f2jG9QH10eEL016VmCsXJVmopw14jRPUpW/BPEmjzYt+P3B/eR8FV -3LutSqTTLxWxwY9P6KxNtR88l3oNzMqV/RKf48gfJ/D8KLqamuqSmOjvyou6cVOd -yOOOWZr6B/oQZ6ztLw+3RHSejTrsw0wYTzeKZ/fyg7N0AIr7BzCMG5f1EQsdAC/3 -pHVoN44xIOU0pX3n4pzzIDMG/s4wVC1LXhZmHzwYWChJKRcfjClNsQk6co6JO70a -TdnWlV6x+t29mToS1bC5ZoG+tT2zaPy2bQruOYDUJIkN3b/ovkAJDL+Gqd1e6pkY -aym04b1ZCPatA8MVKVOWSBlyvUt9RzdBn8haVjFJTYTjXkb2gGsVUu+ejxoN+ACN -of27f16el+iap2cqyGWoeeuErmKjcOfrp7f64GuAdxMYaaRTIBMaiXKOQHtwUkxr -MjEnRnevLyoxeWNKz6AasrQzU3RlZmFubyBaYWNjaGlyb2xpIDx6YWNrQHBwcy51 -bml2LXBhcmlzLWRpZGVyb3QuZnI+iQI3BBMBCAAhBQJPJGgRAhsDBQsJCAcDBRUK -CQgLBRYCAwEAAh4BAheAAAoJEJwxUDxthmOWouYP/2YOYAHQNUbgC1nZGk4xVw3H -UI81rVwybkMPJu2RRAiY+mTtV3Ot8415vkIYUItJnpnais7irdEiIKlI/k45MbiM -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 -pM4dBQsJCAcDBRUKCQgLBRYCAwEAAAoJEJwxUDxthmOWG9MP/j2MVIsB2ajBmDJ7 -0YG8senPZp44xX62+UrLvWm77tL1+0m6iEL4ZKtZUl9rkzkQO2n+Oe2kt7pRIVig -4JenjK6/5uBy+8wiyz2WYpi4jXU7HB+rPmG+ES0SHIao1DoMCj5ziXMM3IoatY4b -99S3ax2QmbOuBOttNVQ0Dx9eQewzQCx1PPhrWkavZhHlX3wBLFpIHCWNGfu0Rwop -5OMZwmH4P2Azi/pu23/nDQ5qm7C6Y4Bd4mopEr/afu7OBPEik5RvQVllVBf9SWSy -niCZl/YYdocJ8aHmF/mWhY+iFAhdY1YFXxiTtnrMJ8Gyi+GbGlSPRW23pRRbwYJg -8CjtkwUtYJfa9XTE6q3MIHEwL5jnKMsUcj5steRBBqcxbkLlTLpZ814GlX6qT0L8 -E1jYk81nwb4TRR5CUSJOMrqBgv0U1R/RSjGwbD8SdD3H2OWpcqKkE8cBZQ0tjHRh -BbS/vhUcPAUzbbbgneDIZaOc7b6yApjyOlcpnIsyDVcxoYiubEh//B2a1ufZ5h9o -WJUYZAkboVrVOBYXy+YEb7BbDiAn+0ltWmFBy82u/bb5XrCe3PWqgiC7M2RqLm2/ -QnmQL4MwsIyOg3ZVfWpU1qU18EElKoS3XFwHQMzcnKXKTXIuqRrK7XZpdXbMNbXu -buQ9OVmJAniKe71gZVeHn5zbnZWjiQLwBBIBCgDaBQJOMqxSwBIaaHR0cDovL21h -cnRpbi1rcmFmZnQubmV0L2dwZy9jZXJ0LXBvbGljeS81NWM5ODgyZDk5OWJiY2M0 -LzIwMDkwNzEyMTgzMz9zaGE1MTJzdW09ZjMzYjE3YzlhZjUxNWJkOThiMjkyN2Ni -NDUzYTk5MmQzZDc1MDBlOWY2NzE5NjY2MTZlOTA1MTBiOTk0MDg5NTEwOGQyNDE2 -NDhkMWEwZWI0NmIzMmJjYmYzMjUxYTEzNmE2ZWUxZTIyNzU3NDVlMTFiYjMyOGMx -NGU3ZTcyNjMACgkQVcmILZmbvMQvNw/+N/XjgSmh72DKX1pyZJz/KXC+yODnqU82 -/1JbFjLX1NLXvB0L2DNoLCX+oYGoNN+QsyohG3jSSdt8zuZMtXNdY2XLnB/jFNpr -Ba0XdP8bB4R7vPX1pbwYupjHJm8d/utnkfPid/qMlBlLMvmSJ0aw8D6V/Y1pL/qX -ycEA8t7rxtOIDEX3vWreokxI+dfvjBw4lXnZJ1c3QvhbJHFGK2H9aGUZhdwe3hAx -LXLk4lZFBDoSD64W8LPgC1MUTXMpetXDIP8syETIiNzuG5gxbbP3ks9Ab2JqLuEn -Vk2ynV8KHEUm57W68uU56F6hTTR9gOWTpCTLq5buW7MGzmiRYK5XhpbD0dBHVl3D -9gdru/6f6CkfL/phtzJ+m/1V6JS8BQgpye/xf6HtZC3wRCHGpIFl5AnNaCPAp09X -EnWSl/Xjczqj2iqRwR0e2i6oShu74drJwNJJzq1oDvLTOccCQkOFP47SxUATomuu -nbxPVbRdp/M1KVCOFXQDN4oVNaMmJSuzQpeQfWL9z0fDUuh0qhKw3M5YXYoLlcQ/ -pymwu7LRbjBJqhENlNzLcK2wBFvclI+q33fv92YWJi2CvDcLz/+3Um4AFwwfNWk3 -OS9AMhwpU4zZBptPANWFaclom6G+xn3zIqL/ie3FB38gMinAJYz5DhrKdC4tRlDm -tk0EyHX/6DSJAvQEEAECAN4FAk1OgxCHFIAAAAAAEABuc2lnbm90ZXNAZ3JlcC5i -ZSJodHRwOi8vd3d3LmdyZXAuYmUvZ3BnL0NGNjIzMThENUJCRUQ0OEYzM0FDRDU0 -MzFCMDAwNjI1NkZCMjkxNjQvNDkwMDcwN0REQzVDMDdGMkRFQ0IwMjgzOUMzMTUw -M0M2RDg2NjM5Ni5hc2MiTxpodHRwOi8vd3d3LmdyZXAuYmUvZ3BnL0NGNjIzMThE -NUJCRUQ0OEYzM0FDRDU0MzFCMDAwNjI1NkZCMjkxNjQvY2VydC1wb2xpY3ktdjIA -CgkQGwAGJW+ykWSLsQ//QnVZYlPVIm4mj6iqY0q/31ftZNn0SSfSNIlo8TJ2vVHR -4s7KZZTYFv40acC8YQekHExdC2H3f07YeywaoHUmkh0FfqaOjHYbAb041XEgsidZ -WqYHik2WCZBL7buRDs55nWNjcDObEr/uK6+JP6sxyQlE85fa1k3ed6VKSQRI5GAp -N2093/Zc9x/ocTA3VY3Mxi2ZhnCQ77k8g7S6Th79zGQ4eHac/qYLfEpC4KvcVNCb -xJhzmayh+btNGbev3+boWQ+x7DrgFxCbNnMBtITsABSipyALCFj2Vkpubpeo4X6g -vF5uSNnaUmkWgjXGdbb7jTLFiaerd9D6DK4cqJowLzhxT5RpDTs7/5vAQYF5qBIJ -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 -BDs3K2rN6wTc5LG4iA== -=VBui +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 +PmG+ES0SHIao1DoMCj5ziXMM3IoatY4b99S3ax2QmbOuBOttNVQ0Dx9eQewzQCx1 +PPhrWkavZhHlX3wBLFpIHCWNGfu0Rwop5OMZwmH4P2Azi/pu23/nDQ5qm7C6Y4Bd +4mopEr/afu7OBPEik5RvQVllVBf9SWSyniCZl/YYdocJ8aHmF/mWhY+iFAhdY1YF +XxiTtnrMJ8Gyi+GbGlSPRW23pRRbwYJg8CjtkwUtYJfa9XTE6q3MIHEwL5jnKMsU +cj5steRBBqcxbkLlTLpZ814GlX6qT0L8E1jYk81nwb4TRR5CUSJOMrqBgv0U1R/R +SjGwbD8SdD3H2OWpcqKkE8cBZQ0tjHRhBbS/vhUcPAUzbbbgneDIZaOc7b6yApjy +OlcpnIsyDVcxoYiubEh//B2a1ufZ5h9oWJUYZAkboVrVOBYXy+YEb7BbDiAn+0lt +WmFBy82u/bb5XrCe3PWqgiC7M2RqLm2/QnmQL4MwsIyOg3ZVfWpU1qU18EElKoS3 +XFwHQMzcnKXKTXIuqRrK7XZpdXbMNbXubuQ9OVmJAniKe71gZVeHn5zbnZWjiQLw +BBIBCgDaBQJOMqxSwBIaaHR0cDovL21hcnRpbi1rcmFmZnQubmV0L2dwZy9jZXJ0 +LXBvbGljeS81NWM5ODgyZDk5OWJiY2M0LzIwMDkwNzEyMTgzMz9zaGE1MTJzdW09 +ZjMzYjE3YzlhZjUxNWJkOThiMjkyN2NiNDUzYTk5MmQzZDc1MDBlOWY2NzE5NjY2 +MTZlOTA1MTBiOTk0MDg5NTEwOGQyNDE2NDhkMWEwZWI0NmIzMmJjYmYzMjUxYTEz +NmE2ZWUxZTIyNzU3NDVlMTFiYjMyOGMxNGU3ZTcyNjMACgkQVcmILZmbvMQvNw/+ +N/XjgSmh72DKX1pyZJz/KXC+yODnqU82/1JbFjLX1NLXvB0L2DNoLCX+oYGoNN+Q +syohG3jSSdt8zuZMtXNdY2XLnB/jFNprBa0XdP8bB4R7vPX1pbwYupjHJm8d/utn +kfPid/qMlBlLMvmSJ0aw8D6V/Y1pL/qXycEA8t7rxtOIDEX3vWreokxI+dfvjBw4 +lXnZJ1c3QvhbJHFGK2H9aGUZhdwe3hAxLXLk4lZFBDoSD64W8LPgC1MUTXMpetXD +IP8syETIiNzuG5gxbbP3ks9Ab2JqLuEnVk2ynV8KHEUm57W68uU56F6hTTR9gOWT +pCTLq5buW7MGzmiRYK5XhpbD0dBHVl3D9gdru/6f6CkfL/phtzJ+m/1V6JS8BQgp +ye/xf6HtZC3wRCHGpIFl5AnNaCPAp09XEnWSl/Xjczqj2iqRwR0e2i6oShu74drJ +wNJJzq1oDvLTOccCQkOFP47SxUATomuunbxPVbRdp/M1KVCOFXQDN4oVNaMmJSuz +QpeQfWL9z0fDUuh0qhKw3M5YXYoLlcQ/pymwu7LRbjBJqhENlNzLcK2wBFvclI+q +33fv92YWJi2CvDcLz/+3Um4AFwwfNWk3OS9AMhwpU4zZBptPANWFaclom6G+xn3z +IqL/ie3FB38gMinAJYz5DhrKdC4tRlDmtk0EyHX/6DSJAvQEEAECAN4FAk1OgxCH +FIAAAAAAEABuc2lnbm90ZXNAZ3JlcC5iZSJodHRwOi8vd3d3LmdyZXAuYmUvZ3Bn +L0NGNjIzMThENUJCRUQ0OEYzM0FDRDU0MzFCMDAwNjI1NkZCMjkxNjQvNDkwMDcw +N0REQzVDMDdGMkRFQ0IwMjgzOUMzMTUwM0M2RDg2NjM5Ni5hc2MiTxpodHRwOi8v +d3d3LmdyZXAuYmUvZ3BnL0NGNjIzMThENUJCRUQ0OEYzM0FDRDU0MzFCMDAwNjI1 +NkZCMjkxNjQvY2VydC1wb2xpY3ktdjIACgkQGwAGJW+ykWSLsQ//QnVZYlPVIm4m +j6iqY0q/31ftZNn0SSfSNIlo8TJ2vVHR4s7KZZTYFv40acC8YQekHExdC2H3f07Y +eywaoHUmkh0FfqaOjHYbAb041XEgsidZWqYHik2WCZBL7buRDs55nWNjcDObEr/u +K6+JP6sxyQlE85fa1k3ed6VKSQRI5GApN2093/Zc9x/ocTA3VY3Mxi2ZhnCQ77k8 +g7S6Th79zGQ4eHac/qYLfEpC4KvcVNCbxJhzmayh+btNGbev3+boWQ+x7DrgFxCb +NnMBtITsABSipyALCFj2Vkpubpeo4X6gvF5uSNnaUmkWgjXGdbb7jTLFiaerd9D6 +DK4cqJowLzhxT5RpDTs7/5vAQYF5qBIJK7biuofA9yfw+Ro1ra3OqZ6Z7epcmIXQ +BriV0h5VahIBuyRJ4RF/BkUeHjK3zDkL9W0rENzae+3QiSulQaaFpB5+yKGEmZIh +vafIldof31sNzKVnHo2RX971rga1noI3EhRLoBZK2BnyckDWQWdK8Up+2v0yGFZ1 +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 +8IMNtArFWexbXxRsmpDkknou1IEt6w/MynF2tQ== +=LD99 -----END PGP PUBLIC KEY BLOCK----- diff -Nru monkeysign-2.0.1/tests/test_gpg.py monkeysign-2.0.2/tests/test_gpg.py --- monkeysign-2.0.1/tests/test_gpg.py 2014-10-20 22:29:41.000000000 -0400 +++ monkeysign-2.0.2/tests/test_gpg.py 2014-12-01 22:02:20.000000000 -0500 @@ -245,10 +245,11 @@ self.gpg.context.set_option('local-user', '96F47C6A') self.assertTrue(self.gpg.sign_key('7B75921E', True)) - @unittest.expectedFailure def test_sign_already_signed(self): """test if signing a already signed key fails with a meaningful message""" - raise NotImplementedError('not detecting already signed keys properly yet') + self.assertTrue(self.gpg.sign_key('Antoine Beaupré <anar...@debian.org>')) + with self.assertRaises(GpgRuntimeError): + self.gpg.sign_key('Antoine Beaupré <anar...@debian.org>') def test_encrypt_decrypt_data_armored_untrusted(self): """test if we can encrypt data to our private key (and decrypt it)"""
Thanks for your hard work, and hopefully that's not too messy. :/ A. -- À mesure que l'opression s'étend à tous les secteurs de la vie, la révolte prend l'allure d'une guerre sociale. Les émeutes renaissent et annoncent la révolution à venir. - Jean-François Brient, de la servitude moderne
signature.asc
Description: PGP signature