summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/thandy/SignerCLI.py5
-rw-r--r--lib/thandy/formats.py3
-rw-r--r--lib/thandy/keys.py3
3 files changed, 9 insertions, 2 deletions
diff --git a/lib/thandy/SignerCLI.py b/lib/thandy/SignerCLI.py
index 55adb41..476e7d5 100644
--- a/lib/thandy/SignerCLI.py
+++ b/lib/thandy/SignerCLI.py
@@ -305,7 +305,10 @@ def main():
if cmd in [ "keygen", "listkeys", "addrole", "delrole", "chpass",
"dumpkey", "makepackage", "makebundle", "signkeylist",
"makekeylist", "signkeylist", "makemirrorlist", ]:
- globals()[cmd](args)
+ try:
+ globals()[cmd](args)
+ except thandy.BadPassword:
+ print >>sys.stderr, "Password incorrect."
else:
usage()
diff --git a/lib/thandy/formats.py b/lib/thandy/formats.py
index 8a27a65..cf9ff1f 100644
--- a/lib/thandy/formats.py
+++ b/lib/thandy/formats.py
@@ -790,6 +790,9 @@ def makeKeylistObj(keylist_fname, includePrivate=False):
klist = []
for k in keys:
k = thandy.keys.RSAKey.fromJSon(k)
+ if includePrivate and not k.isPrivateKey():
+ raise thandy.FormatException("Private key information not found.")
+
klist.append({'key': k.format(private=includePrivate), 'roles' : k.getRoles() })
result = { '_type' : "Keylist",
diff --git a/lib/thandy/keys.py b/lib/thandy/keys.py
index 5442b26..a243fa7 100644
--- a/lib/thandy/keys.py
+++ b/lib/thandy/keys.py
@@ -47,7 +47,8 @@ class PublicKey:
paths.
"""
assert role in thandy.formats.ALL_ROLES
- self._roles.append((role, path))
+ if (role, path) not in self._roles:
+ self._roles.append((role, path))
def clearRoles(self):
"""Remove all roles from this key."""
del self._roles[:]