~kelemeng/aptdaemon/bug640972

« back to all changes in this revision

Viewing changes to debian/patches/01_vendor-keys-download.patch

  • Committer: Bazaar Package Importer
  • Author(s): Michael Vogt
  • Date: 2010-07-02 10:28:33 UTC
  • mfrom: (1.1.23 upstream)
  • Revision ID: james.westby@ubuntu.com-20100702102833-3iqalyretgyej9o2
Tags: 0.31+bzr416-0ubuntu1
* updated to current bzr
  - fixes STAT_FAILED vs STAT_ERROR crash
* debian/patches/01_vendor-keys-download.patch:
  - add changes from lp:~mvo/aptdaemon/download-vendor-keys
    to support downloading repository vendor keys via https
* debian/patches/03_auth_me_less.patch: 
  - updated to current code
* debian/control:
  - use DH_CENTRAL=include-links

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
=== modified file 'aptdaemon/client.py'
 
2
Index: aptdaemon-0.31+bzr413/aptdaemon/client.py
 
3
===================================================================
 
4
--- aptdaemon-0.31+bzr413.orig/aptdaemon/client.py      2010-06-06 14:38:56.000000000 +0200
 
5
+++ aptdaemon-0.31+bzr413/aptdaemon/client.py   2010-07-01 18:00:13.492149001 +0200
 
6
@@ -696,6 +696,27 @@
 
7
 
 
8
     @defer.deferable_function
 
9
     @convert_dbus_exception
 
10
+    def add_vendor_key_from_keyserver(self, keyid, keyserver, wait=False, 
 
11
+                                      reply_handler=None, error_handler=None):
 
12
+        """Return a transaction which add the GPG key of a software vendor
 
13
+        to the list of trusted ones by downloading it from a given keyserver.
 
14
+
 
15
+        Keyword arguments:
 
16
+        keyid - the keyid of the key (e.g. 0x0EB12F05)
 
17
+        keyserver - the keyserver (e.g. keyserver.ubuntu.com)
 
18
+        wait - if True run the transaction immediately and return its exit
 
19
+            state instead of the transaction itself.
 
20
+        reply_handler - callback function. If specified in combination with
 
21
+            error_handler the method will be called asynchrounsouly.
 
22
+        error_handler - in case of an error the given callback gets the
 
23
+            corresponding DBus exception instance
 
24
+        """
 
25
+        return self._run_transaction("AddVendorKeyFromKeyserver", 
 
26
+                                     [keyid,keyserver],
 
27
+                                     wait, reply_handler, error_handler)
 
28
+
 
29
+    @defer.deferable_function
 
30
+    @convert_dbus_exception
 
31
     def add_vendor_key_from_file(self, path, wait=False, reply_handler=None,
 
32
                                  error_handler=None):
 
33
         """Return a transaction which add the GPG key of a software vendor
 
34
Index: aptdaemon-0.31+bzr413/aptdaemon/console.py
 
35
===================================================================
 
36
--- aptdaemon-0.31+bzr413.orig/aptdaemon/console.py     2010-06-06 14:38:56.000000000 +0200
 
37
+++ aptdaemon-0.31+bzr413/aptdaemon/console.py  2010-07-01 18:00:13.492149001 +0200
 
38
@@ -99,6 +99,12 @@
 
39
                                             reply_handler=self._run_transaction,
 
40
                                             error_handler=self._on_exception)
 
41
 
 
42
+    def add_vendor_key_from_keyserver(self, keyid, keyserver):
 
43
+        """Install repository key file."""
 
44
+        self._client.add_vendor_key_from_keyserver(keyid, keyserver,
 
45
+                                            reply_handler=self._run_transaction,
 
46
+                                            error_handler=self._on_exception)
 
47
+
 
48
     def remove_vendor_key(self, fingerprint):
 
49
         """Remove repository key."""
 
50
         self._client.remove_vendor_key(fingerprint,
 
51
@@ -524,6 +530,12 @@
 
52
     parser.add_option("", "--add-vendor-key", default="",
 
53
                       action="store", type="string", dest="add_vendor_key",
 
54
                       help=_("Add the vendor to the trusted ones"))
 
55
+    parser.add_option("", "--add-vendor-key-from-keyserver", default="",
 
56
+                      action="store", type="string", 
 
57
+                      help=_("Add the vendor keyid (also needs --keyserver)"))
 
58
+    parser.add_option("", "--keyserver", default="",
 
59
+                      action="store", type="string", 
 
60
+                      help=_("Use the given keyserver for looking up keys"))
 
61
     parser.add_option("", "--add-repository", default="", 
 
62
                       action="store", type="string", dest="add_repository",
 
63
                       help=_("Add new repository from the given deb-line"))
 
64
@@ -574,6 +586,9 @@
 
65
     elif options.add_vendor_key:
 
66
         #FIXME: Should detect if from stdin or file
 
67
         con.add_vendor_key_from_file(options.add_vendor_key)
 
68
+    elif options.add_vendor_key_from_keyserver and options.keyserver:
 
69
+        con.add_vendor_key_from_keyserver(options.add_vendor_key_from_keyserver,
 
70
+                                          options.keyserver)
 
71
     elif options.remove_vendor_key:
 
72
         con.remove_vendor_key(options.remove_vendor_key)
 
73
     elif options.list_trusted_vendor_keys:
 
74
Index: aptdaemon-0.31+bzr413/aptdaemon/core.py
 
75
===================================================================
 
76
--- aptdaemon-0.31+bzr413.orig/aptdaemon/core.py        2010-06-06 14:38:56.000000000 +0200
 
77
+++ aptdaemon-0.31+bzr413/aptdaemon/core.py     2010-07-01 18:00:42.232149001 +0200
 
78
@@ -1176,6 +1176,25 @@
 
79
                                   packages=([], [], [], [], package_names))
 
80
 
 
81
     @dbus_deferred_method(APTDAEMON_DBUS_INTERFACE,
 
82
+                          in_signature="ss", out_signature="s",
 
83
+                          sender_keyword="sender")
 
84
+    def AddVendorKeyFromKeyserver(self, keyid, keyserver, sender):
 
85
+        """Download and install the given keyid via keyserver
 
86
+
 
87
+        Keyword arguments:
 
88
+        keyid - the keyid of the key (e.g. 0x0EB12F05)
 
89
+        keyserver - the keyserver (e.g. keyserver.ubuntu.com)
 
90
+        sender -- the unique D-Bus name of the sender (provided by D-Bus)
 
91
+        """
 
92
+        #FIXME: Should not be a transaction
 
93
+        log.info("InstallVendorKeyFromKeyserver() was called: %s %s" % (keyid, keyserver))
 
94
+        return self._create_trans(enums.ROLE_ADD_VENDOR_KEY_FROM_KEYSERVER,
 
95
+                                  policykit1.PK_ACTION_ADD_VENDOR_KEY,
 
96
+                                  sender,
 
97
+                                  kwargs={"keyid": keyid,
 
98
+                                          "keyserver": keyserver})
 
99
+
 
100
+    @dbus_deferred_method(APTDAEMON_DBUS_INTERFACE,
 
101
                           in_signature="s", out_signature="s",
 
102
                           sender_keyword="sender")
 
103
     def AddVendorKeyFromFile(self, path, sender):
 
104
@@ -1187,7 +1206,7 @@
 
105
         """
 
106
         #FIXME: Should not be a transaction
 
107
         log.info("InstallVendorKeyFile() was called: %s" % path)
 
108
-        return self._create_trans(enums.ROLE_ADD_VENDOR_KEY,
 
109
+        return self._create_trans(enums.ROLE_ADD_VENDOR_KEY_FILE,
 
110
                                   policykit1.PK_ACTION_ADD_VENDOR_KEY,
 
111
                                   sender,
 
112
                                   kwargs={"path": path})
 
113
Index: aptdaemon-0.31+bzr413/aptdaemon/enums.py
 
114
===================================================================
 
115
--- aptdaemon-0.31+bzr413.orig/aptdaemon/enums.py       2010-06-06 14:38:56.000000000 +0200
 
116
+++ aptdaemon-0.31+bzr413/aptdaemon/enums.py    2010-07-01 18:00:13.502149001 +0200
 
117
@@ -82,6 +82,7 @@
 
118
 ROLE_REMOVE_PACKAGES = "role-remove-packages"
 
119
 ROLE_COMMIT_PACKAGES = "role-commit-packages"
 
120
 ROLE_ADD_VENDOR_KEY_FILE = "role-add-vendor-key-file"
 
121
+ROLE_ADD_VENDOR_KEY_FROM_KEYSERVER = "role-add-vendor-key-from-keyserver"
 
122
 ROLE_REMOVE_VENDOR_KEY = "role-remove-vendor-key"
 
123
 ROLE_FIX_INCOMPLETE_INSTALL = "role-fix-incomplete-install"
 
124
 ROLE_FIX_BROKEN_DEPENDS = "role-fix-broken-depends"
 
125
Index: aptdaemon-0.31+bzr413/aptdaemon/worker.py
 
126
===================================================================
 
127
--- aptdaemon-0.31+bzr413.orig/aptdaemon/worker.py      2010-06-06 14:38:56.000000000 +0200
 
128
+++ aptdaemon-0.31+bzr413/aptdaemon/worker.py   2010-07-01 18:00:13.502149001 +0200
 
129
@@ -27,6 +27,7 @@
 
130
 import struct
 
131
 import sys
 
132
 import time
 
133
+import tempfile
 
134
 import traceback
 
135
 
 
136
 import apt
 
137
@@ -37,6 +38,7 @@
 
138
 import gobject
 
139
 import pkg_resources
 
140
 from softwareproperties.AptAuth import AptAuth
 
141
+import subprocess
 
142
 
 
143
 from enums import *
 
144
 from errors import *
 
145
@@ -162,6 +164,8 @@
 
146
                 self.update_cache()
 
147
             elif self.trans.role == ROLE_ADD_VENDOR_KEY_FILE:
 
148
                 self.add_vendor_key_from_file(**self.trans.kwargs)
 
149
+            elif self.trans.role == ROLE_ADD_VENDOR_KEY_FROM_KEYSERVER:
 
150
+                self.add_vendor_key_from_keyserver(**self.trans.kwargs)
 
151
             elif self.trans.role == ROLE_REMOVE_VENDOR_KEY:
 
152
                 self.remove_vendor_key(**self.trans.kwargs)
 
153
             # Process the transactions which require a consistent cache
 
154
@@ -303,7 +307,28 @@
 
155
             pkg.mark_install(False, True, True)
 
156
             resolver.clear(pkg)
 
157
             resolver.protect(pkg)
 
158
 
159
+
 
160
+    def add_vendor_key_from_keyserver(self, keyid, keyserver):
 
161
+        """Add the signing key from the given (keyid, keyserver) to the
 
162
+           trusted vendors.
 
163
+
 
164
+        Keyword argument:
 
165
+        keyid - the keyid of the key (e.g. 0x0EB12F05)
 
166
+        keyserver - the keyserver (e.g. keyserver.ubuntu.com)
 
167
+        """
 
168
+        log.info("Adding vendor key from keyserver: %s %s" % (keyid, keyserver))
 
169
+        p = subprocess.Popen(["/usr/bin/apt-key", "adv", 
 
170
+                              "--keyserver", keyserver,
 
171
+                              "--recv", keyid])
 
172
+        while p.poll() is None:
 
173
+            while gobject.main_context_default().pending():
 
174
+                gobject.main_context_default().iteration()
 
175
+            time.sleep(0.05)
 
176
+        if p.returncode != 0:
 
177
+            raise TransactionFailed(ERROR_KEY_NOT_INSTALLED,
 
178
+                                    "Keyid %s couldn't be download from %s" % \
 
179
+                                        (keyid, keyserver))
 
180
+
 
181
     def add_vendor_key_from_file(self, path):
 
182
         """Add the signing key from the given file to the trusted vendors.
 
183