summaryrefslogtreecommitdiffstats
path: root/meta/lib
diff options
context:
space:
mode:
authorIoan-Adrian Ratiu <adrian.ratiu@ni.com>2016-03-10 12:02:56 +0200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-03-11 16:50:45 +0000
commit0b088e0829f0187cd67df97b6825674a5a4087ce (patch)
treea0dd9b4180badec6a8187250f2a01d32b1e0e6c3 /meta/lib
parent2fccd8aa1c96a6db056e2352b1d5039ce671a102 (diff)
downloadpoky-0b088e0829f0187cd67df97b6825674a5a4087ce.tar.gz
gpg_sign: detach_sign: fix gpg > 2.1 STDIN file descriptor
Starting from v2.1 passing passwords directly to gpg does not work anymore [1], instead a loopback interface must be used otherwise gpg >2.1 will error out with: "gpg: signing failed: Inappropriate ioctl for device" gpg <2.1 does not work with the new --pinentry-mode arg and gives an invalid option error, so we detect what is the running version of gpg and pass it accordingly. [1] https://wiki.archlinux.org/index.php/GnuPG#Unattended_passphrase (From OE-Core rev: 0413bd8e294ca8ac972ac68662b43a981952f5ae) Signed-off-by: Ioan-Adrian Ratiu <adrian.ratiu@ni.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib')
-rw-r--r--meta/lib/oe/gpg_sign.py16
1 files changed, 16 insertions, 0 deletions
diff --git a/meta/lib/oe/gpg_sign.py b/meta/lib/oe/gpg_sign.py
index 059381d5e3..0b5dc20892 100644
--- a/meta/lib/oe/gpg_sign.py
+++ b/meta/lib/oe/gpg_sign.py
@@ -66,6 +66,13 @@ class LocalSigner(object):
66 if armor: 66 if armor:
67 cmd += ['--armor'] 67 cmd += ['--armor']
68 68
69 #gpg > 2.1 supports password pipes only through the loopback interface
70 #gpg < 2.1 errors out if given unknown parameters
71 dots = self.get_gpg_version().split('.')
72 assert len(dots) >= 2
73 if int(dots[0]) >= 2 and int(dots[1]) >= 1:
74 cmd += ['--pinentry-mode', 'loopback']
75
69 cmd += [input_file] 76 cmd += [input_file]
70 77
71 try: 78 try:
@@ -89,6 +96,15 @@ class LocalSigner(object):
89 raise Exception("Failed to sign '%s" % input_file) 96 raise Exception("Failed to sign '%s" % input_file)
90 97
91 98
99 def get_gpg_version(self):
100 """Return the gpg version"""
101 import subprocess
102 try:
103 return subprocess.check_output((self.gpg_bin, "--version")).split()[2]
104 except subprocess.CalledProcessError as e:
105 raise bb.build.FuncFailed("Could not get gpg version: %s" % e)
106
107
92 def verify(self, sig_file): 108 def verify(self, sig_file):
93 """Verify signature""" 109 """Verify signature"""
94 cmd = self.gpg_bin + " --verify " 110 cmd = self.gpg_bin + " --verify "