diff options
author | Joey Hess <joey@kitenet.net> | 2012-09-13 19:26:39 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2012-09-13 19:26:39 -0400 |
commit | 5573911d25e51c3434f1666ee415a0c0781714fc (patch) | |
tree | a1fef80f88909e70136d0e9685321935ba32716f /Annex/Ssh.hs | |
parent | 60c31afc3804734e8c85b1d3f4a530b9cdaf8b5e (diff) |
Disable ssh connection caching if the path to the control socket would be too long (and use relative path to minimise path to the control socket).
Diffstat (limited to 'Annex/Ssh.hs')
-rw-r--r-- | Annex/Ssh.hs | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/Annex/Ssh.hs b/Annex/Ssh.hs index 8bd4fe33a..46885393c 100644 --- a/Annex/Ssh.hs +++ b/Annex/Ssh.hs @@ -42,7 +42,13 @@ sshInfo (host, port) = ifM caching ( do dir <- fromRepo gitAnnexSshDir let socketfile = dir </> hostport2socket host port - return (Just socketfile, cacheParams socketfile) + if valid_unix_socket_path socketfile + then return (Just socketfile, cacheParams socketfile) + else do + socketfile' <- liftIO $ relPathCwdToFile socketfile + if valid_unix_socket_path socketfile' + then return (Just socketfile', cacheParams socketfile') + else return (Nothing, []) , return (Nothing, []) ) where @@ -118,3 +124,16 @@ isLock f = lockExt `isSuffixOf` f lockExt :: String lockExt = ".lock" + +{- This is the size of the sun_path component of sockaddr_un, which + - is the limit to the total length of the filename of a unix socket. + - + - On Linux, this is 108. On OSX, 104. TODO: Probe + -} +sizeof_sockaddr_un_sun_path :: Int +sizeof_sockaddr_un_sun_path = 100 + +{- Note that this looks at the true length of the path in bytes, as it will + - appear on disk. -} +valid_unix_socket_path :: FilePath -> Bool +valid_unix_socket_path f = length (decodeW8 f) < sizeof_sockaddr_un_sun_path |