xref: /illumos-gate/usr/src/uts/common/gssapi/mechs/krb5/include/gssapiP_generic.h (revision ab9b2e153c3a9a2b1141fefa87925b1a9beb1236)
1 /*
2  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
3  * Use is subject to license terms.
4  */
5 
6 #pragma ident	"%Z%%M%	%I%	%E% SMI"
7 
8 /*
9  * Copyright 1993 by OpenVision Technologies, Inc.
10  *
11  * Permission to use, copy, modify, distribute, and sell this software
12  * and its documentation for any purpose is hereby granted without fee,
13  * provided that the above copyright notice appears in all copies and
14  * that both that copyright notice and this permission notice appear in
15  * supporting documentation, and that the name of OpenVision not be used
16  * in advertising or publicity pertaining to distribution of the software
17  * without specific, written prior permission. OpenVision makes no
18  * representations about the suitability of this software for any
19  * purpose.  It is provided "as is" without express or implied warranty.
20  *
21  * OPENVISION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
22  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
23  * EVENT SHALL OPENVISION BE LIABLE FOR ANY SPECIAL, INDIRECT OR
24  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
25  * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
26  * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
27  * PERFORMANCE OF THIS SOFTWARE.
28  */
29 
30 #ifndef _GSSAPIP_GENERIC_H_
31 #define _GSSAPIP_GENERIC_H_
32 
33 /*
34  * $Id: gssapiP_generic.h 18131 2006-06-14 22:27:54Z tlyu $
35  */
36 
37 #if defined(_WIN32)
38 #include "k5-int.h"
39 #else
40 #include "autoconf.h"
41 #ifndef _KERNEL
42 #ifdef HAVE_STDLIB_H
43 #include <stdlib.h>
44 #endif /* !_KERNEL */
45 #endif
46 #endif
47 
48 #include "k5-thread.h"
49 
50 #include "gssapi_generic.h"
51 
52 #include "gssapi_err_generic.h"
53 #ifndef _KERNEL
54 #include <errno.h>
55 #else
56 #include <sys/errno.h>
57 #endif /* !_KERNEL */
58 
59 #include "k5-platform.h"
60 typedef UINT64_TYPE gssint_uint64;
61 
62 #include "gssapi/gssapi_ext.h"
63 
64 /** helper macros **/
65 
66 #if 0 /* SUNW15resync - on Solaris g_OID_equal is in gssapi_ext.h */
67 #define	g_OID_equal(o1, o2) \
68 	(((o1)->length == (o2)->length) && \
69 	(memcmp((o1)->elements, (o2)->elements, (o1)->length) == 0))
70 #endif
71 
72 /* this code knows that an int on the wire is 32 bits.  The type of
73    num should be at least this big, or the extra shifts may do weird
74    things */
75 
76 #define TWRITE_INT(ptr, num, bigend) \
77    (ptr)[0] = (char) ((bigend)?((num)>>24):((num)&0xff)); \
78    (ptr)[1] = (char) ((bigend)?(((num)>>16)&0xff):(((num)>>8)&0xff)); \
79    (ptr)[2] = (char) ((bigend)?(((num)>>8)&0xff):(((num)>>16)&0xff)); \
80    (ptr)[3] = (char) ((bigend)?((num)&0xff):((num)>>24)); \
81    (ptr) += 4;
82 
83 #define TWRITE_INT16(ptr, num, bigend) \
84    (ptr)[0] = (char) ((bigend)?((num)>>24):((num)&0xff)); \
85    (ptr)[1] = (char) ((bigend)?(((num)>>16)&0xff):(((num)>>8)&0xff)); \
86    (ptr) += 2;
87 
88 #define TREAD_INT(ptr, num, bigend) \
89    (num) = (((ptr)[0]<<((bigend)?24: 0)) | \
90             ((ptr)[1]<<((bigend)?16: 8)) | \
91             ((ptr)[2]<<((bigend)? 8:16)) | \
92             ((ptr)[3]<<((bigend)? 0:24))); \
93    (ptr) += 4;
94 
95 #define TREAD_INT16(ptr, num, bigend) \
96    (num) = (((ptr)[0]<<((bigend)?24: 0)) | \
97             ((ptr)[1]<<((bigend)?16: 8))); \
98    (ptr) += 2;
99 
100 #define TWRITE_STR(ptr, str, len) \
101   (void) memcpy((ptr), (char *) (str), (len));	\
102    (ptr) += (len);
103 
104 #define TREAD_STR(ptr, str, len) \
105    (str) = (ptr); \
106    (ptr) += (len);
107 
108 #define TWRITE_BUF(ptr, buf, bigend) \
109    TWRITE_INT((ptr), (buf).length, (bigend)); \
110    TWRITE_STR((ptr), (buf).value, (buf).length);
111 
112 /** malloc wrappers; these may actually do something later */
113 
114 #ifdef _KERNEL
115 #define xmalloc(n) MALLOC(n)
116 #else
117 #define xmalloc(n) malloc(n)
118 #endif
119 
120 #define xrealloc(p,n) realloc(p,n)
121 #ifdef xfree
122 #undef xfree
123 #endif
124 
125 #ifdef _KERNEL
126 #define xfree_wrap(p,sze) kmem_free(p,sze)
127 #else
128 #define xfree_wrap(p,sze) free(p)
129 #define xfree(p) free(p)
130 #endif
131 
132 /** helper functions **/
133 
134 /* hide names from applications, especially glib applications */
135 #define	g_set_init		gssint_g_set_init
136 #define	g_set_destroy		gssint_g_set_destroy
137 #define	g_set_entry_add		gssint_g_set_entry_add
138 #define	g_set_entry_delete	gssint_g_set_entry_delete
139 #define	g_set_entry_get		gssint_g_set_entry_get
140 #define	g_save_name		gssint_g_save_name
141 #define	g_save_cred_id		gssint_g_save_cred_id
142 #define	g_save_ctx_id		gssint_g_save_ctx_id
143 #define	g_save_lucidctx_id	gssint_g_save_lucidctx_id
144 #define	g_validate_name		gssint_g_validate_name
145 #define	g_validate_cred_id	gssint_g_validate_cred_id
146 #define	g_validate_ctx_id	gssint_g_validate_ctx_id
147 #define	g_validate_lucidctx_id	gssint_g_validate_lucidctx_id
148 #define	g_delete_name		gssint_g_delete_name
149 #define	g_delete_cred_id	gssint_g_delete_cred_id
150 #define	g_delete_ctx_id		gssint_g_delete_ctx_id
151 #define	g_delete_lucidctx_id	gssint_g_delete_lucidctx_id
152 #define	g_make_string_buffer	gssint_g_make_string_buffer
153 #define	g_token_size		gssint_g_token_size
154 #define	g_make_token_header	gssint_g_make_token_header
155 #define	g_verify_token_header	gssint_g_verify_token_header
156 #define	g_display_major_status	gssint_g_display_major_status
157 #define	g_display_com_err_status gssint_g_display_com_err_status
158 #define	g_order_init		gssint_g_order_init
159 #define	g_order_check		gssint_g_order_check
160 #define	g_order_free		gssint_g_order_free
161 #define	g_queue_size		gssint_g_queue_size
162 #define	g_queue_externalize	gssint_g_queue_externalize
163 #define	g_queue_internalize	gssint_g_queue_internalize
164 #define	g_canonicalize_host	gssint_g_canonicalize_host
165 #define	g_local_host_name	gssint_g_local_host_name
166 #define	g_strdup		gssint_g_strdup
167 
168 typedef struct _g_set_elt *g_set_elt;
169 typedef struct {
170     k5_mutex_t mutex;
171     void *data;
172 } g_set;
173 #define G_SET_INIT { K5_MUTEX_PARTIAL_INITIALIZER, 0 }
174 
175 int g_set_init (g_set_elt *s);
176 int g_set_destroy (g_set_elt *s);
177 int g_set_entry_add (g_set_elt *s, void *key, void *value);
178 int g_set_entry_delete (g_set_elt *s, void *key);
179 int g_set_entry_get (g_set_elt *s, void *key, void **value);
180 
181 int g_save_name (g_set *vdb, gss_name_t name);
182 int g_save_cred_id (g_set *vdb, gss_cred_id_t cred);
183 int g_save_ctx_id (g_set *vdb, gss_ctx_id_t ctx);
184 int g_save_lucidctx_id (g_set *vdb, void *lctx);
185 
186 int g_validate_name (g_set *vdb, gss_name_t name);
187 int g_validate_cred_id (g_set *vdb, gss_cred_id_t cred);
188 int g_validate_ctx_id (g_set *vdb, gss_ctx_id_t ctx);
189 int g_validate_lucidctx_id (g_set *vdb, void *lctx);
190 
191 int g_delete_name (g_set *vdb, gss_name_t name);
192 int g_delete_cred_id (g_set *vdb, gss_cred_id_t cred);
193 int g_delete_ctx_id (g_set *vdb, gss_ctx_id_t ctx);
194 int g_delete_lucidctx_id (g_set *vdb, void *lctx);
195 
196 int g_make_string_buffer (const char *str, gss_buffer_t buffer);
197 
198 unsigned int g_token_size (const gss_OID_desc * mech, unsigned int body_size);
199 
200 void g_make_token_header (const gss_OID_desc * mech, unsigned int body_size,
201 			  unsigned char **buf, int tok_type);
202 
203 gss_int32 g_verify_token_header (const gss_OID_desc * mech,
204 				 unsigned int *body_size,
205 				 unsigned char **buf, int tok_type,
206 				 unsigned int toksize_in,
207 				 int wrapper_required);
208 
209 OM_uint32 g_display_major_status (OM_uint32 *minor_status,
210 				 OM_uint32 status_value,
211 				 OM_uint32 *message_context,
212 				 gss_buffer_t status_string);
213 
214 OM_uint32 g_display_com_err_status (OM_uint32 *minor_status,
215 				   OM_uint32 status_value,
216 				   gss_buffer_t status_string);
217 
218 gss_int32 g_order_init (void **queue, gssint_uint64 seqnum,
219 				  int do_replay, int do_sequence, int wide);
220 
221 gss_int32 g_order_check (void **queue, gssint_uint64 seqnum);
222 
223 void g_order_free (void **queue);
224 
225 gss_uint32 g_queue_size(void *vqueue, size_t *sizep);
226 gss_uint32 g_queue_externalize(void *vqueue, unsigned char **buf,
227 			       size_t *lenremain);
228 gss_uint32 g_queue_internalize(void **vqueue, unsigned char **buf,
229 			       size_t *lenremain);
230 
231 char *g_strdup (char *str);
232 
233 /** declarations of internal name mechanism functions **/
234 
235 #if 0 /* SUNW15resync - mved to mglueP.h for sake of non-krb5 mechs */
236 OM_uint32 generic_gss_release_buffer
237 (OM_uint32*,       /* minor_status */
238             gss_buffer_t      /* buffer */
239            );
240 
241 OM_uint32 generic_gss_release_oid_set
242 (OM_uint32*,       /* minor_status */
243             gss_OID_set*      /* set */
244            );
245 
246 OM_uint32 generic_gss_release_oid
247 (OM_uint32*,       /* minor_status */
248             gss_OID*         /* set */
249            );
250 
251 OM_uint32 generic_gss_copy_oid
252 (OM_uint32 *,	/* minor_status */
253             gss_OID_desc * const,   /* oid */ /* SUNW15resync */
254 	    gss_OID *		/* new_oid */
255 	    );
256 
257 OM_uint32 generic_gss_create_empty_oid_set
258 (OM_uint32 *,	/* minor_status */
259 	    gss_OID_set *	/* oid_set */
260 	   );
261 
262 OM_uint32 generic_gss_add_oid_set_member
263 (OM_uint32 *,	/* minor_status */
264 	    gss_OID_desc * const,		/* member_oid */
265 	    gss_OID_set *	/* oid_set */
266 	   );
267 
268 OM_uint32 generic_gss_test_oid_set_member
269 (OM_uint32 *,	/* minor_status */
270 	    gss_OID_desc * const,		/* member */
271 	    gss_OID_set,	/* set */
272 	    int *		/* present */
273 	   );
274 
275 OM_uint32 generic_gss_oid_to_str
276 (OM_uint32 *,	/* minor_status */
277 	    gss_OID_desc * const,		/* oid */
278 	    gss_buffer_t	/* oid_str */
279 	   );
280 
281 OM_uint32 generic_gss_str_to_oid
282 (OM_uint32 *,	/* minor_status */
283 	    gss_buffer_t,	/* oid_str */
284 	    gss_OID *		/* oid */
285 	   );
286 #endif /* 0 */
287 
288 #endif /* _GSSAPIP_GENERIC_H_ */
289