webapp-0.2.0: Web/App/Internal/Privileges.hs
{-|
Module : Web.App.Privileges
Copyright : (c) Nathaniel Symer, 2015
License : MIT
Maintainer : nate@symer.io
Stability : experimental
Portability : POSIX
Determine when the process is being ran as root.
-}
module Web.App.Internal.Privileges
(
isPrivileged,
whenPrivileged,
resignPrivileges
)
where
import Control.Monad
import System.Posix
-- | Determine if the process is being ran as root
isPrivileged :: IO Bool
isPrivileged = ((==) 0) <$> getEffectiveUserID
-- | Perform an action when ran as root
whenPrivileged :: IO () -- ^ The action to be performed
-> IO ()
whenPrivileged act = do
privileged <- isPrivileged
when privileged act
-- | Drop root privileges
resignPrivileges :: String -- ^ Name of user to "become"
-> IO ()
resignPrivileges user = whenPrivileged $ do
getUserEntryForName user >>= setUserID . userID