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
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.
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
25
+ return self._run_transaction("AddVendorKeyFromKeyserver",
27
+ wait, reply_handler, error_handler)
29
+ @defer.deferable_function
30
+ @convert_dbus_exception
31
def add_vendor_key_from_file(self, path, wait=False, reply_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
39
reply_handler=self._run_transaction,
40
error_handler=self._on_exception)
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)
48
def remove_vendor_key(self, fingerprint):
49
"""Remove repository key."""
50
self._client.remove_vendor_key(fingerprint,
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"))
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,
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))
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
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)
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,
97
+ kwargs={"keyid": keyid,
98
+ "keyserver": keyserver})
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 @@
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,
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
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
140
from softwareproperties.AptAuth import AptAuth
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
155
pkg.mark_install(False, True, True)
157
resolver.protect(pkg)
160
+ def add_vendor_key_from_keyserver(self, keyid, keyserver):
161
+ """Add the signing key from the given (keyid, keyserver) to the
165
+ keyid - the keyid of the key (e.g. 0x0EB12F05)
166
+ keyserver - the keyserver (e.g. keyserver.ubuntu.com)
168
+ log.info("Adding vendor key from keyserver: %s %s" % (keyid, keyserver))
169
+ p = subprocess.Popen(["/usr/bin/apt-key", "adv",
170
+ "--keyserver", keyserver,
172
+ while p.poll() is None:
173
+ while gobject.main_context_default().pending():
174
+ gobject.main_context_default().iteration()
176
+ if p.returncode != 0:
177
+ raise TransactionFailed(ERROR_KEY_NOT_INSTALLED,
178
+ "Keyid %s couldn't be download from %s" % \
179
+ (keyid, keyserver))
181
def add_vendor_key_from_file(self, path):
182
"""Add the signing key from the given file to the trusted vendors.