xref: /illumos-gate/usr/src/uts/common/idmap/kidmap_priv.h (revision d15447b6c777a1b2223924443bf36c9c8efb2ea4)
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