sidutil.h revision 1fcced4c370617db71610fecffd5451a5894ca5e
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown/*
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * CDDL HEADER START
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown *
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * The contents of this file are subject to the terms of the
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * Common Development and Distribution License (the "License").
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * You may not use this file except in compliance with the License.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown *
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * or http://www.opensolaris.org/os/licensing.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * See the License for the specific language governing permissions
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * and limitations under the License.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown *
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * When distributing Covered Code, include this CDDL HEADER in each
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * If applicable, add the following below this CDDL HEADER, with the
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * fields enclosed by brackets "[]" replaced with your own identifying
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * information: Portions Copyright [yyyy] [name of copyright owner]
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown *
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * CDDL HEADER END
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown */
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown/*
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * Use is subject to license terms.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown */
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#ifndef _SIDUTIL_H
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#define _SIDUTIL_H
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown/*
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * Security Identifier (SID) interface definition.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown *
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * This is an extract from uts/common/smbsrv/smb_sid.h, with functions
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * renamed as part of a tentative plan for convergence.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown */
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#ifdef __cplusplus
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brownextern "C" {
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#endif
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown/*
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * Common definition for a SID.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown */
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#define NT_SID_REVISION 1
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#define NT_SID_AUTH_MAX 6
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#define NT_SID_SUBAUTH_MAX 15
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#if !defined(ANY_SIZE_ARRAY)
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#define ANY_SIZE_ARRAY 1
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#endif
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown/*
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * Security Identifier (SID)
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown *
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * The security identifier (SID) uniquely identifies a user, group or
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * a domain. It consists of a revision number, the identifier authority,
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * and a list of sub-authorities. The revision number is currently 1.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * The identifier authority identifies which system issued the SID. The
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * sub-authorities of a domain SID uniquely identify a domain. A user
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * or group SID consists of a domain SID with the user or group id
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * appended. The user or group id (also known as a relative id (RID)
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * uniquely identifies a user within a domain. A user or group SID
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * uniquely identifies a user or group across all domains. The SidType
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * values identify the various types of SID.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown *
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * 1 1 1 1 1 1
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * +---------------------------------------------------------------+
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * | SubAuthorityCount |Reserved1 (SBZ)| Revision |
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * +---------------------------------------------------------------+
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * | IdentifierAuthority[0] |
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * +---------------------------------------------------------------+
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * | IdentifierAuthority[1] |
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * +---------------------------------------------------------------+
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * | IdentifierAuthority[2] |
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * +---------------------------------------------------------------+
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * | |
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * +- - - - - - - - SubAuthority[] - - - - - - - - -+
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * | |
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * +---------------------------------------------------------------+
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown *
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown */
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown/*
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * Note: NT defines the Identifier Authority as a separate
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * structure (SID_IDENTIFIER_AUTHORITY) containing a literal
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * definition of a 6 byte vector but the effect is the same
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * as defining it as a member value.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown */
1fcced4c370617db71610fecffd5451a5894ca5eJordan Browntypedef struct sid {
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown uint8_t sid_revision;
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown uint8_t sid_subauthcnt;
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown uint8_t sid_authority[NT_SID_AUTH_MAX];
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown uint32_t sid_subauth[ANY_SIZE_ARRAY];
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown} sid_t;
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown/*
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * The maximum size of a SID in string format
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown */
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#define SID_STRSZ 256
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown/* Given a SID, return its length in bytes. */
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brownint sid_len(sid_t *);
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown/* Given a dynamically allocated SID (e.g. from sid_fromstr), free it. */
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brownvoid sid_free(sid_t *);
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown/* Translate a binary-format SID into the supplied SID_STRSZ buffer. */
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brownvoid sid_tostr(sid_t *, char *);
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown/* Translate a text-format SID into an allocated binary-format SID. */
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brownsid_t *sid_fromstr(char *);
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown/* In-place, translate a host-order SID into MS-native little endian. */
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brownvoid sid_to_le(sid_t *);
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown/* In-place, translate a MS-native little endian SID into host order. */
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brownvoid sid_from_le(sid_t *);
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#ifdef __cplusplus
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown}
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#endif
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#endif /* _SIDUTIL_H */