diff options
Diffstat (limited to 'Property/User.hs')
| -rw-r--r-- | Property/User.hs | 22 |
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 |
