tests/basic now tests for adding and revoking hostnames.
[monkeysphere.git] / tests / basic
index f6d1f3bb1538e8c3e624b4812a0d18b8172f3417..d83749bd6e94bb6b629e870c50870d63c53cb835 100755 (executable)
@@ -1,6 +1,8 @@
 #!/usr/bin/env bash
 
 # Tests to ensure that the monkeysphere is working
+#
+# unset MONKEYSPHERE_TEST_NO_EXAMINE to examine
 
 # Authors: 
 #   Daniel Kahn Gillmor <dkg@fifthhorseman.net>
@@ -26,16 +28,16 @@ source "$TESTDIR"/common
 
 ## make sure that the right tools are installed to run the test.  the
 ## test has *more* requirements than plain ol' monkeysphere:
+[ -f /usr/sbin/sshd ] || { echo "You must have sshd installed to run this test." ; exit 1; }
 which socat >/dev/null || { echo "You must have socat installed to run this test." ; exit 1; }
 
 perl -MCrypt::OpenSSL::RSA -e 1 2>/dev/null || { echo "You must have the perl module Crypt::OpenSSL::RSA installed to run this test.  
 On debian-derived systems, you can set this up with:
   apt-get install libcrypt-openssl-rsa-perl" ; exit 1; }
 
-
-perl -MDigest::SHA1 -e 1 2>/dev/null || { echo "You must have the perl module Digest::SHA1 installed to run this test.  
+perl -MDigest::SHA -e 1 2>/dev/null || { echo "You must have the perl module Digest::SHA installed to run this test.  
 On debian-derived systems, you can set this up with:
-  apt-get install libdigest-sha1-perl" ; exit 1; }
+  apt-get install libdigest-sha-perl" ; exit 1; }
 
 ## FIXME: other checks?
 
@@ -64,7 +66,7 @@ ssh_test() {
 
     # wait until the socket is created before continuing
     while [ ! -S "$SOCKET" ] ; do
-       sleep 1
+       sleep 2
     done
 
     # make a client connection to the socket
@@ -74,15 +76,14 @@ ssh_test() {
        || RETURN="$?"
 
     # kill the sshd process if it's still running
-    kill "$SSHD_PID"
+    kill "$SSHD_PID" || true
     SSHD_PID=
 
-    echo "##### return $RETURN"
     if [ "$RETURN" = "$CODE" ] ; then
-       echo "##### ssh connection test returned as desired"
+       echo "##### ssh connection test PASSED. returned: $RETURN"
        return 0
     else
-       echo "##### ssh connection test failed.  expected return code $CODE"
+       echo "##### ssh connection test FAILED. returned: $RETURN, expected: $CODE"
        return 1
     fi
 }
@@ -129,6 +130,10 @@ export MONKEYSPHERE_LOG_LEVEL=DEBUG
 export MONKEYSPHERE_CORE_KEYLENGTH=1024
 export MONKEYSPHERE_PROMPT=false
 
+# unset SUBKEYS_FOR_AGENT variable which, if set, would confuse the
+# into trying to use the user's key, instead of the testuser's key
+unset MONKEYSPHERE_SUBKEYS_FOR_AGENT
+
 export SSHD_CONFIG="$TEMPDIR"/sshd_config
 export SOCKET="$TEMPDIR"/ssh-socket
 
@@ -146,7 +151,8 @@ export DISPLAY=monkeys
 echo
 echo "##################################################"
 echo "### configuring testuser home..."
-cp -a "$TESTDIR"/home/testuser "$TEMPDIR"/
+(cd "$TESTDIR"/home && find testuser | cpio -pdu "$TEMPDIR")
+
 # set up environment for testuser
 export TESTHOME="$TEMPDIR"/testuser
 export GNUPGHOME="$TESTHOME"/.gnupg
@@ -166,7 +172,7 @@ get_gpg_prng_arg >> "$GNUPGHOME"/gpg.conf
 echo
 echo "##################################################"
 echo "### configuring admin home..."
-cp -a "$TESTDIR"/home/admin "$TEMPDIR"/
+(cd "$TESTDIR"/home && find admin | cpio -pdu "$TEMPDIR")
 
 # set up sshd
 echo
@@ -275,7 +281,6 @@ monkeysphere-authentication update-users $(whoami)
 # FIXME: this is maybe not failing properly for:
 # ms: improper group or other writability on path '/tmp'.
 
-
 ######################################################################
 ### TESTS
 
@@ -295,7 +300,7 @@ mv "$TESTHOME"/.monkeysphere/authorized_user_ids{,.bak}
 monkeysphere-authentication update-users $(whoami)
 echo
 echo "##################################################"
-echo "### ssh connection test for server authentication denial..."
+echo "### ssh connection test for failure..."
 ssh_test 255
 mv "$TESTHOME"/.monkeysphere/authorized_user_ids{.bak,}
 
@@ -308,7 +313,7 @@ chmod g+w "$TESTHOME"/.monkeysphere/authorized_user_ids
 monkeysphere-authentication update-users $(whoami)
 echo
 echo "##################################################"
-echo "### ssh connection test for server authentication denial..."
+echo "### ssh connection test for failure..."
 ssh_test 255
 chmod g-w "$TESTHOME"/.monkeysphere/authorized_user_ids
 echo
@@ -318,25 +323,157 @@ chmod o+w "$TESTHOME"/.monkeysphere/authorized_user_ids
 monkeysphere-authentication update-users $(whoami)
 echo
 echo "##################################################"
-echo "### ssh connection test for server authentication denial..."
+echo "### ssh connection test for failure..."
 ssh_test 255
 chmod o-w "$TESTHOME"/.monkeysphere/authorized_user_ids
 monkeysphere-authentication update-users $(whoami)
 
+# test symlinks
+echo
+echo "##################################################"
+echo "### setup for symlink tests..."
+cp -a "$TESTHOME"/.monkeysphere{,.linktest}
+
+echo
+echo "##################################################"
+echo "### make authorized_user_ids an absolute symlink and updating..."
+mv "$TESTHOME"/.monkeysphere/authorized_user_ids{,.bak}
+ln -s "$TESTHOME"/.monkeysphere{.linktest,}/authorized_user_ids
+monkeysphere-authentication update-users $(whoami)
+echo
+echo "##################################################"
+echo "### ssh connection test for success..."
+ssh_test
+echo
+echo "##################################################"
+echo "### create bad permissions on link dir and updating..."
+chmod o+w "$TESTHOME"/.monkeysphere.linktest
+monkeysphere-authentication update-users $(whoami)
+echo
+echo "##################################################"
+echo "### ssh connection test for failure..."
+ssh_test 255
+chmod o-w "$TESTHOME"/.monkeysphere.linktest
+echo
+echo "##################################################"
+echo "### make authorized_user_ids a relative symlink and updating..."
+ln -sf ../.monkeysphere.linktest/authorized_user_ids "$TESTHOME"/.monkeysphere/authorized_user_ids
+monkeysphere-authentication update-users $(whoami)
+echo
+echo "##################################################"
+echo "### ssh connection test for success..."
+ssh_test
+echo
+echo "##################################################"
+echo "### create bad permissions on link dir updating..."
+chmod o+w "$TESTHOME"/.monkeysphere.linktest
+monkeysphere-authentication update-users $(whoami)
+echo
+echo "##################################################"
+echo "### ssh connection test for failure..."
+ssh_test 255
+chmod o-w "$TESTHOME"/.monkeysphere.linktest
+# FIXME: implement check of link path, and uncomment this test
+# echo
+# echo "##################################################"
+# echo "### create bad permissions on link dir and updating..."
+# chmod o+w "$TESTHOME"/.monkeysphere
+# monkeysphere-authentication update-users $(whoami)
+# echo
+# echo "##################################################"
+# echo "### ssh connection test for failure..."
+# ssh_test 255
+# chmod o-w "$TESTHOME"/.monkeysphere
+rm "$TESTHOME"/.monkeysphere/authorized_user_ids
+mv "$TESTHOME"/.monkeysphere/authorized_user_ids{.bak,}
+
+echo
+echo "##################################################"
+echo "### make .monkeysphere directory an absolute symlink and updating..."
+mv "$TESTHOME"/.monkeysphere{,.bak}
+ln -s "$TESTHOME"/.monkeysphere{.linktest,}
+monkeysphere-authentication update-users $(whoami)
+echo
+echo "##################################################"
+echo "### ssh connection test for success..."
+ssh_test
+echo
+echo "##################################################"
+echo "### create bad permissions on link dir and updating..."
+chmod o+w "$TESTHOME"/.monkeysphere.linktest
+monkeysphere-authentication update-users $(whoami)
+echo
+echo "##################################################"
+echo "### ssh connection test for failure..."
+ssh_test 255
+chmod o-w "$TESTHOME"/.monkeysphere.linktest
+echo
+echo "##################################################"
+echo "### make .monkeysphere directory a relative symlink and updating..."
+ln -sfn .monkeysphere{.linktest,}
+monkeysphere-authentication update-users $(whoami)
+echo
+echo "##################################################"
+echo "### ssh connection test for success..."
+ssh_test
+echo
+echo "##################################################"
+echo "### create bad permissions on link dir updating..."
+chmod o+w "$TESTHOME"/.monkeysphere.linktest
+monkeysphere-authentication update-users $(whoami)
+echo
+echo "##################################################"
+echo "### ssh connection test for failure..."
+ssh_test 255
+chmod o-w "$TESTHOME"/.monkeysphere.linktest
+rm "$TESTHOME"/.monkeysphere
+mv "$TESTHOME"/.monkeysphere{.bak,}
+
+# ensure we're back to normal:
+echo
+echo "##################################################"
+echo "### making sure we are back to normal..."
+monkeysphere-authentication update-users $(whoami)
+ssh_test
+
+echo
+echo "##################################################"
+echo "### ssh connection test with hostname 'testhost2' added..."
+monkeysphere-host add-hostname testhost2
+ssh_test
+
+echo
+echo "##################################################"
+echo "### ssh connection test for failure with 'testhost' revoked..."
+monkeysphere-host revoke-hostname testhost
+ssh_test 255
+
 # FIXME: addtest: remove admin as id-certifier and check ssh failure
 
-# FIXME: addtest: add hostname on host key
-# FIXME: addtest: revoke hostname on host key and check ssh failure
+# FIXME: addtest: how do we test that set-expire makes sense after new
+# hostnames have been added?
+
+# FIXME: addtest: revoke the host key and check ssh failure
 
-# addtest: revoke the host key and check ssh failure
 # test to make sure things are OK after the previous tests:
+echo
+echo "##################################################"
+echo "### settings reset, updating..."
+monkeysphere-authentication update-users $(whoami)
+echo
+echo "##################################################"
+echo "### ssh connection test for success..."
 ssh_test
+
 echo
 echo "##################################################"
-echo "### ssh connection test for server with revoked key..."
+echo "### revoking host key..."
 # generate the revocation certificate and feed it directly to the test
 # user's keyring (we're not publishing to the keyservers)
 monkeysphere-host revoke-key | gpg --import
+echo
+echo "##################################################"
+echo "### ssh connection test for failure..."
 ssh_test 255