From 10072157cb6205ef954afd92bb7c5cef9ebbf35f Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 25 Jun 2013 14:46:20 -0400 Subject: [PATCH] webapp: Fix bug when setting up a remote ssh repo repeatedly on the same server. The ssh setup first runs ssh to the real hostname, to probe if a ssh key is needed. If one is, it generates a mangled hostname that uses a key. This mangled hostname was being used to ssh into the server to set up the key. But if the server already had the key set up, and it was locked down, the setup would fail. This changes it to use the real hostname when sshing in to set up the key, which avoids the problem. Note that it will redundantly set up the key on the ssh server. But it's the same key; the ssh key generation code uses the key if it already exists. --- Assistant/WebApp/Configurators/Ssh.hs | 12 ++++++------ debian/changelog | 2 ++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Assistant/WebApp/Configurators/Ssh.hs b/Assistant/WebApp/Configurators/Ssh.hs index ffef008495..c4308f00b8 100644 --- a/Assistant/WebApp/Configurators/Ssh.hs +++ b/Assistant/WebApp/Configurators/Ssh.hs @@ -284,18 +284,18 @@ makeSsh rsync setup sshdata | needsPubKey sshdata = do keypair <- liftIO genSshKeyPair sshdata' <- liftIO $ setupSshKeyPair keypair sshdata - makeSsh' rsync setup sshdata' (Just keypair) + makeSsh' rsync setup sshdata sshdata' (Just keypair) | sshPort sshdata /= 22 = do sshdata' <- liftIO $ setSshConfig sshdata [] - makeSsh' rsync setup sshdata' Nothing - | otherwise = makeSsh' rsync setup sshdata Nothing + makeSsh' rsync setup sshdata sshdata' Nothing + | otherwise = makeSsh' rsync setup sshdata sshdata Nothing -makeSsh' :: Bool -> (Remote -> Handler ()) -> SshData -> Maybe SshKeyPair -> Handler RepHtml -makeSsh' rsync setup sshdata keypair = +makeSsh' :: Bool -> (Remote -> Handler ()) -> SshData -> SshData -> Maybe SshKeyPair -> Handler RepHtml +makeSsh' rsync setup origsshdata sshdata keypair = do sshSetup [sshhost, remoteCommand] "" $ makeSshRepo rsync setup sshdata where - sshhost = genSshHost (sshHostName sshdata) (sshUserName sshdata) + sshhost = genSshHost (sshHostName origsshdata) (sshUserName origsshdata) remotedir = T.unpack $ sshDirectory sshdata remoteCommand = shellWrap $ intercalate "&&" $ catMaybes [ Just $ "mkdir -p " ++ shellEscape remotedir diff --git a/debian/changelog b/debian/changelog index dcf5e41af6..85a356122b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,6 +5,8 @@ git-annex (4.20130622) UNRELEASED; urgency=low * bup: Handle /~/ in bup remote paths. Thanks, Oliver Matthews * fsck: Ensures that direct mode is used for files when it's enabled. + * webapp: Fix bug when setting up a remote ssh repo repeatedly on the same + server. -- Joey Hess Fri, 21 Jun 2013 13:16:17 -0400