b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/*
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * CDDL HEADER START
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross *
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * The contents of this file are subject to the terms of the
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Common Development and Distribution License (the "License").
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * You may not use this file except in compliance with the License.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross *
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * or http://www.opensolaris.org/os/licensing.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * See the License for the specific language governing permissions
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * and limitations under the License.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross *
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * When distributing Covered Code, include this CDDL HEADER in each
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * If applicable, add the following below this CDDL HEADER, with the
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * fields enclosed by brackets "[]" replaced with your own identifying
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * information: Portions Copyright [yyyy] [name of copyright owner]
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross *
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * CDDL HEADER END
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/*
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Use is subject to license terms.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross *
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Copyright 2013 Nexenta Systems, Inc. All rights reserved.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/*
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Windows to Solaris Identity Mapping kernel API
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * This header defines an API to map Windows SIDs to
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Solaris UID and GIDs and versa visa.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross#ifndef _SYS_KIDMAP_H
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross#define _SYS_KIDMAP_H
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross#include <sys/idmap.h>
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross#include <sys/door.h>
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross#include <sys/zone.h>
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross#ifdef __cplusplus
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossextern "C" {
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross#endif
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/*
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * The ifdef's for these two accomodate duplicate definitions in
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * lib/libidmap/common/idmap.h (the real one). In this code we
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * simulate a kernel environment in user space using the real
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * idmap library, so need to be able to use both headers.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* Return status */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross#ifndef _IDMAP_STAT_TYPE
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross#define _IDMAP_STAT_TYPE
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rosstypedef int32_t idmap_stat;
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross#endif /* _IDMAP_STAT_TYPE */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* Opaque get handle */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross#ifndef _IDMAP_GET_HANDLE_T
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross#define _IDMAP_GET_HANDLE_T
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rosstypedef struct idmap_get_handle idmap_get_handle_t;
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross#endif /* _IDMAP_GET_HANDLE_T */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/*
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * In all the routines a Windows SID is handled as a
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * string SID prefix plus a RID. For example
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross *
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * S-1-5-5-12-34-568 will be passed as SID prefix
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * S-1-5-5-12-34 and RID 568
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross *
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Certain routines returns pointers to a SID prefix string.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * These strings are stored internally and should not be modified
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * or freed.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/*
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * The following routines are simple get ID mapping routines.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossidmap_stat
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rosskidmap_getuidbysid(zone_t *zone, const char *sid_prefix, uint32_t rid,
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross uid_t *uid);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossidmap_stat
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rosskidmap_getgidbysid(zone_t *zone, const char *sid_prefix, uint32_t rid,
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross gid_t *gid);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossidmap_stat
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rosskidmap_getpidbysid(zone_t *zone, const char *sid_prefix, uint32_t rid,
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross uid_t *pid, int *is_user);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossidmap_stat
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rosskidmap_getsidbyuid(zone_t *zone, uid_t uid, const char **sid_prefix,
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross uint32_t *rid);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossidmap_stat
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rosskidmap_getsidbygid(zone_t *zone, gid_t gid, const char **sid_prefix,
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross uint32_t *rid);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/*
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * The following routines provide a batch interface for mapping IDs.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/*
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Create a batch "get mapping" handle for batch mappings.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossidmap_get_handle_t *
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rosskidmap_get_create(zone_t *zone);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/*
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * These routines queue the request to the "get mapping" handle
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossidmap_stat
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rosskidmap_batch_getuidbysid(idmap_get_handle_t *get_handle,
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross const char *sid_prefix, uint32_t rid,
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross uid_t *uid, idmap_stat *stat);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossidmap_stat
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rosskidmap_batch_getgidbysid(idmap_get_handle_t *get_handle,
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross const char *sid_prefix, uint32_t rid,
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross gid_t *gid, idmap_stat *stat);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossidmap_stat
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rosskidmap_batch_getpidbysid(idmap_get_handle_t *get_handle,
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross const char *sid_prefix, uint32_t rid,
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross uid_t *pid, int *is_user, idmap_stat *stat);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossidmap_stat
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rosskidmap_batch_getsidbyuid(idmap_get_handle_t *get_handle, uid_t uid,
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross const char **sid_prefix, uint32_t *rid, idmap_stat *stat);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossidmap_stat
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rosskidmap_batch_getsidbygid(idmap_get_handle_t *get_handle, gid_t gid,
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross const char **sid_prefix, uint32_t *rid, idmap_stat *stat);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/*
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Process the queued "get mapping" requests. The results (i.e.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * status and identity) will be available in the data areas
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * provided by individual requests.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossidmap_stat
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rosskidmap_get_mappings(idmap_get_handle_t *get_handle);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/*
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Destroy the "get mapping" handle
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossvoid
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rosskidmap_get_destroy(idmap_get_handle_t *get_handle);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross#ifdef _KERNEL
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/*
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Functions that do the hard part of door registration/unregistration
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * for the idmap_reg()/idmap_unreg() syscalls
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossint idmap_reg_dh(zone_t *zone, door_handle_t dh);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossint idmap_unreg_dh(zone_t *zone, door_handle_t dh);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/*
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Function needed by allocids() to ensure only the daemon that owns
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * the door gets ephemeral IDS
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossdoor_handle_t idmap_get_door(zone_t *zone);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/*
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Function used by system call allocids() to purge the
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * ID mapping cache
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossvoid idmap_purge_cache(zone_t *zone);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross#endif /* _KERNEL */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross#ifdef __cplusplus
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross}
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross#endif
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross#endif /* _SYS_KIDMAP_H */