/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2020, Vaisala Oyj. */ /* * Definitions for configuring and using Access Control List (ACL) * based login methods. */ #ifndef TEEACL_H #define TEEACL_H #include #include #ifdef __cplusplus extern "C" { #endif // TEE Client UUID name space identifier (UUIDv4) // same as `tee_client_uuid_ns` in linux kernel drivers/tee/tee_core.c #define KERNEL_NAMESPACE "58ac9ca0-2086-4683-a1b8-ec4bc08e01b6" /* * len UUID = 36 characters * * Prefixes: * public * user: * group: * * + '\0' character totals 43, roundup. */ /** * Required length for UUID char buffers */ #define TEEACL_L_UUID 48 /** * teeacl_gid_from_name - Try to resolve gid_t for a given `group_name`. * * If a matching group is found, zero is returned and `gid_out` will be set to * the found value. * If no group is found, -ENOENT is returned. * If memory allocation fails, -ENOMEM is returned. * For other failures, errno is returned. * * @param gid_out Ptr to gid result. Will be set to group id if a matching * group is found. * @param group_name Name of group to resolve. * @return 0 if a matching group is found, see detailed description for other * cases. */ int teeacl_gid_from_name(gid_t *gid_out, const char *group_name); /** * teeacl_group_acl_uuid() - Encode a group login ACL string to the * provided uuid_buf * * @param uuid_buf A buffer of length TEEACL_L_UUID. * @param group Group id to encode for login. * @return 0 on success, otherwise a negative number is returned in case of failure. */ int teeacl_group_acl_uuid(char uuid_buf[TEEACL_L_UUID], gid_t group); /** * The possible return values of the *_user_is_member_of functions. */ enum rv_groupmember { NOT_MEMBER, IS_MEMBER, E_MEMORY, /**< Failed to allocate memory. */ E_GROUPLIST /**< Failed to read group listing. */ }; /** * teeacl_current_user_is_member_of() - Check if the effective user ID of * the process is a member in `group`. * * @param group Group id to check membership of. * @return enum rv_groupmember form result. */ enum rv_groupmember teeacl_current_user_is_member_of(gid_t group); /** * teeacl_user_is_member_of() - Check if `user` is a member in `group`. * * @param user Username string. * @param group Group id to check membership of. * @return enum rv_groupmember form result. */ enum rv_groupmember teeacl_user_is_member_of(const char *user, gid_t group); #ifdef __cplusplus } // extern "C" #endif #endif /* TEEACL_H */