summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2011-04-12 14:07:13 +0100
committerLars Wirzenius <liw@liw.fi>2011-04-12 14:07:13 +0100
commit6cef3c7c3f7ba2a2076db19ae75b865ff32147d8 (patch)
tree6940101f2c135d424ebc7307f8005e7cc399de18
parent0bea46faad3b9234148e654c56193fbf6d827ce3 (diff)
downloadobnam-6cef3c7c3f7ba2a2076db19ae75b865ff32147d8.tar.gz
Store client's key in client list and add client-list subcommand to list the keys.
-rw-r--r--obnamlib/plugins/encryption_plugin.py43
-rw-r--r--obnamlib/repo.py3
-rwxr-xr-xtest-encrypted-repo2
3 files changed, 34 insertions, 14 deletions
diff --git a/obnamlib/plugins/encryption_plugin.py b/obnamlib/plugins/encryption_plugin.py
index 30753e53..fd706d66 100644
--- a/obnamlib/plugins/encryption_plugin.py
+++ b/obnamlib/plugins/encryption_plugin.py
@@ -32,11 +32,14 @@ class EncryptionPlugin(obnamlib.ObnamPlugin):
('repository-toplevel-init', self.toplevel_init),
('repository-read-data', self.toplevel_read_data),
('repository-write-data', self.toplevel_write_data),
+ ('repository-add-client', self.add_client),
]
for name, callback in hooks:
self.app.hooks.add_callback(name, callback)
self._pubkey = None
+
+ self.app.register_command('client-keys', self.client_keys)
@property
def keyid(self):
@@ -103,18 +106,30 @@ class EncryptionPlugin(obnamlib.ObnamPlugin):
userkeys.remove(keyid)
self.write_keyring(repo, toplevel, userkeys)
- def add_client(self, repo, client_public_key):
- self.add_to_userkeys(repo, 'metadata', client_public_key)
- self.add_to_userkeys(repo, 'clientlist', client_public_key)
- self.add_to_userkeys(repo, 'chunks', client_public_key)
- self.add_to_userkeys(repo, 'chunksums', client_public_key)
- # client will add itself to the clientlist and create its own toplevel
-
- def remove_client(self, repo, client_keyid):
- # client may remove itself, since it has access to the symmetric keys
- # we assume the client-specific toplevel has already been removed
- self.remove_from_userkeys(repo, 'chunksums', client_keyid)
- self.remove_from_userkeys(repo, 'chunks', client_keyid)
- self.remove_from_userkeys(repo, 'clientlist', client_keyid)
- self.remove_from_userkeys(repo, 'metadata', client_keyid)
+ def add_client(self, clientlist, client_name):
+ clientlist.set_client_keyid(client_name, self.keyid)
+
+ def client_keys(self, args):
+ repo = self.app.open_repository()
+ clients = repo.list_clients()
+ for client in clients:
+ keyid = repo.clientlist.get_client_keyid(client)
+ if keyid is None:
+ keyid = 'no key'
+ print client, keyid
+
+# def add_client(self, repo, client_public_key):
+# self.add_to_userkeys(repo, 'metadata', client_public_key)
+# self.add_to_userkeys(repo, 'clientlist', client_public_key)
+# self.add_to_userkeys(repo, 'chunks', client_public_key)
+# self.add_to_userkeys(repo, 'chunksums', client_public_key)
+# # client will add itself to the clientlist and create its own toplevel
+
+# def remove_client(self, repo, client_keyid):
+# # client may remove itself, since it has access to the symmetric keys
+# # we assume the client-specific toplevel has already been removed
+# self.remove_from_userkeys(repo, 'chunksums', client_keyid)
+# self.remove_from_userkeys(repo, 'chunks', client_keyid)
+# self.remove_from_userkeys(repo, 'clientlist', client_keyid)
+# self.remove_from_userkeys(repo, 'metadata', client_keyid)
diff --git a/obnamlib/repo.py b/obnamlib/repo.py
index c0423f01..5060653e 100644
--- a/obnamlib/repo.py
+++ b/obnamlib/repo.py
@@ -236,6 +236,7 @@ class Repository(object):
self.hooks.new('repository-toplevel-init')
self.hooks.new_filter('repository-read-data')
self.hooks.new_filter('repository-write-data')
+ self.hooks.new('repository-add-client')
def checksum(self, data):
'''Return checksum of data.
@@ -306,6 +307,8 @@ class Repository(object):
'''Commit changes to root node, and unlock it.'''
for client_name in self.added_clients:
self.clientlist.add_client(client_name)
+ self.hooks.call('repository-add-client',
+ self.clientlist, client_name)
self.added_clients = []
for client_name in self.removed_clients:
client_id = self.clientlist.get_client_id(client_name)
diff --git a/test-encrypted-repo b/test-encrypted-repo
index f62d06db..03dc6fab 100755
--- a/test-encrypted-repo
+++ b/test-encrypted-repo
@@ -19,3 +19,5 @@ $cmd restore --generation latest --to temp.restored
summain -r temp.restored/$(pwd)/temp.data > temp.restored.manifest
diff -u temp.data.manifest temp.restored.manifest
+echo "client keys:"
+$cmd client-keys