{-# LANGUAGE CPP #-} {-| This module makes the operations exported by @System.Posix.User@ available on all platforms. On POSIX systems it re-exports operations from @System.Posix.User@. On other platforms it provides dummy implementations. -} module System.PosixCompat.User ( -- * User environment -- ** Querying the user environment getRealUserID , getRealGroupID , getEffectiveUserID , getEffectiveGroupID , getGroups , getLoginName , getEffectiveUserName -- *** The group database , GroupEntry(..) , getGroupEntryForID , getGroupEntryForName , getAllGroupEntries -- *** The user database , UserEntry(..) , getUserEntryForID , getUserEntryForName , getAllUserEntries -- ** Modifying the user environment , setUserID , setGroupID ) where #ifndef mingw32_HOST_OS #include "HsUnixCompat.h" import System.Posix.User #if __GLASGOW_HASKELL__<605 getAllGroupEntries :: IO [GroupEntry] getAllGroupEntries = return [] getAllUserEntries :: IO [UserEntry] getAllUserEntries = return [] #endif #else /* Portable implementation */ import System.IO.Error import System.PosixCompat.Types unsupported :: String -> IO a unsupported f = ioError $ mkIOError illegalOperationErrorType x Nothing Nothing where x = "System.PosixCompat.User." ++ f ++ ": not supported" -- ----------------------------------------------------------------------------- -- User environment getRealUserID :: IO UserID getRealUserID = unsupported "getRealUserID" getRealGroupID :: IO GroupID getRealGroupID = unsupported "getRealGroupID" getEffectiveUserID :: IO UserID getEffectiveUserID = unsupported "getEffectiveUserID" getEffectiveGroupID :: IO GroupID getEffectiveGroupID = unsupported "getEffectiveGroupID" getGroups :: IO [GroupID] getGroups = return [] getLoginName :: IO String getLoginName = unsupported "getLoginName" setUserID :: UserID -> IO () setUserID _ = return () setGroupID :: GroupID -> IO () setGroupID _ = return () -- ----------------------------------------------------------------------------- -- User names getEffectiveUserName :: IO String getEffectiveUserName = unsupported "getEffectiveUserName" -- ----------------------------------------------------------------------------- -- The group database data GroupEntry = GroupEntry { groupName :: String , groupPassword :: String , groupID :: GroupID , groupMembers :: [String] } deriving (Show, Read, Eq) getGroupEntryForID :: GroupID -> IO GroupEntry getGroupEntryForID _ = unsupported "getGroupEntryForID" getGroupEntryForName :: String -> IO GroupEntry getGroupEntryForName _ = unsupported "getGroupEntryForName" getAllGroupEntries :: IO [GroupEntry] getAllGroupEntries = return [] -- ----------------------------------------------------------------------------- -- The user database (pwd.h) data UserEntry = UserEntry { userName :: String , userPassword :: String , userID :: UserID , userGroupID :: GroupID , userGecos :: String , homeDirectory :: String , userShell :: String } deriving (Show, Read, Eq) getUserEntryForID :: UserID -> IO UserEntry getUserEntryForID _ = unsupported "getUserEntryForID" getUserEntryForName :: String -> IO UserEntry getUserEntryForName _ = unsupported "getUserEntryForName" getAllUserEntries :: IO [UserEntry] getAllUserEntries = return [] #endif