System.Posix.User

unix-2.8.5.1: POSIX functionality

Copyright | (c) The University of Glasgow 2002
License | BSD-style (see the file libraries/base/LICENSE)
Maintainer | libraries@haskell.org
Stability | provisional
Portability | non-portable (requires POSIX)
Safe Haskell | Trustworthy
Language | Haskell2010

System.Posix.User

Contents

- User environment
  - Querying the user environment
    - The group database
    - The user database
  - Modifying the user environment

Description

POSIX user/group support

Synopsis

- getRealUserID :: IO UserID
- getRealGroupID :: IO GroupID
- getEffectiveUserID :: IO UserID
- getEffectiveGroupID :: IO GroupID
- getGroups :: IO [GroupID]
- getLoginName :: IO String
- getEffectiveUserName :: IO String
- groupName :: GroupEntry -> String
- groupPassword :: GroupEntry -> String
- groupID :: GroupEntry -> GroupID
- groupMembers :: GroupEntry -> [String]
- pattern GroupEntry :: String -> String -> GroupID -> [String] -> GroupEntry
- getGroupEntryForID :: GroupID -> IO GroupEntry
- getGroupEntryForName :: String -> IO GroupEntry
- getAllGroupEntries :: IO [GroupEntry]
- userName :: UserEntry -> String
- userPassword :: UserEntry -> String
- userID :: UserEntry -> UserID
- userGroupID :: UserEntry -> GroupID
- userGecos :: UserEntry -> String
- homeDirectory :: UserEntry -> String
- userShell :: UserEntry -> String
- pattern UserEntry :: String -> String -> UserID -> GroupID -> String -> String -> String -> UserEntry
- getUserEntryForID :: UserID -> IO UserEntry
- getUserEntryForName :: String -> IO UserEntry
- getAllUserEntries :: IO [UserEntry]
- setUserID :: UserID -> IO ()
- setGroupID :: GroupID -> IO ()
- setEffectiveUserID :: UserID -> IO ()
- setEffectiveGroupID :: GroupID -> IO ()
- setGroups :: [GroupID] -> IO ()

# User environment

## Querying the user environment

getRealUserID :: IO UserID Source #

`getRealUserID` calls `getuid` to obtain the real `UserID` associated with the current process.

getRealGroupID :: IO GroupID Source #

`getRealGroupID` calls `getgid` to obtain the real `GroupID` associated with the current process.

getEffectiveUserID :: IO UserID Source #

`getEffectiveUserID` calls `geteuid` to obtain the effective `UserID` associated with the current process.

getEffectiveGroupID :: IO GroupID Source #

`getEffectiveGroupID` calls `getegid` to obtain the effective `GroupID` associated with the current process.

getGroups :: IO [GroupID] Source #

`getGroups` calls `getgroups` to obtain the list of supplementary `GroupID`s associated with the current process.

getLoginName :: IO String Source #

`getLoginName` calls `getlogin` to obtain the login name associated with the current process.

getEffectiveUserName :: IO String Source #

`getEffectiveUserName` gets the name associated with the effective `UserID` of the process.

### The group database

groupName :: GroupEntry -> String Source #

groupPassword :: GroupEntry -> String Source #

groupID :: GroupEntry -> GroupID Source #

groupMembers :: GroupEntry -> [String] Source #

pattern GroupEntry Source #

Arguments

:: String | The name of this group (gr_name)
-> String | The password for this group (gr_passwd)
-> GroupID | The unique numeric ID for this group (gr_gid)
-> [String] | A list of zero or more usernames that are members (gr_mem)
-> GroupEntry |

Manually constructing `GroupEntry` in String modules is discouraged. It will truncate Chars to 8bit. Use `ByteString` instead.

getGroupEntryForID :: GroupID -> IO GroupEntry Source #

`getGroupEntryForID gid` calls `getgrgid_r` to obtain the `GroupEntry` information associated with `GroupID` `gid`. This operation may fail with `isDoesNotExistError` if no such group exists.

getGroupEntryForName :: String -> IO GroupEntry Source #

`getGroupEntryForName name` calls `getgrnam_r` to obtain the `GroupEntry` information associated with the group called `name`. This operation may fail with `isDoesNotExistError` if no such group exists.

getAllGroupEntries :: IO [GroupEntry] Source #

`getAllGroupEntries` returns all group entries on the system by repeatedly calling `getgrent`

### The user database

userName :: UserEntry -> String Source #

userPassword :: UserEntry -> String Source #

userID :: UserEntry -> UserID Source #

userGroupID :: UserEntry -> GroupID Source #

userGecos :: UserEntry -> String Source #

homeDirectory :: UserEntry -> String Source #

userShell :: UserEntry -> String Source #

pattern UserEntry Source #

Arguments

:: String | Textual name of this user (pw_name)
-> String | Password -- may be empty or fake if shadow is in use (pw_passwd)
-> UserID | Numeric ID for this user (pw_uid)
-> GroupID | Primary group ID (pw_gid)
-> String | Usually the real name for the user (pw_gecos)
-> String | Home directory (pw_dir)
-> String | Default shell (pw_shell)
-> UserEntry |

Manually constructing `UserEntry` in String modules is discouraged. It will truncate Chars to 8bit. Use `ByteString` instead.

getUserEntryForID :: UserID -> IO UserEntry Source #

`getUserEntryForID uid` calls `getpwuid_r` to obtain the `UserEntry` information associated with `UserID` `uid`. This operation may fail with `isDoesNotExistError` if no such user exists.

getUserEntryForName :: String -> IO UserEntry Source #

`getUserEntryForName name` calls `getpwnam_r` to obtain the `UserEntry` information associated with the user login `name`. This operation may fail with `isDoesNotExistError` if no such user exists.

getAllUserEntries :: IO [UserEntry] Source #

`getAllUserEntries` returns all user entries on the system by repeatedly calling `getpwent`

## Modifying the user environment

setUserID :: UserID -> IO () Source #

`setUserID uid` calls `setuid` to set the real, effective, and saved set-user-id associated with the current process to `uid`.

setGroupID :: GroupID -> IO () Source #

`setGroupID gid` calls `setgid` to set the real, effective, and saved set-group-id associated with the current process to `gid`.

setEffectiveUserID :: UserID -> IO () Source #

`setEffectiveUserID uid` calls `seteuid` to set the effective user-id associated with the current process to `uid`. This does not update the real user-id or set-user-id.

setEffectiveGroupID :: GroupID -> IO () Source #

`setEffectiveGroupID uid` calls `setegid` to set the effective group-id associated with the current process to `gid`. This does not update the real group-id or set-group-id.

setGroups :: [GroupID] -> IO () Source #

`setGroups` calls `setgroups` to set the list of supplementary `GroupID`s associated with the current process.