Generalize filesystem location variables (closes http://web.monkeysphere.info/bugs...
[monkeysphere.git] / src / monkeysphere
index da72c9a1c906a6af9c4ff6457730a07b52645439..1db4f20ce48fba8670aeb4507d4bed4b9ca0f853 100755 (executable)
@@ -1,9 +1,10 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 # monkeysphere: MonkeySphere client tool
 #
 # The monkeysphere scripts are written by:
 # Jameson Rollins <jrollins@fifthhorseman.net>
+# Jamie McClelland <jm@mayfirst.org>
 # Daniel Kahn Gillmor <dkg@fifthhorseman.net>
 #
 # They are Copyright 2008, and are all released under the GPL, version 3
 ########################################################################
 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
 
-# date in UTF format if needed
+# UTC date in ISO 8601 format if needed
 DATE=$(date -u '+%FT%T')
 
 # unset some environment variables that could screw things up
@@ -35,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
@@ -62,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
@@ -92,7 +93,7 @@ gen_subkey(){
 
     if [ -z "$1" ] ; then
        # find all secret keys
-       keyID=$(gpg --with-colons --list-secret-keys | grep ^sec | cut -f5 -d:)
+       keyID=$(gpg --with-colons --list-secret-keys | grep ^sec | cut -f5 -d: | sort -u)
        # if multiple sec keys exist, fail
        if (( $(echo "$keyID" | wc -l) > 1 )) ; then
            echo "Multiple secret keys found:"
@@ -114,7 +115,7 @@ key before joining the monkeysphere. You can do this with:
 
     # fail if multiple sec lines are returned, which means the id
     # given is not unique
-    if [ $(echo "$gpgOut" | grep '^sec:' | wc -l) -gt '1' ] ; then
+    if [ $(echo "$gpgOut" | grep -c '^sec:') -gt '1' ] ; then
        failure "Key ID '$keyID' is not unique."
     fi
 
@@ -145,8 +146,8 @@ save
 EOF
 )
 
-    log info "generating subkey..."
-    fifoDir=$(mktemp -d)
+    log verbose "generating subkey..."
+    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" &
 
@@ -154,7 +155,7 @@ EOF
 
     rm -rf "$fifoDir"
     wait
-    log info "done."
+    log verbose "done."
 }
 
 function subkey_to_ssh_agent() {
@@ -209,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
@@ -269,10 +270,10 @@ 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}/.config/monkeysphere"}
+MONKEYSPHERE_HOME=${MONKEYSPHERE_HOME:="${HOME}/.monkeysphere"}
 mkdir -p -m 0700 "$MONKEYSPHERE_HOME"
 
 # load local config