summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Assistant/Install.hs17
-rw-r--r--Assistant/Ssh.hs7
-rw-r--r--debian/changelog2
3 files changed, 19 insertions, 7 deletions
diff --git a/Assistant/Install.hs b/Assistant/Install.hs
index 0db021ef7..b5d3ca98d 100644
--- a/Assistant/Install.hs
+++ b/Assistant/Install.hs
@@ -15,6 +15,7 @@ import Assistant.Ssh
import Locations.UserConfig
import Utility.FileMode
import Utility.Shell
+import Utility.TempFile
#ifdef darwin_HOST_OS
import Utility.OSX
@@ -53,21 +54,25 @@ ensureInstalled = go =<< standaloneAppBase
installAutoStart program autostartfile
{- This shim is only updated if it doesn't
- - already exist with the right content. This
- - ensures that there's no race where it would have
- - worked, but is unavailable due to being updated. -}
+ - already exist with the right content. -}
sshdir <- sshDir
let shim = sshdir </> "git-annex-shell"
+ let runshell var = "exec " ++ base </> "runshell" ++
+ " git-annex-shell -c \"" ++ var ++ "\""
let content = unlines
[ shebang
, "set -e"
- , "exec", base </> "runshell" ++
- " git-annex-shell -c \"$SSH_ORIGINAL_COMMAND\""
+ , "if [ \"x$SSH_ORIGINAL_COMMAND\" != \"x\" ]; then"
+ , runshell "$SSH_ORIGINAL_COMMAND"
+ , "else"
+ , runshell "$@"
+ , "fi"
]
+
curr <- catchDefaultIO "" $ readFileStrict shim
when (curr /= content) $ do
createDirectoryIfMissing True (parentDir shim)
- writeFile shim content
+ viaTmp writeFile shim content
modifyFileMode shim $ addModes [ownerExecuteMode]
{- Returns a cleaned up environment that lacks settings used to make the
diff --git a/Assistant/Ssh.hs b/Assistant/Ssh.hs
index 4c8d8afbf..98b21b13b 100644
--- a/Assistant/Ssh.hs
+++ b/Assistant/Ssh.hs
@@ -127,8 +127,13 @@ addAuthorizedKeysCommand rsynconly dir pubkey = join "&&"
script =
[ shebang
, "set -e"
- , "exec git-annex-shell -c \"$SSH_ORIGINAL_COMMAND\""
+ , "if [ \"x$SSH_ORIGINAL_COMMAND\" != \"x\" ]; then"
+ , runshell "$SSH_ORIGINAL_COMMAND"
+ , "else"
+ , runshell "$@"
+ , "fi"
]
+ runshell var = "exec git-annex-shell -c \"" ++ var ++ "\""
authorizedKeysLine :: Bool -> FilePath -> SshPubKey -> String
authorizedKeysLine rsynconly dir pubkey
diff --git a/debian/changelog b/debian/changelog
index dbacec2ca..bb61a654b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -55,6 +55,8 @@ git-annex (4.20130228) UNRELEASED; urgency=low
* assistant: Detects most renames, including directory renames, and
combines all their changes into a single commit.
* addurl: Add --relaxed option.
+ * assistant: Fix ~/.ssh/git-annex-shell wrapper to work when the
+ ssh key does not force a command.
-- Joey Hess <joeyh@debian.org> Wed, 27 Feb 2013 23:20:40 -0400