idmap_impl.h revision 4520:7dbeadedd7fe
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21/*
22 * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
23 * Use is subject to license terms.
24 */
25
26/*
27 * Private Header for Identity Mapping
28 */
29
30#ifndef _IDMAP_IMPL_H
31#define	_IDMAP_IMPL_H
32
33#pragma ident	"%Z%%M%	%I%	%E% SMI"
34
35#include "idmap_prot.h"
36#include "idmap_priv.h"
37#include <rpc/xdr.h>
38
39#ifdef __cplusplus
40extern "C" {
41#endif
42
43#define	_IDMAP_HANDLE_RPC_DOORS		1
44
45#define	_IDMAP_GET_CLIENT_HANDLE(h, clnt) \
46		if (h == NULL) \
47			return (IDMAP_ERR_CLIENT_HANDLE);\
48		if (h->type != _IDMAP_HANDLE_RPC_DOORS) \
49			return (IDMAP_ERR_NOTSUPPORTED);\
50		clnt = (CLIENT *)h->privhandle;\
51		if (clnt == NULL)\
52			return (IDMAP_ERR_RPC_HANDLE);
53
54struct idmap_handle {
55	int	type;
56	void	*privhandle;
57	/* locks */
58};
59
60struct idmap_udt_handle {
61	struct idmap_handle	*ih;
62	idmap_update_batch	batch;
63	uint64_t		next;
64	char			*lastmsg;
65};
66
67typedef struct idmap_get_res {
68	idmap_id_type	idtype;
69	uid_t		*uid;
70	gid_t		*gid;
71	int		*is_user;
72	char		**sidprefix;
73	idmap_rid_t	*rid;
74	idmap_stat	*stat;
75} idmap_get_res_t;
76
77struct idmap_get_handle {
78	struct idmap_handle	*ih;
79	idmap_mapping_batch	batch;
80	idmap_get_res_t		*retlist;
81	uint64_t		next;
82	char			*lastmsg;
83};
84
85struct idmap_iter {
86	struct idmap_handle	*ih;
87	int			type;
88	uint64_t		limit;
89	void			*arg;
90	idmap_retcode		retcode;
91	uint64_t		lastrowid;
92	uint64_t		next;
93	void			*retlist;
94};
95
96typedef struct stat_table {
97	idmap_retcode	retcode;
98	const char	*msg;
99	int		errnum;
100} stat_table_t;
101
102typedef idmap_retcode	_idmap_stat;
103
104extern idmap_retcode	_udt_extend_batch(idmap_udt_handle_t *, int);
105extern idmap_retcode	_get_ids_extend_batch(idmap_get_handle_t *);
106extern idmap_stat	_iter_get_next_list(int, idmap_iter_t *, void *,
107				uchar_t **, size_t, xdrproc_t, xdrproc_t);
108
109#ifdef __cplusplus
110}
111#endif
112
113#endif /* _IDMAP_IMPL_H */
114