From de3031b28bbccd2cb47a9029e69064330ee137e8 Mon Sep 17 00:00:00 2001 From: Jameson Graef Rollins Date: Thu, 10 Jul 2008 20:03:06 -0400 Subject: [PATCH] Properly scope getopt for subcommands. Fix bug in add-certifier command. Add command to pass gpg command directly to gpg-authentication keyring. --- man/man8/monkeysphere-server.8 | 7 +- src/monkeysphere | 90 ++++++++------- src/monkeysphere-server | 200 +++++++++++++++++++-------------- 3 files changed, 166 insertions(+), 131 deletions(-) diff --git a/man/man8/monkeysphere-server.8 b/man/man8/monkeysphere-server.8 index 0e699b9..f7a9755 100644 --- a/man/man8/monkeysphere-server.8 +++ b/man/man8/monkeysphere-server.8 @@ -56,9 +56,10 @@ place of `publish-key'. Instruct system to trust user identity certifications made by KEYID. A certifier domain can be specified with the `-n' or `--domain' option. A certifier trust level can be specified with the `-t' or -`--trust' option (default is `full'). A certifier trust depth can be -specified with the `-d' or `--depth' option (default is 1). `a' may -be used in place of `add-identity-certifier'. +`--trust' option (possible values are `1' for `marginal' and `2' for +`full' (default is `2')). A certifier trust depth can be specified +with the `-d' or `--depth' option (default is 1). `a' may be used in +place of `add-identity-certifier'. .TP .B remove-identity-certifier KEYID Instruct system to ignore user identity certifications made by KEYID. diff --git a/src/monkeysphere b/src/monkeysphere index cfd5735..cb6c06c 100755 --- a/src/monkeysphere +++ b/src/monkeysphere @@ -50,10 +50,45 @@ EOF # generate a subkey with the 'a' usage flags set # FIXME: this needs some tweaking to clean it up gen_subkey(){ + local keyLength + local keyExpire local keyID local gpgOut local userID + # set default key parameter values + keyLength= + keyExpire= + + # get options + TEMP=$(getopt -o l:e: -l length:,expire: -n "$PGRM" -- "$@") + + if [ $? != 0 ] ; then + exit 1 + fi + + # Note the quotes around `$TEMP': they are essential! + eval set -- "$TEMP" + + while true ; do + case "$1" in + -l|--length) + keyLength="$2" + shift 2 + ;; + -e|--expire) + keyExpire="$2" + shift 2 + ;; + --) + shift + ;; + *) + break + ;; + esac + done + keyID="$1" gpgOut=$(gpg --quiet --fixed-list-mode --list-keys --with-colons \ @@ -81,11 +116,8 @@ gen_subkey(){ fi # set subkey defaults - KEY_TYPE="RSA" - KEY_LENGTH=${KEY_LENGTH:-} - KEY_USAGE="auth" # prompt about key expiration if not specified - if [ -z "$KEY_EXPIRE" ] ; then + if [ -z "$keyExpire" ] ; then cat <m = key expires in n months y = key expires in n years EOF - while [ -z "$KEY_EXPIRE" ] ; do - read -p "Key is valid for? (0) " KEY_EXPIRE - if ! test_gpg_expire ${KEY_EXPIRE:=0} ; then + while [ -z "$keyExpire" ] ; do + read -p "Key is valid for? (0) " keyExpire + if ! test_gpg_expire ${keyExpire:=0} ; then echo "invalid value" - unset KEY_EXPIRE + unset keyExpire fi done - elif ! test_gpg_expire "$KEY_EXPIRE" ; then - failure "invalid key expiration value '$KEY_EXPIRE'." + elif ! test_gpg_expire "$keyExpire" ; then + failure "invalid key expiration value '$keyExpire'." fi # generate the list of commands that will be passed to edit-key @@ -113,8 +145,8 @@ S E A Q -$KEY_LENGTH -$KEY_EXPIRE +$keyLength +$keyExpire save EOF ) @@ -169,40 +201,6 @@ COMMAND="$1" [ "$COMMAND" ] || failure "Type '$PGRM help' for usage." shift -# unset option variables -unset KEY_LENGTH -unset KEY_EXPIRE - -# get options for key generation and add-certifier functions -TEMP=$(getopt -o l:e: -l length:,expire: -n "$PGRM" -- "$@") - -if [ $? != 0 ] ; then - usage - exit 1 -fi - -# Note the quotes around `$TEMP': they are essential! -eval set -- "$TEMP" - -while true ; do - case "$1" in - -l|--length) - KEY_LENGTH="$2" - shift 2 - ;; - -e|--expire) - KEY_EXPIRE="$2" - shift 2 - ;; - --) - shift - ;; - *) - break - ;; - esac -done - case $COMMAND in 'update-known_hosts'|'update-known-hosts'|'k') MODE='known_hosts' diff --git a/src/monkeysphere-server b/src/monkeysphere-server index a5497c2..68c4b24 100755 --- a/src/monkeysphere-server +++ b/src/monkeysphere-server @@ -37,7 +37,7 @@ usage: $PGRM [options] [args] MonkeySphere server admin tool. subcommands: - update-users (u) [USER]... update users authorized_keys files + update-users (u) [USER]... update user authorized_keys files gen-key (g) [HOSTNAME] generate gpg key for the server -l|--length BITS key length in bits (2048) @@ -48,11 +48,15 @@ subcommands: add-identity-certifier (a) KEYID import and tsign a certification key -n|--domain DOMAIN domain of certifier () - -t|--trust TRUST trust level of certifier ('full') + -t|--trust TRUST trust level of certifier (2) -d|--depth DEPTH trust depth for certifier (1) remove-identity-certifier (r) KEYID remove a certification key list-identity-certifiers (l) list certification keys + gpg-authentication-cmd execute a gpg command to the + authentication keyring as the + monkeysphere user + help (h,?) this help EOF @@ -215,11 +219,56 @@ update_users() { # generate server gpg key gen_key() { + local keyType + local keyLength + local keyUsage + local keyExpire + local revoker local hostName local userID local keyParameters local fingerprint + # set default key parameter values + keyType="RSA" + keyLength="2048" + keyUsage="auth" + keyExpire= + revoker= + + # get options + TEMP=$(getopt -o l:e:r: -l length:,expire:,revoker: -n "$PGRM" -- "$@") + + if [ $? != 0 ] ; then + exit 1 + fi + + # Note the quotes around `$TEMP': they are essential! + eval set -- "$TEMP" + + while true ; do + case "$1" in + -l|--length) + keyLength="$2" + shift 2 + ;; + -e|--expire) + keyExpire="$2" + shift 2 + ;; + -r|--revoker) + revoker="$2" + shift 2 + ;; + --) + shift + ;; + *) + break + ;; + esac + done + hostName=${1:-$(hostname --fqdn)} userID="ssh://${hostName}" @@ -228,12 +277,8 @@ gen_key() { failure "Key for '$userID' already exists" fi - # set key variables - KEY_TYPE="RSA" - KEY_LENGTH=${KEY_LENGTH:="2048"} - KEY_USAGE="auth" # prompt about key expiration if not specified - if [ -z "$KEY_EXPIRE" ] ; then + if [ -z "$keyExpire" ] ; then cat <m = key expires in n months y = key expires in n years EOF - while [ -z "$KEY_EXPIRE" ] ; do - read -p "Key is valid for? (0) " KEY_EXPIRE - if ! test_gpg_expire ${KEY_EXPIRE:=0} ; then + while [ -z "$keyExpire" ] ; do + read -p "Key is valid for? (0) " keyExpire + if ! test_gpg_expire ${keyExpire:=0} ; then echo "invalid value" - unset KEY_EXPIRE + unset keyExpire fi done - elif ! test_gpg_expire "$KEY_EXPIRE" ; then - failure "invalid key expiration value '$KEY_EXPIRE'." + elif ! test_gpg_expire "$keyExpire" ; then + failure "invalid key expiration value '$keyExpire'." fi # set key parameters keyParameters=$(cat <