fix ma so that the setup command is folded into the other commands, so
authorJameson Graef Rollins <jrollins@finestructure.net>
Wed, 18 Feb 2009 04:13:31 +0000 (23:13 -0500)
committerJameson Graef Rollins <jrollins@finestructure.net>
Wed, 18 Feb 2009 04:13:31 +0000 (23:13 -0500)
it's never needed to be run manually, and can therefore be supressed
in the usage/documentation.  Also, add setup to the postinst script so
that it's setup on installation.
Also add pipefail to ma, and try to supress unnecessary gpg output,
and redirect other to log debug.

man/man8/monkeysphere-authentication.8
man/man8/monkeysphere-host.8
packaging/debian/monkeysphere.postinst
src/monkeysphere-authentication
src/monkeysphere-host
src/share/ma/add_certifier
src/share/ma/setup
src/share/mh/import_key
src/share/mh/set_expire

index 9b8baa9960d7d1940c9519dd6b25ebe38682bc7a..4d453d377337ed74452cad84b6eab9a13e7d9a43 100644 (file)
@@ -21,13 +21,7 @@ authentication.
 
 .SH SUBCOMMANDS
 
-\fBmonkeysphere-authentication\fP takes various subcommands.
-.TP
-.B setup
-Setup the server for Monkeysphere user authentication.  This command
-is idempotent, which means it can be run multiple times to make sure
-the setup is correct, without adversely affecting existing setups.
-`s' may be used in place of `setup'.
+\fBmonkeysphere-authentication\fP takes various subcommands:
 .TP
 .B update-users [ACCOUNT]...
 Rebuild the monkeysphere-controlled authorized_keys files.  For each
@@ -62,6 +56,21 @@ Instruct system to ignore user identity certifications made by KEYID.
 List key IDs trusted by the system to certify user identities.  `c'
 may be used in place of `list-id-certifiers'.
 .TP
+.B help
+Output a brief usage summary.  `h' or `?' may be used in place of
+`help'.
+.TP
+.B version
+show version number
+
+Other commands:
+.TP
+.B setup
+Setup the server for Monkeysphere user authentication.  This command
+is idempotent and run automatically by the other commands, and should
+therefore not usually need to be run manually.  `s' may be used in
+place of `setup'.
+.TP
 .B diagnostics
 Review the state of the server with respect to authentication.  `d'
 may be used in place of `diagnostics'.
@@ -72,13 +81,6 @@ authentication "sphere" keyring.  This takes a single argument
 (multiple gpg arguments need to be quoted).  Use this command with
 caution, as modifying the authentication sphere keyring can affect ssh
 user authentication.
-.TP
-.B help
-Output a brief usage summary.  `h' or `?' may be used in place of
-`help'.
-.TP
-.B version
-show version number
 
 .SH SETUP USER AUTHENTICATION
 
index 062f0aadb68aa8e76cf56b736888c63a2538aad1..330b6107a20a28c2b4c2ce355039e62b90fa8a41 100644 (file)
@@ -23,6 +23,14 @@ connection authentication.
 
 \fBmonkeysphere-host\fP takes various subcommands:
 .TP
+.B import-key [NAME[:PORT]]
+Import a pem-encoded ssh secret host key, from stdin.  NAME[:PORT] is
+used to specify the hostname (and port) used in the user ID of the new
+OpenPGP key.  If NAME is not specified, then the system
+fully-qualified domain name will be used (ie. `hostname -f').  If PORT
+is not specified, the no port is added to the user ID, which means
+port 22 is assumed.  `i' may be used in place of `import-key'.
+.TP
 .B show-key
 Output information about host's OpenPGP and SSH keys.  `s' may be used
 in place of `show-key'.
@@ -61,13 +69,15 @@ Revoke the host's OpenPGP key.  `r' may be used in place of
 Publish the host's OpenPGP key to the keyserver.  `p' may be used in
 place of `publish-key'.
 .TP
-.B import-key [NAME[:PORT]]
-Import a pem-encoded ssh secret host key, from stdin.  NAME[:PORT] is
-used to specify the hostname (and port) used in the user ID of the new
-OpenPGP key.  If NAME is not specified, then the system
-fully-qualified domain name will be used (ie. `hostname -f').  If PORT
-is not specified, the no port is added to the user ID, which means
-port 22 is assumed.  `i' may be used in place of `import-key'.
+.B help
+Output a brief usage summary.  `h' or `?' may be used in place of
+`help'.
+.TP
+.B version
+show version number
+
+
+Other commands:
 .TP
 .B diagnostics
 Review the state of the monkeysphere server host key and report on
@@ -75,13 +85,6 @@ suggested changes.  Among other checks, this includes making sure
 there is a valid host key, that the key is published, that the sshd
 configuration points to the right place, etc.  `d' may be used in
 place of `diagnostics'.
-.TP
-.B help
-Output a brief usage summary.  `h' or `?' may be used in place of
-`help'.
-.TP
-.B version
-show version number
 
 .SH SETUP HOST AUTHENTICATION
 
index c697ae22d39f3327cfaddae5031fd4e8e7dda9e9..8e7977173b71fd370194613c7ebdfe88ac3e50be 100755 (executable)
@@ -17,8 +17,8 @@ if ! getent passwd monkeysphere >/dev/null ; then
        monkeysphere
 fi
 
-# import the host ssh key into the monkeysphere, with no expiration
-# FIXME: figure out how to do this best
+# setup monkeysphere authentication
+monkeysphere-authentication setup
 
 # dh_installdeb will replace this with shell code automatically
 # generated by other debhelper scripts.
index c349e6fc93c3c062e07b0d5c4f60b3ca2f7daf07..8a4146f36c9df4a2fa1f417d29dd9532a6117c1e 100755 (executable)
@@ -14,6 +14,9 @@
 ########################################################################
 set -e
 
+# set the pipefail option so pipelines fail on first command failure
+set -o pipefail
+
 PGRM=$(basename $0)
 
 SYSSHAREDIR=${MONKEYSPHERE_SYSSHAREDIR:-"/usr/share/monkeysphere"}
@@ -52,7 +55,6 @@ usage: $PGRM <subcommand> [options] [args]
 Monkeysphere authentication admin tool.
 
 subcommands:
- setup (s)                           setup monkeysphere user authentication
  update-users (u) [USER]...          update user authorized_keys files
  add-id-certifier (c+) KEYID         import and tsign a certification key
    --domain (-n) DOMAIN                limit ID certifications to DOMAIN
@@ -95,19 +97,12 @@ core_fingerprint() {
        | grep ^fpr: | cut -d: -f10
 }
 
-# fail if authentication has not been setup
-check_no_setup() {
-    # FIXME: what is the right test to do here?
-    [ -d "$MADATADIR" ] \
-       || failure "This host appears to have not yet been set up for Monkeysphere authentication.
-Please run 'monkeysphere-authentication setup' first."
-}
-
 # export signatures from core to sphere
 gpg_core_sphere_sig_transfer() {
     log debug "exporting core local sigs to sphere..."
     gpg_core --export-options export-local-sigs --export | \
-       gpg_sphere "--import-options import-local-sigs --import"
+       gpg_sphere "--import-options import-local-sigs --import" \
+       2>&1 | log debug
 }
 
 ########################################################################
@@ -164,40 +159,47 @@ shift
 case $COMMAND in
     'setup'|'setup'|'s')
        source "${MASHAREDIR}/setup"
-       setup "$@"
+       setup
        ;;
 
     'update-users'|'update-user'|'u')
-       check_no_setup
+       source "${MASHAREDIR}/setup"
+       setup
        source "${MASHAREDIR}/update_users"
        update_users "$@"
        ;;
 
     'add-identity-certifier'|'add-id-certifier'|'add-certifier'|'c+')
-       check_no_setup
+       source "${MASHAREDIR}/setup"
+       setup
        source "${MASHAREDIR}/add_certifier"
        add_certifier "$@"
        ;;
 
     'remove-identity-certifier'|'remove-id-certifier'|'remove-certifier'|'c-')
-       check_no_setup
+       source "${MASHAREDIR}/setup"
+       setup
        source "${MASHAREDIR}/remove_certifier"
        remove_certifier "$@"
        ;;
 
     'list-identity-certifiers'|'list-id-certifiers'|'list-certifiers'|'list-certifier'|'c')
-       check_no_setup
+       source "${MASHAREDIR}/setup"
+       setup
        source "${MASHAREDIR}/list_certifiers"
-       list_certifiers "$@"
+       list_certifiers
        ;;
 
     'diagnostics'|'d')
+       source "${MASHAREDIR}/setup"
+       setup
        source "${MASHAREDIR}/diagnostics"
        diagnostics
        ;;
 
     'gpg-cmd')
-       check_no_setup
+       source "${MASHAREDIR}/setup"
+       setup
        gpg_sphere "$@"
        ;;
 
index 11121cc8731f2fd56c533af472dba6a31256ddcf..3bee007f8d47067c623301a9e3b10cef7b71f3e9 100755 (executable)
@@ -80,7 +80,8 @@ gpg_host() {
     GNUPGHOME="$GNUPGHOME_HOST" gpg "$@"
 }
 
-# command to list the info about the host key, in colon format
+# command to list the info about the host key, in colon format, to
+# stdout
 gpg_host_list() {
     gpg_host --list-keys --with-colons --fixed-list-mode \
        --with-fingerprint --with-fingerprint \
@@ -92,8 +93,8 @@ gpg_host_list() {
 # FIXME: should we supress all the edit script spew?  or pipe it
 # through log debug?
 gpg_host_edit() {
-    gpg_host --quiet --command-fd 0 --edit-key \
-       "0x${HOST_FINGERPRINT}!" "$@"
+    gpg_host --quiet --command-fd 0 --no-tty --edit-key \
+       "0x${HOST_FINGERPRINT}!" "$@" 2>&1 | log debug
 }
 
 # export the host public key to the monkeysphere gpg pub key file
index 54ea67334fdb94fb749a6a106f41fbd454b9a19c..d34f0dec08d44ce8f1a362cefc8090a543ebf49f 100644 (file)
@@ -151,14 +151,15 @@ EOF
 # core ltsigns the newly imported certifier key
 log debug "executing core ltsign script..."
 if echo "$ltsignCommand" | \
-    gpg_core --quiet --command-fd 0 --edit-key "0x${fingerprint}!" ; then
+    gpg_core --quiet --command-fd 0 --no-tty --edit-key "0x${fingerprint}!" \
+     2>&1 | log debug ; then
 
     # transfer the new sigs back to the sphere keyring
     gpg_core_sphere_sig_transfer
 
     # update the sphere trustdb
     log debug "updating sphere trustdb..."
-    gpg_sphere "--check-trustdb"
+    gpg_sphere "--check-trustdb" 2>&1 | log debug
 
     log info "Identity certifier added."
 else
index f59187b8447bbfab4205e4e4bcfe2a4328f12eae..a17e4f2cad07e18515fbfa30071a06526f85165b 100644 (file)
@@ -59,7 +59,7 @@ EOF
        log debug "generating monkeysphere authentication trust core key ($CORE_KEYLENGTH bits)..."
        PEM2OPENPGP_USAGE_FLAGS=certify \
            PEM2OPENPGP_NEWKEY=$CORE_KEYLENGTH pem2openpgp "$CORE_UID" \
-           | gpg_core --import \
+           | gpg_core --import 2>&1 | log debug \
            || failure "Could not import new key for Monkeysphere authentication trust core"
 
        # get fingerprint of core key.  should definitely not be empty at this point
@@ -75,17 +75,17 @@ EOF
 
     # export the core key to the sphere keyring
     log debug "exporting core pub key to sphere keyring..."
-    gpg_core --export | gpg_sphere --import
+    gpg_core --quiet --export | gpg_sphere "--quiet --import"
 
     # ensure that the authentication sphere checker has absolute ownertrust on the expected key.
     log debug "setting ultimate owner trust on core key in gpg_sphere..."
-    printf "%s:6:\n" "$CORE_FPR" | gpg_sphere --import-ownertrust
-    gpg_sphere --export-ownertrust | log debug
+    printf "%s:6:\n" "$CORE_FPR" | gpg_sphere "--quiet --import-ownertrust"
+    gpg_sphere "--export-ownertrust" 2>&1 | log debug
 
     # check the owner trust
     log debug "checking gpg_sphere owner trust set properly..."
     local ORIG_TRUST
-    if ORIG_TRUST=$(gpg_sphere --export-ownertrust | grep '^[^#]') ; then
+    if ORIG_TRUST=$(gpg_sphere "--quiet --export-ownertrust" | grep '^[^#]') ; then
        if [ "${CORE_FPR}:6:" != "$ORIG_TRUST" ] ; then
            failure "Monkeysphere authentication trust sphere should explicitly trust the core.  It does not have proper ownertrust settings."
        fi
@@ -98,7 +98,7 @@ EOF
     # our preferences are reasonable (i.e. 3 marginal OR 1 fully
     # trusted certifications are sufficient to grant full validity.
     log debug "checking trust model for authentication ..."
-    local TRUST_MODEL=$(gpg_sphere "--with-colons --fixed-list-mode --list-keys" \
+    local TRUST_MODEL=$(gpg_sphere "--quiet --with-colons --fixed-list-mode --list-keys" \
        | head -n1 | grep "^tru:" | cut -d: -f3,6,7)
     log debug "sphere trust model: $TRUST_MODEL"
     if [ "$TRUST_MODEL" != '1:3:1' ] ; then
index d14fc13dbf0d485d5ebe47f4c683078d2d1d72a3..557bb7faaee6712942bfe5bdd0eb5b195013c505 100644 (file)
@@ -46,7 +46,7 @@ chmod 700 "${GNUPGHOME_HOST}"
 log verbose "importing ssh key..."
 # translate ssh key to a private key
 PEM2OPENPGP_USAGE_FLAGS=authenticate pem2openpgp "$userID" \
-    | gpg_host --import
+    | gpg_host --import 2>&1 | log debug
 
 # load the new host fpr into the fpr variable.  this is so we can
 # create the gpg pub key file.  we have to do this from the secret key
@@ -57,6 +57,8 @@ load_fingerprint_secret
 # export to gpg public key to file
 update_gpg_pub_file
 
+log info "host key imported:"
+
 # show info about new key
 show_key
 
index 14d2501b6928d5a87f33989cfb3825be2b3bf53f..ae7c13a7089dedaa4baf37bc520f3053a6f137e9 100644 (file)
@@ -30,7 +30,7 @@ else
     log debug "extending without prompting."
 fi
 
-log info "setting host key expiration to ${extendTo}:"
+log info "setting host key expiration to ${extendTo}."
 
 log debug "executing host expire script..."
 gpg_host_edit expire <<EOF