summaryrefslogtreecommitdiff
path: root/Property/User.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Property/User.hs')
-rw-r--r--Property/User.hs22
1 files changed, 18 insertions, 4 deletions
diff --git a/Property/User.hs b/Property/User.hs
index 661a6f8a..6bdff2ea 100644
--- a/Property/User.hs
+++ b/Property/User.hs
@@ -22,6 +22,12 @@ nuked user _ = check (isJust <$> homedir user) $ cmdProperty "userdel"
]
`describe` ("nuked user " ++ user)
+{- Only ensures that the user has some password set. It may or may
+ - not be the password from the PrivData. -}
+hasSomePassword :: UserName -> Property
+hasSomePassword user = check ((/= HasPassword) <$> getPasswordStatus user) $
+ hasPassword user
+
hasPassword :: UserName -> Property
hasPassword user = Property (user ++ " has password") $
withPrivData (Password user) $ \password -> makeChange $
@@ -37,11 +43,19 @@ lockedPassword user = check (not <$> isLockedPassword user) $ cmdProperty "passw
]
`describe` ("locked " ++ user ++ " password")
-isLockedPassword :: UserName -> IO Bool
-isLockedPassword user = parse . words <$> readProcess "passwd" ["-S", user]
+data PasswordStatus = NoPassword | LockedPassword | HasPassword
+ deriving (Eq)
+
+getPasswordStatus :: UserName -> IO PasswordStatus
+getPasswordStatus user = parse . words <$> readProcess "passwd" ["-S", user]
where
- parse (_:"L":_) = True
- parse _ = False
+ parse (_:"L":_) = LockedPassword
+ parse (_:"NP":_) = NoPassword
+ parse (_:"P":_) = HasPassword
+ parse _ = NoPassword
+
+isLockedPassword :: UserName -> IO Bool
+isLockedPassword user = (== LockedPassword) <$> getPasswordStatus user
homedir :: UserName -> IO (Maybe FilePath)
homedir user = catchMaybeIO $ homeDirectory <$> getUserEntryForName user