diff options
| author | Joey Hess <joey@kitenet.net> | 2014-03-30 20:18:45 -0400 |
|---|---|---|
| committer | Joey Hess <joey@kitenet.net> | 2014-03-30 20:18:45 -0400 |
| commit | 614d49789566cdf119997bf12c0d7494e386d4dd (patch) | |
| tree | 8a3d11703c38832edcf834a52f353a09e46616b8 /Property/User.hs | |
| parent | 385a1de0ce80427e3d7d87c291758bf20f03fcf2 (diff) | |
propellor spin
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 |
