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