make sure that revokehostname sees the pieces it needs to see in order to create...
[monkeysphere.git] / src / share / mh / revoke_hostname
index 77f1f0dcc71ddb3eb82d3bc8919268baf9ae60cd..6b80802408ef0b2eb0a55f9cb422667d1bab813e 100644 (file)
@@ -19,7 +19,6 @@ local userID
 local fingerprint
 local tmpuidMatch
 local line
 local fingerprint
 local tmpuidMatch
 local line
-local uidIndex
 local message
 local revuidCommand
 
 local message
 local revuidCommand
 
@@ -27,47 +26,33 @@ if [ -z "$1" ] ; then
     failure "You must specify a hostname to revoke."
 fi
 
     failure "You must specify a hostname to revoke."
 fi
 
-echo "WARNING: There is a known bug in this function."
-echo "This function has been known to occasionally revoke the wrong user ID."
-echo "Please see the following bug report for more information:"
-echo "https://labs.riseup.net/code/issues/show/422"
-read -p "Are you sure you would like to proceed? (y/N) " OK; OK=${OK:=N}
-if [ ${OK/y/Y} != 'Y' ] ; then
-    failure "aborting."
-fi
-
 userID="ssh://${1}"
 
 # make sure the user ID to revoke
 userID="ssh://${1}"
 
 # make sure the user ID to revoke
-uidIndex=$(find_host_userid) || \
+find_host_userid "$userID" || \
     failure "No non-revoked user ID found matching '$userID'."
 
 if [ "$PROMPT" = "true" ] ; then
     failure "No non-revoked user ID found matching '$userID'."
 
 if [ "$PROMPT" = "true" ] ; then
-    echo "The following host key user ID will be revoked:"
-    echo "  $userID"
-    read -p "Are you sure you would like to revoke this user ID? (y/N) " OK; OK=${OK:=N}
-    if [ ${OK/y/Y} != 'Y' ] ; then
+    printf "The following host key user ID will be revoked:\n  %s\nAre you sure you would like to revoke this user ID? (Y/n) " "$userID" >&2
+    read OK; OK=${OK:=Y}
+    if [ "${OK/y/Y}" != 'Y' ] ; then
        failure "User ID not revoked."
     fi
 else
     log debug "revoking user ID without prompting."
 fi
 
        failure "User ID not revoked."
     fi
 else
     log debug "revoking user ID without prompting."
 fi
 
-# edit-key script command to revoke user ID
-revuidCommand=$(cat <<EOF
-$uidIndex
-revuid
-y
-4
-Hostname removed by monkeysphere-host: $DATE
+# actually revoke:
 
 
-y
-save
-EOF
-    )  
+# the gpg secring might not contain the host key we are trying to
+# revoke (let alone any selfsig over that host key), but the plain
+# --export won't contain the secret key.  "keytrans revokeuserid"
+# needs access to both pieces, so we feed it both of them.
 
 
-# execute edit-key script
-if echo "$revuidCommand" | gpg_host_edit ; then
+if (cat "$GNUPGHOME_HOST/secring.gpg" && gpg_host --export "$HOST_FINGERPRINT") | \
+    "$SYSSHAREDIR/keytrans" revokeuserid \
+    "$HOST_FINGERPRINT" "$userID" | gpg_host --import ; then
+    gpg_host --check-trustdb
 
     update_gpg_pub_file
 
 
     update_gpg_pub_file