From 43d313706e213abe752ab4dae3b05a791e3b9b83 Mon Sep 17 00:00:00 2001 From: Profpatsch Date: Thu, 15 Feb 2024 11:08:21 +0100 Subject: [PATCH] Revert "delete System.PosixCompat.User module" This reverts commit 87ffe0554e85875780cedca610a9accc9c23cd4c. --- CHANGELOG.md | 4 + src/System/PosixCompat.hs | 2 + src/System/PosixCompat/User.hsc | 133 ++++++++++++++++++++++++++++++++ unix-compat.cabal | 1 + 4 files changed, 140 insertions(+) create mode 100644 src/System/PosixCompat/User.hsc diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a09be5..5318693 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## Version 0.7.2 (2024-02-15) + +- Re-Add `System.PosixCompat.User` module again for backwards compat + ## Version 0.7.1 (2023-12-06) Santa Clause edition - Add `System.PosixCompat.Process` module, exporting `getProcessID` diff --git a/src/System/PosixCompat.hs b/src/System/PosixCompat.hs index 2fa2546..42bdef6 100644 --- a/src/System/PosixCompat.hs +++ b/src/System/PosixCompat.hs @@ -12,6 +12,7 @@ module System.PosixCompat ( , module System.PosixCompat.Time , module System.PosixCompat.Types , module System.PosixCompat.Unistd + , module System.PosixCompat.User , usingPortableImpl ) where @@ -21,6 +22,7 @@ import System.PosixCompat.Temp import System.PosixCompat.Time import System.PosixCompat.Types import System.PosixCompat.Unistd +import System.PosixCompat.User -- | 'True' if unix-compat is using its portable implementation, -- or 'False' if the unix package is simply being re-exported. diff --git a/src/System/PosixCompat/User.hsc b/src/System/PosixCompat/User.hsc new file mode 100644 index 0000000..b5b07e2 --- /dev/null +++ b/src/System/PosixCompat/User.hsc @@ -0,0 +1,133 @@ +{-# 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 diff --git a/unix-compat.cabal b/unix-compat.cabal index dc78f86..e96b633 100644 --- a/unix-compat.cabal +++ b/unix-compat.cabal @@ -41,6 +41,7 @@ Library System.PosixCompat.Time System.PosixCompat.Types System.PosixCompat.Unistd + System.PosixCompat.User if os(windows) c-sources: