summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/monkeysphere-host30
-rw-r--r--src/share/mh/add_name3
-rw-r--r--src/share/mh/import_key3
3 files changed, 31 insertions, 5 deletions
diff --git a/src/monkeysphere-host b/src/monkeysphere-host
index 1fa3aea..4f536e2 100755
--- a/src/monkeysphere-host
+++ b/src/monkeysphere-host
@@ -79,9 +79,14 @@ gpg_host() {
# list the info about the a key, in colon format, to stdout
gpg_host_list_keys() {
- gpg_host --list-keys --with-colons --fixed-list-mode \
- --with-fingerprint --with-fingerprint \
- "$1"
+ if [ "$1" ] ; then
+ gpg_host --list-keys --with-colons --fixed-list-mode \
+ --with-fingerprint --with-fingerprint \
+ "$1"
+ else
+ gpg_host --list-keys --with-colons --fixed-list-mode \
+ --with-fingerprint --with-fingerprint
+ fi
}
# edit key scripts, takes scripts on stdin, and keyID as first input
@@ -151,6 +156,25 @@ check_key_userid() {
grep -q -x -F "$tmpuidMatch" 2>/dev/null
}
+prompt_userid_exists() {
+ local userID="$1"
+ local gpgOut
+ local fingerprint
+
+ if gpgOut=$(gpg_host_list_keys "=${userID}" 2>/dev/null) ; then
+ fingerprint=$(echo "$gpgOut" | grep '^fpr:' | cut -d: -f10)
+ if [ "$PROMPT" = "true" ] ; then
+ printf "Service name '%s' is already being used by key '%s'.\nAre you sure you want to use it again? (y/N) " "$fingerprint" "$userID" >&2
+ read OK; OK=${OK:=N}
+ if [ "${OK/y/Y}" != 'Y' ] ; then
+ failure "Service name not added."
+ fi
+ else
+ log info "Key '%s' is already using the service name '%s'." "$fingerprint" "$userID" >&2
+ fi
+ fi
+}
+
# run command looped over keys
multi_key() {
local cmd="$1"
diff --git a/src/share/mh/add_name b/src/share/mh/add_name
index 0eeefb7..754ced4 100644
--- a/src/share/mh/add_name
+++ b/src/share/mh/add_name
@@ -34,6 +34,9 @@ keyID=$(check_key_input "$@")
check_key_userid "$keyID" "$serviceName" && \
failure "Service name '$serviceName' already exists on key '$keyID'."
+# test that a key with that user ID does not already exist
+prompt_userid_exists "$serviceName"
+
check_service_name "$serviceName"
if [ "$PROMPT" = "true" ] ; then
diff --git a/src/share/mh/import_key b/src/share/mh/import_key
index 1b6f267..0f362b8 100644
--- a/src/share/mh/import_key
+++ b/src/share/mh/import_key
@@ -27,8 +27,7 @@ if [ -z "$serviceName" ] ; then
fi
# test that a key with that user ID does not already exist
-check_key_userid "$serviceName" "$serviceName" && \
- failure "A key with service name '$serviceName' already exists."
+prompt_userid_exists "$serviceName"
# check that the service name is well formatted
check_service_name "$serviceName"