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