From b7e17887ac20bc5916d830f5282b07f4c0360c2a Mon Sep 17 00:00:00 2001 From: Jameson Graef Rollins Date: Sat, 31 Jan 2009 17:30:11 -0500 Subject: break out monkeysphere-{host,authentication} subcommands into seperate scripts. MUCH MORE WORK NEEDED to get these working. --- src/subcommands/mh/revoke-hostname | 89 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100755 src/subcommands/mh/revoke-hostname (limited to 'src/subcommands/mh/revoke-hostname') diff --git a/src/subcommands/mh/revoke-hostname b/src/subcommands/mh/revoke-hostname new file mode 100755 index 0000000..decac86 --- /dev/null +++ b/src/subcommands/mh/revoke-hostname @@ -0,0 +1,89 @@ +#!/usr/bin/env bash + +# Monkeysphere host revoke-hostname subcommand +# +# The monkeysphere scripts are written by: +# Jameson Rollins +# Jamie McClelland +# Daniel Kahn Gillmor +# +# They are Copyright 2008, and are all released under the GPL, version 3 +# or later. + +# revoke hostname user ID from host key + +local userID +local fingerprint +local tmpuidMatch +local line +local uidIndex +local message +local revuidCommand + +if [ -z "$1" ] ; then + 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 "http://web.monkeysphere.info/bugs/revoke-hostname-revoking-wrong-userid/" +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}" + +fingerprint=$(fingerprint_server_key) + +# match to only ultimately trusted user IDs +tmpuidMatch="u:$(echo $userID | gpg_escape)" + +# find the index of the requsted user ID +# NOTE: this is based on circumstantial evidence that the order of +# this output is the appropriate index +if line=$(gpg_host --list-keys --with-colons --fixed-list-mode "0x${fingerprint}!" \ + | egrep '^(uid|uat):' | cut -f2,10 -d: | grep -n -x -F "$tmpuidMatch") ; then + uidIndex=${line%%:*} +else + failure "No non-revoked user ID '$userID' is found." +fi + +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 + failure "User ID not revoked." +fi + +message="Hostname removed by monkeysphere-server $DATE" + +# edit-key script command to revoke user ID +revuidCommand=$(cat < Date: Sat, 31 Jan 2009 18:04:21 -0500 Subject: turn subcommands into subfunctions, that will need to be sourced and executed. --- src/monkeysphere-host | 29 +++++++++++++++++++++++++++++ src/subcommands/mh/add-hostname | 6 +++++- src/subcommands/mh/add-revoker | 4 ++++ src/subcommands/mh/diagnostics | 7 ++++++- src/subcommands/mh/extend-key | 4 ++++ src/subcommands/mh/gen-key | 2 +- src/subcommands/mh/import-key | 2 +- src/subcommands/mh/publish-key | 4 ++++ src/subcommands/mh/revoke-hostname | 6 +++++- src/subcommands/mh/revoke-key | 4 ++++ src/subcommands/mh/show-key | 37 ------------------------------------- 11 files changed, 63 insertions(+), 42 deletions(-) delete mode 100755 src/subcommands/mh/show-key (limited to 'src/subcommands/mh/revoke-hostname') diff --git a/src/monkeysphere-host b/src/monkeysphere-host index 5c97aa6..7ba0700 100755 --- a/src/monkeysphere-host +++ b/src/monkeysphere-host @@ -131,6 +131,35 @@ check_host_keyring() { || failure "You don't appear to have a Monkeysphere host key on this server. Please run 'monkeysphere-server gen-key' first." } +# show info about the host key +show_key() { + local fingerprintPGP + local fingerprintSSH + local ret=0 + + # FIXME: you shouldn't have to be root to see the host key fingerprint + if is_root ; then + check_host_keyring + fingerprintPGP=$(fingerprint_server_key) + gpg_authentication "--fingerprint --list-key --list-options show-unusable-uids $fingerprintPGP" 2>/dev/null + echo "OpenPGP fingerprint: $fingerprintPGP" + else + log info "You must be root to see host OpenPGP fingerprint." + ret='1' + fi + + if [ -f "${SYSDATADIR}/ssh_host_rsa_key.pub" ] ; then + fingerprintSSH=$(ssh-keygen -l -f "${SYSDATADIR}/ssh_host_rsa_key.pub" | \ + awk '{ print $1, $2, $4 }') + echo "ssh fingerprint: $fingerprintSSH" + else + log info "SSH host key not found." + ret='1' + fi + +return $ret +} + ######################################################################## # MAIN ######################################################################## diff --git a/src/subcommands/mh/add-hostname b/src/subcommands/mh/add-hostname index fc1ae96..7726a29 100755 --- a/src/subcommands/mh/add-hostname +++ b/src/subcommands/mh/add-hostname @@ -12,6 +12,8 @@ # add hostname user ID to server key +add_hostname() { + local userID local fingerprint local tmpuidMatch @@ -61,7 +63,7 @@ if echo "$adduidCommand" | \ # update the trustdb for the authentication keyring gpg_authentication "--check-trustdb" - show_server_key + show_key echo echo "NOTE: User ID added to key, but key not published." @@ -69,3 +71,5 @@ if echo "$adduidCommand" | \ else failure "Problem adding user ID." fi + +} diff --git a/src/subcommands/mh/add-revoker b/src/subcommands/mh/add-revoker index 8783cd1..8c4651e 100755 --- a/src/subcommands/mh/add-revoker +++ b/src/subcommands/mh/add-revoker @@ -12,5 +12,9 @@ # add a revoker to the host key +add_revoker() { + # FIXME: implement! failure "not implemented yet!" + +} diff --git a/src/subcommands/mh/diagnostics b/src/subcommands/mh/diagnostics index f411e06..5b04b14 100755 --- a/src/subcommands/mh/diagnostics +++ b/src/subcommands/mh/diagnostics @@ -10,7 +10,10 @@ # They are Copyright 2008, and are all released under the GPL, version 3 # or later. -# * check on the status and validity of the key and public certificates +# check on the status and validity of the key and public certificates + +diagnostics() { + local seckey local keysfound local curdate @@ -177,3 +180,5 @@ if [ "$problemsfound" -gt 0 ]; then else echo "Everything seems to be in order!" fi + +} diff --git a/src/subcommands/mh/extend-key b/src/subcommands/mh/extend-key index 755fe13..8f1ecc2 100755 --- a/src/subcommands/mh/extend-key +++ b/src/subcommands/mh/extend-key @@ -12,6 +12,8 @@ # extend the lifetime of a host key: +extend_key() { + local fpr=$(fingerprint_server_key) local extendTo="$1" @@ -27,3 +29,5 @@ EOF echo echo "NOTE: Host key expiration date adjusted, but not yet published." echo "Run '$PGRM publish-key' to publish the new expiration date." + +} diff --git a/src/subcommands/mh/gen-key b/src/subcommands/mh/gen-key index 37469c7..da2e40d 100755 --- a/src/subcommands/mh/gen-key +++ b/src/subcommands/mh/gen-key @@ -115,4 +115,4 @@ gpg_authentication "--export-options export-minimal --armor --export 0x${fingerp log info "SSH host public key in OpenPGP form: ${SYSDATADIR}/ssh_host_rsa_key.pub.gpg" # show info about new key -show_server_key +show_key diff --git a/src/subcommands/mh/import-key b/src/subcommands/mh/import-key index c33550b..d60e982 100755 --- a/src/subcommands/mh/import-key +++ b/src/subcommands/mh/import-key @@ -82,4 +82,4 @@ gpg_authentication "--export-options export-minimal --armor --export 0x${fingerp log info "SSH host public key in OpenPGP form: ${SYSDATADIR}/ssh_host_rsa_key.pub.gpg" # show info about new key -show_server_key +show_key diff --git a/src/subcommands/mh/publish-key b/src/subcommands/mh/publish-key index 792d858..8b36a18 100755 --- a/src/subcommands/mh/publish-key +++ b/src/subcommands/mh/publish-key @@ -12,6 +12,8 @@ # publish server key to keyserver +publish_key() { + read -p "Really publish host key to $KEYSERVER? (y/N) " OK; OK=${OK:=N} if [ ${OK/y/Y} != 'Y' ] ; then failure "key not published." @@ -22,3 +24,5 @@ fingerprint=$(fingerprint_server_key) # publish host key gpg_authentication "--keyserver $KEYSERVER --send-keys '0x${fingerprint}!'" + +} diff --git a/src/subcommands/mh/revoke-hostname b/src/subcommands/mh/revoke-hostname index decac86..0a773a3 100755 --- a/src/subcommands/mh/revoke-hostname +++ b/src/subcommands/mh/revoke-hostname @@ -12,6 +12,8 @@ # revoke hostname user ID from host key +revoke_hostname() { + local userID local fingerprint local tmpuidMatch @@ -79,7 +81,7 @@ if echo "$revuidCommand" | \ # update the trustdb for the authentication keyring gpg_authentication "--check-trustdb" - show_server_key + show_key echo echo "NOTE: User ID revoked, but revocation not published." @@ -87,3 +89,5 @@ if echo "$revuidCommand" | \ else failure "Problem revoking user ID." fi + +} diff --git a/src/subcommands/mh/revoke-key b/src/subcommands/mh/revoke-key index b4ce401..3810a0b 100755 --- a/src/subcommands/mh/revoke-key +++ b/src/subcommands/mh/revoke-key @@ -12,5 +12,9 @@ # revoke host key +revoke_key() { + # FIXME: implement! failure "not implemented yet!" + +} diff --git a/src/subcommands/mh/show-key b/src/subcommands/mh/show-key deleted file mode 100755 index c62ec16..0000000 --- a/src/subcommands/mh/show-key +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env bash - -# Monkeysphere host show-key subcommand -# -# The monkeysphere scripts are written by: -# Jameson Rollins -# Jamie McClelland -# Daniel Kahn Gillmor -# -# They are Copyright 2008, and are all released under the GPL, version 3 -# or later. - -local fingerprintPGP -local fingerprintSSH -local ret=0 - -# FIXME: you shouldn't have to be root to see the host key fingerprint -if is_root ; then - check_host_keyring - fingerprintPGP=$(fingerprint_server_key) - gpg_authentication "--fingerprint --list-key --list-options show-unusable-uids $fingerprintPGP" 2>/dev/null - echo "OpenPGP fingerprint: $fingerprintPGP" -else - log info "You must be root to see host OpenPGP fingerprint." - ret='1' -fi - -if [ -f "${SYSDATADIR}/ssh_host_rsa_key.pub" ] ; then - fingerprintSSH=$(ssh-keygen -l -f "${SYSDATADIR}/ssh_host_rsa_key.pub" | \ - awk '{ print $1, $2, $4 }') - echo "ssh fingerprint: $fingerprintSSH" -else - log info "SSH host key not found." - ret='1' -fi - -return $ret -- cgit v1.2.3