File: 0006-softwareproperties-AptAuth.py-Use-apt-key.patch

package info (click to toggle)
software-properties 0.96.20.2-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 4,376 kB
  • sloc: python: 5,116; makefile: 19; sh: 18
file content (110 lines) | stat: -rw-r--r-- 4,191 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
From: Julian Andres Klode <jak@debian.org>
Date: Sat, 30 Mar 2019 20:41:15 +0100
Subject: softwareproperties/AptAuth.py: Use apt-key

This fixes the code to not generate gpg keybox files rather
than classical keyring files (concatenated public keys), which
broke apt.

Closes: #867681
---
 softwareproperties/AptAuth.py | 61 +++++++++++++++++--------------------------
 1 file changed, 24 insertions(+), 37 deletions(-)

diff --git a/softwareproperties/AptAuth.py b/softwareproperties/AptAuth.py
index 7cc88ce..cbbe94f 100644
--- a/softwareproperties/AptAuth.py
+++ b/softwareproperties/AptAuth.py
@@ -22,6 +22,7 @@
 from __future__ import print_function
 
 import atexit
+import datetime
 import gettext
 import os
 import shutil
@@ -44,61 +45,47 @@ N_("Ubuntu Extras Archive Automatic Signing Key <ftpmaster@ubuntu.com>")
 
 class AptAuth:
     def __init__(self, rootdir="/"):
-        self.gpg = ["/usr/bin/gpg"]
-        self.base_opt = self.gpg + [
-            "--no-options", 
-            "--no-default-keyring",
-            "--no-auto-check-trustdb",
-            "--trust-model", "always",
-            "--keyring", os.path.join(rootdir, "etc/apt/trusted.gpg"),
-            ]
+        self.rootdir = rootdir
         self.tmpdir = tempfile.mkdtemp()
-        self.base_opt += ["--secret-keyring", 
-                          os.path.join(self.tmpdir, "secring.gpg")]
-        self.list_opt = self.base_opt + ["--with-colons",
-                                         "--batch",
-                                         "--list-keys"]
-        self.rm_opt = self.base_opt + ["--quiet",
-                                       "--batch",
-                                       "--delete-key",
-                                       "--yes"]
-        self.add_opt = self.base_opt + ["--quiet", 
-                                        "--batch",
-                                        "--import"]
+        self.aptconf = os.path.join(self.tmpdir, 'apt.conf')
+        with open(self.aptconf, 'w') as f:
+            f.write('DIR "%s";\n' % self.rootdir)
+        os.environ['APT_CONFIG'] = self.aptconf
         atexit.register(self._cleanup_tmpdir)
 
     def _cleanup_tmpdir(self):
         shutil.rmtree(self.tmpdir)
-       
+
     def list(self):
+        cmd = ["/usr/bin/apt-key", "--quiet", "adv", "--with-colons", "--batch", "--fixed-list-mode", "--list-keys"]
         res = []
-        #print(self.list_opt)
-        p = subprocess.Popen(
-            self.list_opt, stdout=PIPE, universal_newlines=True).stdout
+        p = subprocess.Popen(cmd, stdout=PIPE, stderr=PIPE, universal_newlines=True).stdout
+        name = ''
         for line in p:
             fields = line.split(":")
-            if fields[0] == "pub":
+            if fields[0] in ["pub", "uid"]:
                 name = fields[9]
-                res.append("%s %s\n%s" %((fields[4])[-8:],fields[5], _(name)))
+            if fields[0] == "pub":
+                key = fields[4]
+                expiry = datetime.date.fromtimestamp(int(fields[5])).isoformat()
+            if not name:
+                continue
+            res.append("%s %s\n%s" % (key, expiry, _(name)))
+            name = ''
         p.close()
         return res
 
     def add(self, filename):
-        #print("request to add " + filename)
-        cmd = self.add_opt[:]
-        cmd.append(filename)
-        #print("cmd is: %s" % ' '.join(cmd))
-        p = subprocess.Popen(cmd)
+        cmd = ["/usr/bin/apt-key", "--quiet", "--fakeroot", "add", filename]
+        p = subprocess.Popen(cmd, stderr=PIPE)
         return (p.wait() == 0)
         
     def update(self):
-        cmd = ["/usr/bin/apt-key", "update"]
-        p = subprocess.Popen(cmd)
+        cmd = ["/usr/bin/apt-key", "--quiet", "--fakeroot", "update"]
+        p = subprocess.Popen(cmd, stderr=PIPE)
         return (p.wait() == 0)
 
     def rm(self, key):
-        #print("request to remove " + key)
-        cmd = self.rm_opt[:]
-        cmd.append(key)
-        p = subprocess.Popen(cmd)
+        cmd = ["/usr/bin/apt-key", "--quiet", "--fakeroot", "rm", key]
+        p = subprocess.Popen(cmd, stderr=PIPE)
         return (p.wait() == 0)