summaryrefslogtreecommitdiff
path: root/src/Propellor/Property/User.hs
diff options
context:
space:
mode:
authorJoey Hess2015-04-19 21:00:21 -0400
committerJoey Hess2015-04-19 21:00:21 -0400
commit3d735c52f4186133da7113ca671a16d68fe76b33 (patch)
tree02179702ed89e5769ec13e50fd10aa49fee9412c /src/Propellor/Property/User.hs
parentfe6ff079e6770ce452ea0ba1b49b68bebeaed2d3 (diff)
Added hasLoginShell and shellEnabled.
My code with some improvements from weinzwang.
Diffstat (limited to 'src/Propellor/Property/User.hs')
-rw-r--r--src/Propellor/Property/User.hs19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/Propellor/Property/User.hs b/src/Propellor/Property/User.hs
index 9e115290..557875fb 100644
--- a/src/Propellor/Property/User.hs
+++ b/src/Propellor/Property/User.hs
@@ -3,6 +3,7 @@ module Propellor.Property.User where
import System.Posix
import Propellor
+import qualified Propellor.Property.File as File
data Eep = YesReallyDeleteHome
@@ -110,3 +111,21 @@ shadowConfig False = check shadowExists $
shadowExists :: IO Bool
shadowExists = doesFileExist "/etc/shadow"
+
+-- | Ensures that a user has a specified login shell, and that the shell
+-- is enabled in /etc/shells.
+hasLoginShell :: UserName -> FilePath -> Property NoInfo
+hasLoginShell user loginshell = shellSetTo user loginshell `requires` shellEnabled loginshell
+
+shellSetTo :: UserName -> FilePath -> Property NoInfo
+shellSetTo user loginshell = check needchangeshell $
+ cmdProperty "chsh" ["--shell", loginshell, user]
+ `describe` (user ++ " has login shell " ++ loginshell)
+ where
+ needchangeshell = do
+ currshell <- userShell <$> getUserEntryForName user
+ return (currshell /= loginshell)
+
+-- | Ensures that /etc/shells contains a shell.
+shellEnabled :: FilePath -> Property NoInfo
+shellEnabled loginshell = "/etc/shells" `File.containsLine` loginshell