add a couple of bugs about posix compliance and the use of getopts
[monkeysphere.git] / src / monkeysphere
index 512d608bf7d2f376f1fb36ff3ddbe2348af0864b..523ddfe2d9518c507af34f7e2f8283b1dff29fac 100755 (executable)
@@ -13,9 +13,9 @@
 ########################################################################
 PGRM=$(basename $0)
 
-SHARE=${MONKEYSPHERE_SHARE:-"/usr/share/monkeysphere"}
-export SHARE
-. "${SHARE}/common" || exit 1
+SYSSHAREDIR=${MONKEYSPHERE_SYSSHAREDIR:-"/usr/share/monkeysphere"}
+export SYSSHAREDIR
+. "${SYSSHAREDIR}/common" || exit 1
 
 # UTC date in ISO 8601 format if needed
 DATE=$(date -u '+%FT%T')
@@ -36,7 +36,7 @@ umask 077
 usage() {
     cat <<EOF >&2
 usage: $PGRM <subcommand> [options] [args]
-MonkeySphere client tool.
+Monkeysphere client tool.
 
 subcommands:
  update-known_hosts (k) [HOST]...    update known_hosts file
@@ -63,7 +63,7 @@ gen_subkey(){
     keyExpire=
 
     # get options
-    TEMP=$(getopt -o l:e: -l length:,expire: -n "$PGRM" -- "$@")
+    TEMP=$(PATH="/usr/local/bin:$PATH" getopt -o l:e: -l length:,expire: -n "$PGRM" -- "$@") || failure "getopt failed!  Does your getopt support GNU-style long options?"
 
     if [ $? != 0 ] ; then
        exit 1
@@ -147,7 +147,7 @@ EOF
 )
 
     log verbose "generating subkey..."
-    fifoDir=$(mktemp -d)
+    fifoDir=$(mktemp -d ${TMPDIR:-/tmp}/tmp.XXXXXXXXXX)
     (umask 077 && mkfifo "$fifoDir/pass")
     echo "$editCommands" | gpg --passphrase-fd 3 3< "$fifoDir/pass" --expert --command-fd 0 --edit-key "$keyID" &
 
@@ -158,7 +158,7 @@ EOF
     log verbose "done."
 }
 
-function subkey_to_ssh_agent() {
+subkey_to_ssh_agent() {
     # try to add all authentication subkeys to the agent:
 
     local sshaddresponse
@@ -172,7 +172,7 @@ function subkey_to_ssh_agent() {
 
     if ! test_gnu_dummy_s2k_extension ; then
        failure "Your version of GnuTLS does not seem capable of using with gpg's exported subkeys.
-You may want to consider patching or upgrading.
+You may want to consider patching or upgrading to GnuTLS 2.6 or later.
 
 For more details, see:
  http://lists.gnu.org/archive/html/gnutls-devel/2008-08/msg00005.html"
@@ -210,7 +210,7 @@ You might want to run 'gpg --gen-key'."
 You might want to 'monkeysphere gen-subkey'"
     fi
 
-    workingdir=$(mktemp -d)
+    workingdir=$(mktemp -d ${TMPDIR:-/tmp}/tmp.XXXXXXXXXX)
     umask 077
     mkfifo "$workingdir/passphrase"
     keysuccess=1
@@ -270,7 +270,7 @@ unset HASH_KNOWN_HOSTS
 unset AUTHORIZED_KEYS
 
 # load global config
-[ -r "${ETC}/monkeysphere.conf" ] && . "${ETC}/monkeysphere.conf"
+[ -r "${SYSCONFIGDIR}/monkeysphere.conf" ] && . "${SYSCONFIGDIR}/monkeysphere.conf"
 
 # set monkeysphere home directory
 MONKEYSPHERE_HOME=${MONKEYSPHERE_HOME:="${HOME}/.monkeysphere"}
@@ -318,10 +318,12 @@ case $COMMAND in
     'update-known_hosts'|'update-known-hosts'|'k')
        MODE='known_hosts'
 
+       # touch the known_hosts file so that the file permission check
+       # below won't fail upon not finding the file
+       (umask 0022 && touch "$KNOWN_HOSTS")
+
        # check permissions on the known_hosts file path
-       if ! check_key_file_permissions "$USER" "$KNOWN_HOSTS" ; then
-           failure "Improper permissions on known_hosts file path."
-       fi
+       check_key_file_permissions "$USER" "$KNOWN_HOSTS" || failure
 
         # if hosts are specified on the command line, process just
         # those hosts
@@ -347,14 +349,10 @@ case $COMMAND in
        MODE='authorized_keys'
 
        # check permissions on the authorized_user_ids file path
-       if ! check_key_file_permissions "$USER" "$AUTHORIZED_USER_IDS" ; then
-           failure "Improper permissions on authorized_user_ids file path."
-       fi
+       check_key_file_permissions "$USER" "$AUTHORIZED_USER_IDS" || failure
 
        # check permissions on the authorized_keys file path
-       if ! check_key_file_permissions "$USER" "$AUTHORIZED_KEYS" ; then
-           failure "Improper permissions on authorized_keys file path."
-       fi
+       check_key_file_permissions "$USER" "$AUTHORIZED_KEYS" || failure
 
         # exit if the authorized_user_ids file is empty
        if [ ! -e "$AUTHORIZED_USER_IDS" ] ; then