diff options
Diffstat (limited to 'Utility/SshConfig.hs')
-rw-r--r-- | Utility/SshConfig.hs | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/Utility/SshConfig.hs b/Utility/SshConfig.hs index b7068f48d..d6cd32078 100644 --- a/Utility/SshConfig.hs +++ b/Utility/SshConfig.hs @@ -10,6 +10,7 @@ module Utility.SshConfig where import Common import Utility.UserInfo import Utility.Tmp +import Utility.FileMode import Data.Char import Data.Ord @@ -117,7 +118,19 @@ changeUserSshConfig modifier = do c <- readFileStrict configfile let c' = modifier c when (c /= c') $ - viaTmp writeFile configfile c' + viaTmp writeSshConfig configfile c' + +writeSshConfig :: FilePath -> String -> IO () +writeSshConfig f s = do + writeFile f s + setSshConfigMode f + +{- Ensure that the ssh config file lacks any group or other write bits, + - since ssh is paranoid about not working if other users can write + - to one of its config files (.ssh/config and .ssh/authorized_keys) -} +setSshConfigMode :: FilePath -> IO () +setSshConfigMode f = modifyFileMode f $ + removeModes [groupWriteMode, otherWriteMode] sshDir :: IO FilePath sshDir = do |