MBR_UID_TO_UUID(3) Library Functions Manual MBR_UID_TO_UUID(3)

mbr_uid_to_uuid, mbr_gid_to_uuid, mbr_uuid_to_id, mbr_sid_to_uuid, mbr_uuid_to_siduser and group identifier translation functions

#include <membership.h>

int
mbr_uid_to_uuid(uid_t id, uuid_t uu);

int
mbr_gid_to_uuid(gid_t id, uuid_t uu);

int
mbr_uuid_to_id(const uuid_t uu, uid_t *id, int *id_type);

int
mbr_sid_to_uuid(const nt_sid_t *sid, uuid_t uu);

int
mbr_uuid_to_sid(const uuid_t uu, nt_sid_t *sid);

int
mbr_sid_to_string(const nt_sid_t *sid, char *string);

int
mbr_string_to_sid(const char *string, nt_sid_t *sid);

Users and groups can be referred to in multiple ways. In addition to the traditional uid and gid, every user or group can be referenced by a 128 bit uuid. Additionally, if the user or group is hosted on a PDC or Active Directory server, it will have a 128 bit or larger sid.

These routines communicate with opendirectoryd(8).

() takes a uid and looks up the associated user account. It provides the the uuid for that user as an output parameter. Note that this routine will succeed and return a fabricated uuid if the input user uid does not exist. () should be used to test for the existence of a uid.

() similarly gets the uuid associated with a group. Note that this routine will succeed and return a fabricated uuid if the input group gid does not exist. () should be used to test for the existence of a gid.

() takes a uuid that refers to a user or group and fetches the corresponding uid or gid. id_type is set to ID_TYPE_UID or ID_TYPE_GID to indicate which type was found. Note that mbr_uuid_to_id() always returns an id even if the uuid is not found. This returned id is not persistent, but can be used to map back to the uuid during runtime. To determine if the uuid exists, the returned id can be used in a call to getpwuid(3) or getgrgid(3).

() takes a sid and returns the associated uuid.

() returns a sid for the associated uuid.

Two additional utility functions are available to convert between sids and a string representation. String representations may be required, for example, when text files or XML files are used to save sid values.

() converts a sid into a string representation. The string parameter must be a buffer of at least 194 characters. The converted string is terminated with a nul character.

() converts an external string representation into a sid.

These functions return 0 on success or one of the following error codes on failure:

[EIO]
Communication with opendirectoryd(8) failed.
[ENOENT]
The mapping can not be performed.
[EAUTH]
Communication with opendirectoryd(8) failed due to an authentication error.
[EINVAL]
Invalid arguments were provided.
[ENOMEM]
Insufficient storage space is available.

mbr_gid_to_uuid() and mbr_uid_to_uuid() return 0 (success), even if the user/group does not exist.

getpwuid(3), getgrgid(3), mbr_check_membership(3), opendirectoryd(8)

October 10, 2011 Mac OS X