first pass at revoking hostnames.
authorDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Fri, 15 Aug 2008 18:44:18 +0000 (14:44 -0400)
committerDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Fri, 15 Aug 2008 18:44:18 +0000 (14:44 -0400)
debian/changelog
src/common
src/monkeysphere-server

index e80e48ae999ac97a73838f4b3195c44db2f5bffb..59aea1eb0d1373250e3c173c7d088fcf9444f2a2 100644 (file)
@@ -5,6 +5,7 @@ monkeysphere (0.8-1) UNRELEASED; urgency=low
     of my own.
   * More monkeysphere-server diagnostics
   * monkeysphere --gen-subkey now guesses what KeyID you meant.
+  * set up host-key revocation
 
   [ Jameson Graef Rollins ]
   * fix another bug for when ssh key files are missing.
index 17955a7a1723e0d861563fcbc79dba73885a981d..24decae5dec4ebc28408934c734b0015c351136d 100644 (file)
@@ -76,6 +76,13 @@ unescape() {
     echo "$1" | sed 's/\\x3a/:/g'
 }
 
+# convert nasty chars into gpg-friendly form
+# FIXME: escape everything, not just colons!
+escape() {
+    echo "$1" | sed 's/:/\\x3a/g'
+}
+
+
 # remove all lines with specified string from specified file
 remove_line() {
     local file
index 023ce9bcfc546c72fa6d30e455e280f28c07479f..6ffd41ffb78b3b3c8d36bed25434c42060235769 100755 (executable)
@@ -402,11 +402,41 @@ EOF
 
 # revoke hostname user ID to server key
 revoke_hostname() {
+    local msg
+    local uidNum
+    local tmpuidMatch
+    local fpr
+    local linenum
+
     if [ -z "$1" ] ; then
        failure "You must specify a hostname to revoke."
     fi
 
-    failure "Sorry, not yet implemented."
+    fpr=$(fingerprint_server_key)
+    tmpuidMatch="u:$(escape "$1")"
+
+    if linenum=$(gpg_host --list-keys --with-colons --fixed-list-mode "$fpr" | egrep '^(uid|uat):' | cut -f2,10 -d: | grep -n -x -F 'r:Foo T. Bar (DO NOT USE!) <foo@example.net>') ; then
+       uidNum=${linenum%%:*}
+    else
+       failure "no non-revoked hostname '$1' is listed."
+    fi
+
+    msg="hostname removed by monkeysphere-server on $(date +%F)"
+    
+
+    revuidCommand=$(cat <<EOF
+$uidNum
+revuid
+y
+4
+$msg
+
+y
+save
+EOF
+)
+
+    echo "$revuidCommand" | gpg_host --quiet --command-fd 0 --edit-key "0x$fingerprint"\!
 
     echo "NOTE: host userID revokation has not been published."
     echo "Use '$PGRM publish-key' to publish these changes."