1c5c4113dSnw /* 2c5c4113dSnw * CDDL HEADER START 3c5c4113dSnw * 4c5c4113dSnw * The contents of this file are subject to the terms of the 5c5c4113dSnw * Common Development and Distribution License (the "License"). 6c5c4113dSnw * You may not use this file except in compliance with the License. 7c5c4113dSnw * 8c5c4113dSnw * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9c5c4113dSnw * or http://www.opensolaris.org/os/licensing. 10c5c4113dSnw * See the License for the specific language governing permissions 11c5c4113dSnw * and limitations under the License. 12c5c4113dSnw * 13c5c4113dSnw * When distributing Covered Code, include this CDDL HEADER in each 14c5c4113dSnw * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15c5c4113dSnw * If applicable, add the following below this CDDL HEADER, with the 16c5c4113dSnw * fields enclosed by brackets "[]" replaced with your own identifying 17c5c4113dSnw * information: Portions Copyright [yyyy] [name of copyright owner] 18c5c4113dSnw * 19c5c4113dSnw * CDDL HEADER END 20c5c4113dSnw */ 21c5c4113dSnw 22c5c4113dSnw /* 23f7b4b2feSjp * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 24c5c4113dSnw * Use is subject to license terms. 25c5c4113dSnw */ 26c5c4113dSnw 27c5c4113dSnw /* 28c5c4113dSnw * Windows to Solaris Identity Mapping kernel API 29c5c4113dSnw * This header file contains private definitions. 30c5c4113dSnw */ 31c5c4113dSnw 32c5c4113dSnw #ifndef _KIDMAP_PRIV_H 33c5c4113dSnw #define _KIDMAP_PRIV_H 34c5c4113dSnw 35c5c4113dSnw #pragma ident "%Z%%M% %I% %E% SMI" 36c5c4113dSnw 37c5c4113dSnw #include <sys/avl.h> 38c5c4113dSnw 39c5c4113dSnw #ifdef __cplusplus 40c5c4113dSnw extern "C" { 41c5c4113dSnw #endif 42c5c4113dSnw 43c5c4113dSnw 44*d15447b6Sjp 45*d15447b6Sjp typedef struct idmap_sid2pid_cache { 46*d15447b6Sjp avl_tree_t tree; 47*d15447b6Sjp kmutex_t mutex; 48*d15447b6Sjp struct sid2pid *prev; 49*d15447b6Sjp time_t purge_time; 50*d15447b6Sjp int uid_num; 51*d15447b6Sjp int gid_num; 52*d15447b6Sjp int pid_num; 53*d15447b6Sjp } idmap_sid2pid_cache_t; 54*d15447b6Sjp 55*d15447b6Sjp 56*d15447b6Sjp typedef struct idmap_pid2sid_cache { 57c5c4113dSnw avl_tree_t tree; 58c5c4113dSnw kmutex_t mutex; 59*d15447b6Sjp struct pid2sid *prev; 60c5c4113dSnw time_t purge_time; 61*d15447b6Sjp } idmap_pid2sid_cache_t; 62c5c4113dSnw 630b10de9fSjp 640b10de9fSjp /* 650b10de9fSjp * There is a cache for every mapping request because a group SID 660b10de9fSjp * on Windows can be set in a file owner field and versa-visa. 670b10de9fSjp * To stop this causing problems on Solaris a SID can map to 680b10de9fSjp * both a UID and a GID. 690b10de9fSjp */ 70c5c4113dSnw typedef struct idmap_cache { 71*d15447b6Sjp idmap_sid2pid_cache_t sid2pid; 72*d15447b6Sjp idmap_pid2sid_cache_t uid2sid; 73*d15447b6Sjp idmap_pid2sid_cache_t gid2sid; 74c5c4113dSnw } idmap_cache_t; 75c5c4113dSnw 76c5c4113dSnw 77c5c4113dSnw void 78c5c4113dSnw kidmap_cache_create(idmap_cache_t *cache); 79c5c4113dSnw 80c5c4113dSnw void 81c5c4113dSnw kidmap_cache_delete(idmap_cache_t *cache); 82c5c4113dSnw 830b10de9fSjp void 840b10de9fSjp kidmap_cache_purge(idmap_cache_t *cache); 850b10de9fSjp 86*d15447b6Sjp 87c5c4113dSnw int 880b10de9fSjp kidmap_cache_lookup_uidbysid(idmap_cache_t *cache, const char *sid_prefix, 890b10de9fSjp uint32_t rid, uid_t *uid); 90c5c4113dSnw 91c5c4113dSnw int 920b10de9fSjp kidmap_cache_lookup_gidbysid(idmap_cache_t *cache, const char *sid_prefix, 930b10de9fSjp uint32_t rid, gid_t *gid); 940b10de9fSjp 950b10de9fSjp int 960b10de9fSjp kidmap_cache_lookup_pidbysid(idmap_cache_t *cache, const char *sid_prefix, 97c5c4113dSnw uint32_t rid, uid_t *pid, int *is_user); 98c5c4113dSnw 990b10de9fSjp int 1000b10de9fSjp kidmap_cache_lookup_sidbyuid(idmap_cache_t *cache, const char **sid_prefix, 1010b10de9fSjp uint32_t *rid, uid_t uid); 1020b10de9fSjp 1030b10de9fSjp int 1040b10de9fSjp kidmap_cache_lookup_sidbygid(idmap_cache_t *cache, const char **sid_prefix, 1050b10de9fSjp uint32_t *rid, gid_t gid); 1060b10de9fSjp 1070b10de9fSjp 1080b10de9fSjp void 109*d15447b6Sjp kidmap_cache_add_sid2uid(idmap_cache_t *cache, const char *sid_prefix, 110*d15447b6Sjp uint32_t rid, uid_t uid, int direction); 1110b10de9fSjp 112c5c4113dSnw void 113*d15447b6Sjp kidmap_cache_add_sid2gid(idmap_cache_t *cache, const char *sid_prefix, 114*d15447b6Sjp uint32_t rid, gid_t gid, int direction); 115c5c4113dSnw 116c5c4113dSnw void 117*d15447b6Sjp kidmap_cache_add_sid2pid(idmap_cache_t *cache, const char *sid_prefix, 118*d15447b6Sjp uint32_t rid, uid_t pid, int is_user, int direction); 119f7b4b2feSjp void 120f7b4b2feSjp kidmap_cache_get_data(idmap_cache_t *cache, size_t *uidbysid, size_t *gidbysid, 121f7b4b2feSjp size_t *pidbysid, size_t *sidbyuid, size_t *sidbygid); 122c5c4113dSnw int 123c5c4113dSnw kidmap_start(void); 124c5c4113dSnw 125c5c4113dSnw int 126c5c4113dSnw kidmap_stop(void); 127c5c4113dSnw 128c5c4113dSnw void 129c5c4113dSnw kidmap_sid_prefix_store_init(void); 130c5c4113dSnw 131c5c4113dSnw const char * 132c5c4113dSnw kidmap_find_sid_prefix(const char *sid_prefix); 133c5c4113dSnw 134c5c4113dSnw #ifdef __cplusplus 135c5c4113dSnw } 136c5c4113dSnw #endif 137c5c4113dSnw 138c5c4113dSnw #endif /* _KIDMAP_PRIV_H */ 139