xref: /freebsd-src/sys/kgssapi/gssd.x (revision dd7d42a1fae5a4879b62689a165238082421f343)
1a9148abdSDoug Rabson /*-
2a9148abdSDoug Rabson  * Copyright (c) 2008 Isilon Inc http://www.isilon.com/
3a9148abdSDoug Rabson  * Authors: Doug Rabson <dfr@rabson.org>
4a9148abdSDoug Rabson  * Developed with Red Inc: Alfred Perlstein <alfred@freebsd.org>
5a9148abdSDoug Rabson  *
6a9148abdSDoug Rabson  * Redistribution and use in source and binary forms, with or without
7a9148abdSDoug Rabson  * modification, are permitted provided that the following conditions
8a9148abdSDoug Rabson  * are met:
9a9148abdSDoug Rabson  * 1. Redistributions of source code must retain the above copyright
10a9148abdSDoug Rabson  *    notice, this list of conditions and the following disclaimer.
11a9148abdSDoug Rabson  * 2. Redistributions in binary form must reproduce the above copyright
12a9148abdSDoug Rabson  *    notice, this list of conditions and the following disclaimer in the
13a9148abdSDoug Rabson  *    documentation and/or other materials provided with the distribution.
14a9148abdSDoug Rabson  *
15a9148abdSDoug Rabson  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16a9148abdSDoug Rabson  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17a9148abdSDoug Rabson  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18a9148abdSDoug Rabson  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19a9148abdSDoug Rabson  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20a9148abdSDoug Rabson  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21a9148abdSDoug Rabson  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22a9148abdSDoug Rabson  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23a9148abdSDoug Rabson  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24a9148abdSDoug Rabson  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25a9148abdSDoug Rabson  * SUCH DAMAGE.
26a9148abdSDoug Rabson  */
27a9148abdSDoug Rabson 
28a9148abdSDoug Rabson 
29a9148abdSDoug Rabson #ifdef RPC_HDR
30a9148abdSDoug Rabson 
31a9148abdSDoug Rabson %#ifdef _KERNEL
32a9148abdSDoug Rabson %#include <kgssapi/gssapi.h>
33a9148abdSDoug Rabson %#else
34a9148abdSDoug Rabson %#include <gssapi/gssapi.h>
35*dd7d42a1SRick Macklem %#include <netdb.h>
36a9148abdSDoug Rabson %#endif
37a9148abdSDoug Rabson 
38a9148abdSDoug Rabson %extern bool_t xdr_gss_buffer_desc(XDR *xdrs, gss_buffer_desc *buf);
39a9148abdSDoug Rabson %extern bool_t xdr_gss_OID_desc(XDR *xdrs, gss_OID_desc *oid);
40a9148abdSDoug Rabson %extern bool_t xdr_gss_OID(XDR *xdrs, gss_OID *oidp);
41a9148abdSDoug Rabson %extern bool_t xdr_gss_OID_set_desc(XDR *xdrs, gss_OID_set_desc *set);
42a9148abdSDoug Rabson %extern bool_t xdr_gss_OID_set(XDR *xdrs, gss_OID_set *setp);
43a9148abdSDoug Rabson %extern bool_t xdr_gss_channel_bindings_t(XDR *xdrs, gss_channel_bindings_t *chp);
44a9148abdSDoug Rabson 
45a9148abdSDoug Rabson #endif
46a9148abdSDoug Rabson 
47a9148abdSDoug Rabson typedef uint64_t gssd_ctx_id_t;
48a9148abdSDoug Rabson typedef uint64_t gssd_cred_id_t;
49a9148abdSDoug Rabson typedef uint64_t gssd_name_t;
50a9148abdSDoug Rabson 
51a9148abdSDoug Rabson struct init_sec_context_res {
52a9148abdSDoug Rabson 	uint32_t	major_status;
53a9148abdSDoug Rabson 	uint32_t	minor_status;
54a9148abdSDoug Rabson 	gssd_ctx_id_t	ctx;
55a9148abdSDoug Rabson 	gss_OID		actual_mech_type;
56a9148abdSDoug Rabson 	gss_buffer_desc output_token;
57a9148abdSDoug Rabson 	uint32_t	ret_flags;
58a9148abdSDoug Rabson 	uint32_t	time_rec;
59a9148abdSDoug Rabson };
60a9148abdSDoug Rabson 
61a9148abdSDoug Rabson struct init_sec_context_args {
62a9148abdSDoug Rabson 	uint32_t	uid;
63a9148abdSDoug Rabson 	gssd_cred_id_t	cred;
64a9148abdSDoug Rabson 	gssd_ctx_id_t	ctx;
65a9148abdSDoug Rabson 	gssd_name_t	name;
66a9148abdSDoug Rabson 	gss_OID		mech_type;
67a9148abdSDoug Rabson 	uint32_t	req_flags;
68a9148abdSDoug Rabson 	uint32_t	time_req;
69a9148abdSDoug Rabson 	gss_channel_bindings_t input_chan_bindings;
70a9148abdSDoug Rabson 	gss_buffer_desc input_token;
71a9148abdSDoug Rabson };
72a9148abdSDoug Rabson 
73a9148abdSDoug Rabson struct accept_sec_context_res {
74a9148abdSDoug Rabson 	uint32_t	major_status;
75a9148abdSDoug Rabson 	uint32_t	minor_status;
76a9148abdSDoug Rabson 	gssd_ctx_id_t	ctx;
77a9148abdSDoug Rabson 	gssd_name_t	src_name;
78a9148abdSDoug Rabson 	gss_OID		mech_type;
79a9148abdSDoug Rabson 	gss_buffer_desc	output_token;
80a9148abdSDoug Rabson 	uint32_t	ret_flags;
81a9148abdSDoug Rabson 	uint32_t	time_rec;
82a9148abdSDoug Rabson 	gssd_cred_id_t	delegated_cred_handle;
83a9148abdSDoug Rabson };
84a9148abdSDoug Rabson 
85a9148abdSDoug Rabson struct accept_sec_context_args {
86a9148abdSDoug Rabson 	gssd_ctx_id_t	ctx;
87a9148abdSDoug Rabson 	gssd_cred_id_t	cred;
88a9148abdSDoug Rabson 	gss_buffer_desc	input_token;
89a9148abdSDoug Rabson 	gss_channel_bindings_t input_chan_bindings;
90a9148abdSDoug Rabson };
91a9148abdSDoug Rabson 
92a9148abdSDoug Rabson struct delete_sec_context_res {
93a9148abdSDoug Rabson 	uint32_t	major_status;
94a9148abdSDoug Rabson 	uint32_t	minor_status;
95a9148abdSDoug Rabson 	gss_buffer_desc	output_token;
96a9148abdSDoug Rabson };
97a9148abdSDoug Rabson 
98a9148abdSDoug Rabson struct delete_sec_context_args {
99a9148abdSDoug Rabson 	gssd_ctx_id_t	ctx;
100a9148abdSDoug Rabson };
101a9148abdSDoug Rabson 
102a9148abdSDoug Rabson enum sec_context_format {
103a9148abdSDoug Rabson 	KGSS_HEIMDAL_0_6,
104a9148abdSDoug Rabson 	KGSS_HEIMDAL_1_1
105a9148abdSDoug Rabson };
106a9148abdSDoug Rabson 
107a9148abdSDoug Rabson struct export_sec_context_res {
108a9148abdSDoug Rabson 	uint32_t	major_status;
109a9148abdSDoug Rabson 	uint32_t	minor_status;
110a9148abdSDoug Rabson 	enum sec_context_format format;
111a9148abdSDoug Rabson 	gss_buffer_desc	interprocess_token;
112a9148abdSDoug Rabson };
113a9148abdSDoug Rabson 
114a9148abdSDoug Rabson struct export_sec_context_args {
115a9148abdSDoug Rabson        gssd_ctx_id_t	ctx;
116a9148abdSDoug Rabson };
117a9148abdSDoug Rabson 
118a9148abdSDoug Rabson struct import_name_res {
119a9148abdSDoug Rabson 	uint32_t	major_status;
120a9148abdSDoug Rabson 	uint32_t	minor_status;
121a9148abdSDoug Rabson 	gssd_name_t	output_name;
122a9148abdSDoug Rabson };
123a9148abdSDoug Rabson 
124a9148abdSDoug Rabson struct import_name_args {
125a9148abdSDoug Rabson 	gss_buffer_desc	input_name_buffer;
126a9148abdSDoug Rabson 	gss_OID		input_name_type;
127a9148abdSDoug Rabson };
128a9148abdSDoug Rabson 
129a9148abdSDoug Rabson struct canonicalize_name_res {
130a9148abdSDoug Rabson 	uint32_t	major_status;
131a9148abdSDoug Rabson 	uint32_t	minor_status;
132a9148abdSDoug Rabson 	gssd_name_t	output_name;
133a9148abdSDoug Rabson };
134a9148abdSDoug Rabson 
135a9148abdSDoug Rabson struct canonicalize_name_args {
136a9148abdSDoug Rabson 	gssd_name_t	input_name;
137a9148abdSDoug Rabson 	gss_OID		mech_type;
138a9148abdSDoug Rabson };
139a9148abdSDoug Rabson 
140a9148abdSDoug Rabson struct export_name_res {
141a9148abdSDoug Rabson 	uint32_t	major_status;
142a9148abdSDoug Rabson 	uint32_t	minor_status;
143a9148abdSDoug Rabson 	gss_buffer_desc	exported_name;
144a9148abdSDoug Rabson };
145a9148abdSDoug Rabson 
146a9148abdSDoug Rabson struct export_name_args {
147a9148abdSDoug Rabson 	gssd_name_t	input_name;
148a9148abdSDoug Rabson };
149a9148abdSDoug Rabson 
150a9148abdSDoug Rabson struct release_name_res {
151a9148abdSDoug Rabson 	uint32_t	major_status;
152a9148abdSDoug Rabson 	uint32_t	minor_status;
153a9148abdSDoug Rabson };
154a9148abdSDoug Rabson 
155a9148abdSDoug Rabson struct release_name_args {
156a9148abdSDoug Rabson 	gssd_name_t	input_name;
157a9148abdSDoug Rabson };
158a9148abdSDoug Rabson 
159a9148abdSDoug Rabson struct pname_to_uid_res {
160a9148abdSDoug Rabson 	uint32_t	major_status;
161a9148abdSDoug Rabson 	uint32_t	minor_status;
162a9148abdSDoug Rabson 	uint32_t	uid;
163a9148abdSDoug Rabson 	uint32_t	gid;
164a9148abdSDoug Rabson 	uint32_t	gidlist<>;
165a9148abdSDoug Rabson };
166a9148abdSDoug Rabson 
167a9148abdSDoug Rabson struct pname_to_uid_args {
168a9148abdSDoug Rabson        gssd_name_t	pname;
169a9148abdSDoug Rabson        gss_OID		mech;
170a9148abdSDoug Rabson };
171a9148abdSDoug Rabson 
172a9148abdSDoug Rabson struct acquire_cred_res {
173a9148abdSDoug Rabson 	uint32_t	major_status;
174a9148abdSDoug Rabson 	uint32_t	minor_status;
175a9148abdSDoug Rabson 	gssd_cred_id_t	output_cred;
176a9148abdSDoug Rabson 	gss_OID_set	actual_mechs;
177a9148abdSDoug Rabson 	uint32_t	time_rec;
178a9148abdSDoug Rabson };
179a9148abdSDoug Rabson 
180a9148abdSDoug Rabson struct acquire_cred_args {
181a9148abdSDoug Rabson 	uint32_t	uid;
182a9148abdSDoug Rabson 	gssd_name_t	desired_name;
183a9148abdSDoug Rabson 	uint32_t	time_req;
184a9148abdSDoug Rabson 	gss_OID_set	desired_mechs;
185a9148abdSDoug Rabson 	int		cred_usage;
186a9148abdSDoug Rabson };
187a9148abdSDoug Rabson 
188a9148abdSDoug Rabson struct set_cred_option_res {
189a9148abdSDoug Rabson 	uint32_t	major_status;
190a9148abdSDoug Rabson 	uint32_t	minor_status;
191a9148abdSDoug Rabson };
192a9148abdSDoug Rabson 
193a9148abdSDoug Rabson struct set_cred_option_args {
194a9148abdSDoug Rabson        gssd_cred_id_t	cred;
195a9148abdSDoug Rabson        gss_OID		option_name;
196a9148abdSDoug Rabson        gss_buffer_desc	option_value;
197a9148abdSDoug Rabson };
198a9148abdSDoug Rabson 
199a9148abdSDoug Rabson struct release_cred_res {
200a9148abdSDoug Rabson 	uint32_t	major_status;
201a9148abdSDoug Rabson 	uint32_t	minor_status;
202a9148abdSDoug Rabson };
203a9148abdSDoug Rabson 
204a9148abdSDoug Rabson struct release_cred_args {
205a9148abdSDoug Rabson 	gssd_cred_id_t	cred;
206a9148abdSDoug Rabson };
207a9148abdSDoug Rabson 
208a9148abdSDoug Rabson struct display_status_res {
209a9148abdSDoug Rabson 	uint32_t	major_status;
210a9148abdSDoug Rabson 	uint32_t	minor_status;
211a9148abdSDoug Rabson 	uint32_t	message_context;
212a9148abdSDoug Rabson 	gss_buffer_desc	status_string;
213a9148abdSDoug Rabson };
214a9148abdSDoug Rabson 
215a9148abdSDoug Rabson struct display_status_args {
216a9148abdSDoug Rabson        uint32_t		status_value;
217a9148abdSDoug Rabson        int		status_type;
218a9148abdSDoug Rabson        gss_OID		mech_type;
219a9148abdSDoug Rabson        uint32_t		message_context;
220a9148abdSDoug Rabson };
221a9148abdSDoug Rabson 
222*dd7d42a1SRick Macklem struct ip_to_dns_res {
223*dd7d42a1SRick Macklem 	uint32_t	major_status;
224*dd7d42a1SRick Macklem 	uint32_t	minor_status;
225*dd7d42a1SRick Macklem 	char		dns_name<NI_MAXHOST>;
226*dd7d42a1SRick Macklem };
227*dd7d42a1SRick Macklem 
228*dd7d42a1SRick Macklem struct ip_to_dns_args {
229*dd7d42a1SRick Macklem 	char		ip_addr<NI_MAXHOST>;
230*dd7d42a1SRick Macklem };
231*dd7d42a1SRick Macklem 
232a9148abdSDoug Rabson program GSSD {
233a9148abdSDoug Rabson 	version GSSDVERS {
234a9148abdSDoug Rabson 		void GSSD_NULL(void) = 0;
235a9148abdSDoug Rabson 
236a9148abdSDoug Rabson 		init_sec_context_res
237a9148abdSDoug Rabson 		GSSD_INIT_SEC_CONTEXT(init_sec_context_args) = 1;
238a9148abdSDoug Rabson 
239a9148abdSDoug Rabson 		accept_sec_context_res
240a9148abdSDoug Rabson 		GSSD_ACCEPT_SEC_CONTEXT(accept_sec_context_args) = 2;
241a9148abdSDoug Rabson 
242a9148abdSDoug Rabson 		delete_sec_context_res
243a9148abdSDoug Rabson 		GSSD_DELETE_SEC_CONTEXT(delete_sec_context_args) = 3;
244a9148abdSDoug Rabson 
245a9148abdSDoug Rabson 		export_sec_context_res
246a9148abdSDoug Rabson 		GSSD_EXPORT_SEC_CONTEXT(export_sec_context_args) = 4;
247a9148abdSDoug Rabson 
248a9148abdSDoug Rabson 		import_name_res
249a9148abdSDoug Rabson 		GSSD_IMPORT_NAME(import_name_args) = 5;
250a9148abdSDoug Rabson 
251a9148abdSDoug Rabson 		canonicalize_name_res
252a9148abdSDoug Rabson 		GSSD_CANONICALIZE_NAME(canonicalize_name_args) = 6;
253a9148abdSDoug Rabson 
254a9148abdSDoug Rabson 		export_name_res
255a9148abdSDoug Rabson 		GSSD_EXPORT_NAME(export_name_args) = 7;
256a9148abdSDoug Rabson 
257a9148abdSDoug Rabson 		release_name_res
258a9148abdSDoug Rabson 		GSSD_RELEASE_NAME(release_name_args) = 8;
259a9148abdSDoug Rabson 
260a9148abdSDoug Rabson 		pname_to_uid_res
261a9148abdSDoug Rabson 		GSSD_PNAME_TO_UID(pname_to_uid_args) = 9;
262a9148abdSDoug Rabson 
263a9148abdSDoug Rabson 		acquire_cred_res
264a9148abdSDoug Rabson 		GSSD_ACQUIRE_CRED(acquire_cred_args) = 10;
265a9148abdSDoug Rabson 
266a9148abdSDoug Rabson 		set_cred_option_res
267a9148abdSDoug Rabson 		GSSD_SET_CRED_OPTION(set_cred_option_args) = 11;
268a9148abdSDoug Rabson 
269a9148abdSDoug Rabson 		release_cred_res
270a9148abdSDoug Rabson 		GSSD_RELEASE_CRED(release_cred_args) = 12;
271a9148abdSDoug Rabson 
272a9148abdSDoug Rabson 		display_status_res
273a9148abdSDoug Rabson 		GSSD_DISPLAY_STATUS(display_status_args) = 13;
274*dd7d42a1SRick Macklem 
275*dd7d42a1SRick Macklem 		ip_to_dns_res
276*dd7d42a1SRick Macklem 		GSSD_IP_TO_DNS(ip_to_dns_args) = 14;
277a9148abdSDoug Rabson 	} = 1;
278a9148abdSDoug Rabson } = 0x40677373;
279