c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/*
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * CDDL HEADER START
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw *
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * The contents of this file are subject to the terms of the
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Common Development and Distribution License (the "License").
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * You may not use this file except in compliance with the License.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw *
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * or http://www.opensolaris.org/os/licensing.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * See the License for the specific language governing permissions
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * and limitations under the License.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw *
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * When distributing Covered Code, include this CDDL HEADER in each
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * If applicable, add the following below this CDDL HEADER, with the
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * fields enclosed by brackets "[]" replaced with your own identifying
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * information: Portions Copyright [yyyy] [name of copyright owner]
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw *
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * CDDL HEADER END
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/*
bda89588bd7667394a834e8a9a34612cce2ae9c3jp * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Use is subject to license terms.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/*
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Windows to Solaris Identity Mapping kernel API
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * This header defines an API to map Windows SIDs to
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Solaris UID and GIDs and versa visa.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw#ifndef _SYS_KIDMAP_H
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw#define _SYS_KIDMAP_H
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw#pragma ident "%Z%%M% %I% %E% SMI"
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw#include <sys/idmap.h>
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw#include <sys/door.h>
bda89588bd7667394a834e8a9a34612cce2ae9c3jp#include <sys/zone.h>
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw#ifdef __cplusplus
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwextern "C" {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw#endif
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* Opaque get handle */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwtypedef struct idmap_get_handle idmap_get_handle_t;
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* Return status */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwtypedef int32_t idmap_stat;
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/*
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * In all the routines a Windows SID is handled as a
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * string SID prefix plus a RID. For example
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw *
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * S-1-5-5-12-34-568 will be passed as SID prefix
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * S-1-5-5-12-34 and RID 568
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw *
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Certain routines returns pointers to a SID prefix string.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * These strings are stored internally and should not be modified
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * or freed.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/*
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * The following routines are simple get ID mapping routines.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_stat
bda89588bd7667394a834e8a9a34612cce2ae9c3jpkidmap_getuidbysid(zone_t *zone, const char *sid_prefix, uint32_t rid,
bda89588bd7667394a834e8a9a34612cce2ae9c3jp uid_t *uid);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_stat
bda89588bd7667394a834e8a9a34612cce2ae9c3jpkidmap_getgidbysid(zone_t *zone, const char *sid_prefix, uint32_t rid,
bda89588bd7667394a834e8a9a34612cce2ae9c3jp gid_t *gid);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_stat
bda89588bd7667394a834e8a9a34612cce2ae9c3jpkidmap_getpidbysid(zone_t *zone, const char *sid_prefix, uint32_t rid,
bda89588bd7667394a834e8a9a34612cce2ae9c3jp uid_t *pid, int *is_user);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_stat
bda89588bd7667394a834e8a9a34612cce2ae9c3jpkidmap_getsidbyuid(zone_t *zone, uid_t uid, const char **sid_prefix,
bda89588bd7667394a834e8a9a34612cce2ae9c3jp uint32_t *rid);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_stat
bda89588bd7667394a834e8a9a34612cce2ae9c3jpkidmap_getsidbygid(zone_t *zone, gid_t gid, const char **sid_prefix,
bda89588bd7667394a834e8a9a34612cce2ae9c3jp uint32_t *rid);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/*
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * The following routines provide a batch interface for mapping IDs.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/*
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Create a batch "get mapping" handle for batch mappings.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_get_handle_t *
bda89588bd7667394a834e8a9a34612cce2ae9c3jpkidmap_get_create(zone_t *zone);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/*
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * These routines queue the request to the "get mapping" handle
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_stat
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwkidmap_batch_getuidbysid(idmap_get_handle_t *get_handle,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw const char *sid_prefix, uint32_t rid,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw uid_t *uid, idmap_stat *stat);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_stat
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwkidmap_batch_getgidbysid(idmap_get_handle_t *get_handle,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw const char *sid_prefix, uint32_t rid,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw gid_t *gid, idmap_stat *stat);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_stat
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwkidmap_batch_getpidbysid(idmap_get_handle_t *get_handle,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw const char *sid_prefix, uint32_t rid,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw uid_t *pid, int *is_user, idmap_stat *stat);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_stat
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwkidmap_batch_getsidbyuid(idmap_get_handle_t *get_handle, uid_t uid,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw const char **sid_prefix, uint32_t *rid, idmap_stat *stat);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_stat
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwkidmap_batch_getsidbygid(idmap_get_handle_t *get_handle, gid_t gid,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw const char **sid_prefix, uint32_t *rid, idmap_stat *stat);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/*
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Process the queued "get mapping" requests. The results (i.e.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * status and identity) will be available in the data areas
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * provided by individual requests.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_stat
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwkidmap_get_mappings(idmap_get_handle_t *get_handle);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/*
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Destroy the "get mapping" handle
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwvoid
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwkidmap_get_destroy(idmap_get_handle_t *get_handle);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/*
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Functions that do the hard part of door registration/unregistration
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * for the idmap_reg()/idmap_unreg() syscalls
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw */
bda89588bd7667394a834e8a9a34612cce2ae9c3jpint idmap_reg_dh(zone_t *zone, door_handle_t dh);
bda89588bd7667394a834e8a9a34612cce2ae9c3jpint idmap_unreg_dh(zone_t *zone, door_handle_t dh);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/*
bda89588bd7667394a834e8a9a34612cce2ae9c3jp * Function needed by allocids() to ensure only the daemon that owns
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * the door gets ephemeral IDS
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw */
bda89588bd7667394a834e8a9a34612cce2ae9c3jpdoor_handle_t idmap_get_door(zone_t *zone);
bda89588bd7667394a834e8a9a34612cce2ae9c3jp
bda89588bd7667394a834e8a9a34612cce2ae9c3jp/*
bda89588bd7667394a834e8a9a34612cce2ae9c3jp * Function used by system call allocids() to purge the
bda89588bd7667394a834e8a9a34612cce2ae9c3jp * ID mapping cache
bda89588bd7667394a834e8a9a34612cce2ae9c3jp */
bda89588bd7667394a834e8a9a34612cce2ae9c3jpvoid idmap_purge_cache(zone_t *zone);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw#ifdef __cplusplus
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw}
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw#endif
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw#endif /* _SYS_KIDMAP_H */