1184588Sdfr/*-
2184588Sdfr * Copyright (c) 2008 Isilon Inc http://www.isilon.com/
3184588Sdfr * Authors: Doug Rabson <dfr@rabson.org>
4184588Sdfr * Developed with Red Inc: Alfred Perlstein <alfred@freebsd.org>
5184588Sdfr *
6184588Sdfr * Redistribution and use in source and binary forms, with or without
7184588Sdfr * modification, are permitted provided that the following conditions
8184588Sdfr * are met:
9184588Sdfr * 1. Redistributions of source code must retain the above copyright
10184588Sdfr *    notice, this list of conditions and the following disclaimer.
11184588Sdfr * 2. Redistributions in binary form must reproduce the above copyright
12184588Sdfr *    notice, this list of conditions and the following disclaimer in the
13184588Sdfr *    documentation and/or other materials provided with the distribution.
14184588Sdfr *
15184588Sdfr * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16184588Sdfr * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17184588Sdfr * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18184588Sdfr * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19184588Sdfr * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20184588Sdfr * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21184588Sdfr * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22184588Sdfr * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23184588Sdfr * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24184588Sdfr * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25184588Sdfr * SUCH DAMAGE.
26184588Sdfr */
27184588Sdfr
28184588Sdfr/* $FreeBSD$ */
29184588Sdfr
30184588Sdfr#ifdef RPC_HDR
31184588Sdfr
32184588Sdfr%#ifdef _KERNEL
33184588Sdfr%#include <kgssapi/gssapi.h>
34184588Sdfr%#else
35184588Sdfr%#include <gssapi/gssapi.h>
36184588Sdfr%#endif
37184588Sdfr
38184588Sdfr%extern bool_t xdr_gss_buffer_desc(XDR *xdrs, gss_buffer_desc *buf);
39184588Sdfr%extern bool_t xdr_gss_OID_desc(XDR *xdrs, gss_OID_desc *oid);
40184588Sdfr%extern bool_t xdr_gss_OID(XDR *xdrs, gss_OID *oidp);
41184588Sdfr%extern bool_t xdr_gss_OID_set_desc(XDR *xdrs, gss_OID_set_desc *set);
42184588Sdfr%extern bool_t xdr_gss_OID_set(XDR *xdrs, gss_OID_set *setp);
43184588Sdfr%extern bool_t xdr_gss_channel_bindings_t(XDR *xdrs, gss_channel_bindings_t *chp);
44184588Sdfr
45184588Sdfr#endif
46184588Sdfr
47184588Sdfrtypedef uint64_t gssd_ctx_id_t;
48184588Sdfrtypedef uint64_t gssd_cred_id_t;
49184588Sdfrtypedef uint64_t gssd_name_t;
50184588Sdfr
51184588Sdfrstruct init_sec_context_res {
52184588Sdfr	uint32_t	major_status;
53184588Sdfr	uint32_t	minor_status;
54184588Sdfr	gssd_ctx_id_t	ctx;
55184588Sdfr	gss_OID		actual_mech_type;
56184588Sdfr	gss_buffer_desc output_token;
57184588Sdfr	uint32_t	ret_flags;
58184588Sdfr	uint32_t	time_rec;
59184588Sdfr};
60184588Sdfr
61184588Sdfrstruct init_sec_context_args {
62184588Sdfr	uint32_t	uid;
63184588Sdfr	gssd_cred_id_t	cred;
64184588Sdfr	gssd_ctx_id_t	ctx;
65184588Sdfr	gssd_name_t	name;
66184588Sdfr	gss_OID		mech_type;
67184588Sdfr	uint32_t	req_flags;
68184588Sdfr	uint32_t	time_req;
69184588Sdfr	gss_channel_bindings_t input_chan_bindings;
70184588Sdfr	gss_buffer_desc input_token;
71184588Sdfr};
72184588Sdfr
73184588Sdfrstruct accept_sec_context_res {
74184588Sdfr	uint32_t	major_status;
75184588Sdfr	uint32_t	minor_status;
76184588Sdfr	gssd_ctx_id_t	ctx;
77184588Sdfr	gssd_name_t	src_name;
78184588Sdfr	gss_OID		mech_type;
79184588Sdfr	gss_buffer_desc	output_token;
80184588Sdfr	uint32_t	ret_flags;
81184588Sdfr	uint32_t	time_rec;
82184588Sdfr	gssd_cred_id_t	delegated_cred_handle;
83184588Sdfr};
84184588Sdfr
85184588Sdfrstruct accept_sec_context_args {
86184588Sdfr	gssd_ctx_id_t	ctx;
87184588Sdfr	gssd_cred_id_t	cred;
88184588Sdfr	gss_buffer_desc	input_token;
89184588Sdfr	gss_channel_bindings_t input_chan_bindings;
90184588Sdfr};
91184588Sdfr
92184588Sdfrstruct delete_sec_context_res {
93184588Sdfr	uint32_t	major_status;
94184588Sdfr	uint32_t	minor_status;
95184588Sdfr	gss_buffer_desc	output_token;
96184588Sdfr};
97184588Sdfr
98184588Sdfrstruct delete_sec_context_args {
99184588Sdfr	gssd_ctx_id_t	ctx;
100184588Sdfr};
101184588Sdfr
102184588Sdfrenum sec_context_format {
103184588Sdfr	KGSS_HEIMDAL_0_6,
104184588Sdfr	KGSS_HEIMDAL_1_1
105184588Sdfr};
106184588Sdfr
107184588Sdfrstruct export_sec_context_res {
108184588Sdfr	uint32_t	major_status;
109184588Sdfr	uint32_t	minor_status;
110184588Sdfr	enum sec_context_format format;
111184588Sdfr	gss_buffer_desc	interprocess_token;
112184588Sdfr};
113184588Sdfr
114184588Sdfrstruct export_sec_context_args {
115184588Sdfr       gssd_ctx_id_t	ctx;
116184588Sdfr};
117184588Sdfr
118184588Sdfrstruct import_name_res {
119184588Sdfr	uint32_t	major_status;
120184588Sdfr	uint32_t	minor_status;
121184588Sdfr	gssd_name_t	output_name;
122184588Sdfr};
123184588Sdfr
124184588Sdfrstruct import_name_args {
125184588Sdfr	gss_buffer_desc	input_name_buffer;
126184588Sdfr	gss_OID		input_name_type;
127184588Sdfr};
128184588Sdfr
129184588Sdfrstruct canonicalize_name_res {
130184588Sdfr	uint32_t	major_status;
131184588Sdfr	uint32_t	minor_status;
132184588Sdfr	gssd_name_t	output_name;
133184588Sdfr};
134184588Sdfr
135184588Sdfrstruct canonicalize_name_args {
136184588Sdfr	gssd_name_t	input_name;
137184588Sdfr	gss_OID		mech_type;
138184588Sdfr};
139184588Sdfr
140184588Sdfrstruct export_name_res {
141184588Sdfr	uint32_t	major_status;
142184588Sdfr	uint32_t	minor_status;
143184588Sdfr	gss_buffer_desc	exported_name;
144184588Sdfr};
145184588Sdfr
146184588Sdfrstruct export_name_args {
147184588Sdfr	gssd_name_t	input_name;
148184588Sdfr};
149184588Sdfr
150184588Sdfrstruct release_name_res {
151184588Sdfr	uint32_t	major_status;
152184588Sdfr	uint32_t	minor_status;
153184588Sdfr};
154184588Sdfr
155184588Sdfrstruct release_name_args {
156184588Sdfr	gssd_name_t	input_name;
157184588Sdfr};
158184588Sdfr
159184588Sdfrstruct pname_to_uid_res {
160184588Sdfr	uint32_t	major_status;
161184588Sdfr	uint32_t	minor_status;
162184588Sdfr	uint32_t	uid;
163184588Sdfr	uint32_t	gid;
164184588Sdfr	uint32_t	gidlist<>;
165184588Sdfr};
166184588Sdfr
167184588Sdfrstruct pname_to_uid_args {
168184588Sdfr       gssd_name_t	pname;
169184588Sdfr       gss_OID		mech;
170184588Sdfr};
171184588Sdfr
172184588Sdfrstruct acquire_cred_res {
173184588Sdfr	uint32_t	major_status;
174184588Sdfr	uint32_t	minor_status;
175184588Sdfr	gssd_cred_id_t	output_cred;
176184588Sdfr	gss_OID_set	actual_mechs;
177184588Sdfr	uint32_t	time_rec;
178184588Sdfr};
179184588Sdfr
180184588Sdfrstruct acquire_cred_args {
181184588Sdfr	uint32_t	uid;
182184588Sdfr	gssd_name_t	desired_name;
183184588Sdfr	uint32_t	time_req;
184184588Sdfr	gss_OID_set	desired_mechs;
185184588Sdfr	int		cred_usage;
186184588Sdfr};
187184588Sdfr
188184588Sdfrstruct set_cred_option_res {
189184588Sdfr	uint32_t	major_status;
190184588Sdfr	uint32_t	minor_status;
191184588Sdfr};
192184588Sdfr
193184588Sdfrstruct set_cred_option_args {
194184588Sdfr       gssd_cred_id_t	cred;
195184588Sdfr       gss_OID		option_name;
196184588Sdfr       gss_buffer_desc	option_value;
197184588Sdfr};
198184588Sdfr
199184588Sdfrstruct release_cred_res {
200184588Sdfr	uint32_t	major_status;
201184588Sdfr	uint32_t	minor_status;
202184588Sdfr};
203184588Sdfr
204184588Sdfrstruct release_cred_args {
205184588Sdfr	gssd_cred_id_t	cred;
206184588Sdfr};
207184588Sdfr
208184588Sdfrstruct display_status_res {
209184588Sdfr	uint32_t	major_status;
210184588Sdfr	uint32_t	minor_status;
211184588Sdfr	uint32_t	message_context;
212184588Sdfr	gss_buffer_desc	status_string;
213184588Sdfr};
214184588Sdfr
215184588Sdfrstruct display_status_args {
216184588Sdfr       uint32_t		status_value;
217184588Sdfr       int		status_type;
218184588Sdfr       gss_OID		mech_type;
219184588Sdfr       uint32_t		message_context;
220184588Sdfr};
221184588Sdfr
222184588Sdfrprogram GSSD {
223184588Sdfr	version GSSDVERS {
224184588Sdfr		void GSSD_NULL(void) = 0;
225184588Sdfr
226184588Sdfr		init_sec_context_res
227184588Sdfr		GSSD_INIT_SEC_CONTEXT(init_sec_context_args) = 1;
228184588Sdfr
229184588Sdfr		accept_sec_context_res
230184588Sdfr		GSSD_ACCEPT_SEC_CONTEXT(accept_sec_context_args) = 2;
231184588Sdfr
232184588Sdfr		delete_sec_context_res
233184588Sdfr		GSSD_DELETE_SEC_CONTEXT(delete_sec_context_args) = 3;
234184588Sdfr
235184588Sdfr		export_sec_context_res
236184588Sdfr		GSSD_EXPORT_SEC_CONTEXT(export_sec_context_args) = 4;
237184588Sdfr
238184588Sdfr		import_name_res
239184588Sdfr		GSSD_IMPORT_NAME(import_name_args) = 5;
240184588Sdfr
241184588Sdfr		canonicalize_name_res
242184588Sdfr		GSSD_CANONICALIZE_NAME(canonicalize_name_args) = 6;
243184588Sdfr
244184588Sdfr		export_name_res
245184588Sdfr		GSSD_EXPORT_NAME(export_name_args) = 7;
246184588Sdfr
247184588Sdfr		release_name_res
248184588Sdfr		GSSD_RELEASE_NAME(release_name_args) = 8;
249184588Sdfr
250184588Sdfr		pname_to_uid_res
251184588Sdfr		GSSD_PNAME_TO_UID(pname_to_uid_args) = 9;
252184588Sdfr
253184588Sdfr		acquire_cred_res
254184588Sdfr		GSSD_ACQUIRE_CRED(acquire_cred_args) = 10;
255184588Sdfr
256184588Sdfr		set_cred_option_res
257184588Sdfr		GSSD_SET_CRED_OPTION(set_cred_option_args) = 11;
258184588Sdfr
259184588Sdfr		release_cred_res
260184588Sdfr		GSSD_RELEASE_CRED(release_cred_args) = 12;
261184588Sdfr
262184588Sdfr		display_status_res
263184588Sdfr		GSSD_DISPLAY_STATUS(display_status_args) = 13;
264184588Sdfr	} = 1;
265184588Sdfr} = 0x40677373;
266