1{-# LANGUAGE CPP #-} 2 3{-| 4This module makes the operations exported by @System.Posix.User@ 5available on all platforms. On POSIX systems it re-exports operations from 6@System.Posix.User@. On other platforms it provides dummy implementations. 7-} 8module System.PosixCompat.User ( 9 -- * User environment 10 -- ** Querying the user environment 11 getRealUserID 12 , getRealGroupID 13 , getEffectiveUserID 14 , getEffectiveGroupID 15 , getGroups 16 , getLoginName 17 , getEffectiveUserName 18 19 -- *** The group database 20 , GroupEntry(..) 21 , getGroupEntryForID 22 , getGroupEntryForName 23 , getAllGroupEntries 24 25 -- *** The user database 26 , UserEntry(..) 27 , getUserEntryForID 28 , getUserEntryForName 29 , getAllUserEntries 30 31 -- ** Modifying the user environment 32 , setUserID 33 , setGroupID 34 ) where 35 36#ifndef mingw32_HOST_OS 37 38#include "HsUnixCompat.h" 39 40import System.Posix.User 41 42#if __GLASGOW_HASKELL__<605 43getAllGroupEntries :: IO [GroupEntry] 44getAllGroupEntries = return [] 45 46getAllUserEntries :: IO [UserEntry] 47getAllUserEntries = return [] 48#endif 49 50#else /* Portable implementation */ 51 52import System.IO.Error 53import System.PosixCompat.Types 54 55unsupported :: String -> IO a 56unsupported f = ioError $ mkIOError illegalOperationErrorType x Nothing Nothing 57 where x = "System.PosixCompat.User." ++ f ++ ": not supported" 58 59-- ----------------------------------------------------------------------------- 60-- User environment 61 62getRealUserID :: IO UserID 63getRealUserID = unsupported "getRealUserID" 64 65getRealGroupID :: IO GroupID 66getRealGroupID = unsupported "getRealGroupID" 67 68getEffectiveUserID :: IO UserID 69getEffectiveUserID = unsupported "getEffectiveUserID" 70 71getEffectiveGroupID :: IO GroupID 72getEffectiveGroupID = unsupported "getEffectiveGroupID" 73 74getGroups :: IO [GroupID] 75getGroups = return [] 76 77getLoginName :: IO String 78getLoginName = unsupported "getLoginName" 79 80setUserID :: UserID -> IO () 81setUserID _ = return () 82 83setGroupID :: GroupID -> IO () 84setGroupID _ = return () 85 86-- ----------------------------------------------------------------------------- 87-- User names 88 89getEffectiveUserName :: IO String 90getEffectiveUserName = unsupported "getEffectiveUserName" 91 92-- ----------------------------------------------------------------------------- 93-- The group database 94 95data GroupEntry = GroupEntry 96 { groupName :: String 97 , groupPassword :: String 98 , groupID :: GroupID 99 , groupMembers :: [String] 100 } deriving (Show, Read, Eq) 101 102getGroupEntryForID :: GroupID -> IO GroupEntry 103getGroupEntryForID _ = unsupported "getGroupEntryForID" 104 105getGroupEntryForName :: String -> IO GroupEntry 106getGroupEntryForName _ = unsupported "getGroupEntryForName" 107 108getAllGroupEntries :: IO [GroupEntry] 109getAllGroupEntries = return [] 110 111-- ----------------------------------------------------------------------------- 112-- The user database (pwd.h) 113 114data UserEntry = UserEntry 115 { userName :: String 116 , userPassword :: String 117 , userID :: UserID 118 , userGroupID :: GroupID 119 , userGecos :: String 120 , homeDirectory :: String 121 , userShell :: String 122 } deriving (Show, Read, Eq) 123 124getUserEntryForID :: UserID -> IO UserEntry 125getUserEntryForID _ = unsupported "getUserEntryForID" 126 127getUserEntryForName :: String -> IO UserEntry 128getUserEntryForName _ = unsupported "getUserEntryForName" 129 130getAllUserEntries :: IO [UserEntry] 131getAllUserEntries = return [] 132 133#endif 134