summaryrefslogtreecommitdiff
path: root/Property
diff options
context:
space:
mode:
authorJoey Hess2014-03-30 20:18:45 -0400
committerJoey Hess2014-03-30 20:18:45 -0400
commit614d49789566cdf119997bf12c0d7494e386d4dd (patch)
tree8a3d11703c38832edcf834a52f353a09e46616b8 /Property
parent385a1de0ce80427e3d7d87c291758bf20f03fcf2 (diff)
propellor spin
Diffstat (limited to 'Property')
-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