1 /* 2 * Copyright 1993 by OpenVision Technologies, Inc. 3 * 4 * Permission to use, copy, modify, distribute, and sell this software 5 * and its documentation for any purpose is hereby granted without fee, 6 * provided that the above copyright notice appears in all copies and 7 * that both that copyright notice and this permission notice appear in 8 * supporting documentation, and that the name of OpenVision not be used 9 * in advertising or publicity pertaining to distribution of the software 10 * without specific, written prior permission. OpenVision makes no 11 * representations about the suitability of this software for any 12 * purpose. It is provided "as is" without express or implied warranty. 13 * 14 * OPENVISION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 15 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 16 * EVENT SHALL OPENVISION BE LIABLE FOR ANY SPECIAL, INDIRECT OR 17 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF 18 * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 19 * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 20 * PERFORMANCE OF THIS SOFTWARE. 21 */ 22 23 /* 24 * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 25 * Use is subject to license terms. 26 */ 27 28 #ifndef _GSSAPIP_GENERIC_H_ 29 #define _GSSAPIP_GENERIC_H_ 30 31 #pragma ident "%Z%%M% %I% %E% SMI" 32 33 /* 34 * $Id: gssapiP_generic.h,v 1.24 1998/10/30 02:54:06 marc Exp $ 35 */ 36 37 #ifdef __cplusplus 38 extern "C" { 39 #endif 40 41 #if !defined(PROTOTYPE) 42 #define PROTOTYPE(x) x 43 #endif 44 45 #if (defined(_MSDOS) || defined(_WIN32) || defined(macintosh)) 46 #include <k5-int.h> 47 #else 48 #ifdef HAVE_STDLIB_H 49 #ifndef _KERNEL 50 #include <stdlib.h> 51 #endif /* !_KERNEL */ 52 #endif /* HAVE_STDLIB_H */ 53 #endif 54 55 #include <mechglueP.h> 56 #include <gssapi/gssapi_ext.h> 57 #include <gssapi/gssapi.h> 58 #include "gssapi_generic.h" 59 #include "gssapi_err_generic.h" 60 #ifdef _KERNEL 61 #include <sys/errno.h> 62 #else 63 #include <errno.h> 64 #endif 65 66 /** helper macros **/ 67 68 typedef uint64_t gssint_uint64; 69 70 #if 0 /* this is defined in usr/src/uts/common/gssapi/gssapi_ext.h */ 71 #define g_OID_equal(o1,o2) \ 72 (((o1)->length == (o2)->length) && \ 73 (memcmp((o1)->elements,(o2)->elements,(int) (o1)->length) == 0)) 74 #endif 75 76 /* this code knows that an int on the wire is 32 bits. The type of 77 num should be at least this big, or the extra shifts may do weird 78 things */ 79 80 #define TWRITE_INT(ptr, num, bigend) \ 81 (ptr)[0] = (char) ((bigend)?((num)>>24):((num)&0xff)); \ 82 (ptr)[1] = (char) ((bigend)?(((num)>>16)&0xff):(((num)>>8)&0xff)); \ 83 (ptr)[2] = (char) ((bigend)?(((num)>>8)&0xff):(((num)>>16)&0xff)); \ 84 (ptr)[3] = (char) ((bigend)?((num)&0xff):((num)>>24)); \ 85 (ptr) += 4; 86 87 #define TWRITE_INT16(ptr, num, bigend) \ 88 (ptr)[0] = (char) ((bigend)?((num)>>24):((num)&0xff)); \ 89 (ptr)[1] = (char) ((bigend)?(((num)>>16)&0xff):(((num)>>8)&0xff)); \ 90 (ptr) += 2; 91 92 #define TREAD_INT(ptr, num, bigend) \ 93 (num) = (((ptr)[0]<<((bigend)?24: 0)) | \ 94 ((ptr)[1]<<((bigend)?16: 8)) | \ 95 ((ptr)[2]<<((bigend)? 8:16)) | \ 96 ((ptr)[3]<<((bigend)? 0:24))); \ 97 (ptr) += 4; 98 99 #define TREAD_INT16(ptr, num, bigend) \ 100 (num) = (((ptr)[0]<<((bigend)?24: 0)) | \ 101 ((ptr)[1]<<((bigend)?16: 8))); \ 102 (ptr) += 2; 103 104 #define TWRITE_STR(ptr, str, len) \ 105 (void) memcpy((ptr), (char *) (str), (len)); \ 106 (ptr) += (len); 107 108 #define TREAD_STR(ptr, str, len) \ 109 (str) = (ptr); \ 110 (ptr) += (len); 111 112 #define TWRITE_BUF(ptr, buf, bigend) \ 113 TWRITE_INT((ptr), (buf).length, (bigend)); \ 114 TWRITE_STR((ptr), (buf).value, (buf).length); 115 116 /** malloc wrappers; these may actually do something later */ 117 118 #ifdef _KERNEL 119 #define xmalloc(n) MALLOC(n) 120 #else 121 #define xmalloc(n) malloc(n) 122 #endif 123 124 #define xrealloc(p,n) realloc(p,n) 125 #ifdef xfree 126 #undef xfree 127 #endif 128 129 #ifdef _KERNEL 130 #define xfree_wrap(p,sze) kmem_free(p,sze) 131 #else 132 #define xfree_wrap(p,sze) free(p) 133 #define xfree(p) free(p) 134 #endif 135 136 /** helper functions **/ 137 138 typedef struct _g_set *g_set; 139 140 int g_set_init (g_set *s); 141 int g_set_destroy (g_set *s); 142 int g_set_entry_add (g_set *s, void *key, void *value); 143 int g_set_entry_delete (g_set *s, void *key); 144 int g_set_entry_get (g_set *s, void *key, void **value); 145 146 int g_save_name (void **vdb, gss_name_t name); 147 int g_save_cred_id (void **vdb, gss_cred_id_t cred); 148 int g_save_ctx_id (void **vdb, gss_ctx_id_t ctx); 149 150 int g_validate_name (void **vdb, gss_name_t name); 151 int g_validate_cred_id (void **vdb, gss_cred_id_t cred); 152 int g_validate_ctx_id (void **vdb, gss_ctx_id_t ctx); 153 154 int g_delete_name (void **vdb, gss_name_t name); 155 int g_delete_cred_id (void **vdb, gss_cred_id_t cred); 156 int g_delete_ctx_id (void **vdb, gss_ctx_id_t ctx); 157 158 int g_make_string_buffer (const char *str, gss_buffer_t buffer); 159 160 int g_copy_OID_set (const gss_OID_set_desc * const in, gss_OID_set *out); 161 162 int g_token_size (gss_OID mech, unsigned int body_size); 163 164 void g_make_token_header (gss_OID mech, int body_size, 165 unsigned char **buf, int tok_type); 166 167 gss_int32 g_verify_token_header (gss_OID mech, unsigned int *body_size, 168 unsigned char **buf, int tok_type, 169 unsigned int toksize_in, 170 int wrapper_required); 171 172 OM_uint32 g_display_major_status (OM_uint32 *minor_status, 173 OM_uint32 status_value, 174 OM_uint32 *message_context, 175 gss_buffer_t status_string); 176 177 OM_uint32 g_display_com_err_status (OM_uint32 *minor_status, 178 OM_uint32 status_value, 179 gss_buffer_t status_string); 180 181 gss_int32 g_order_init (void **queue, gssint_uint64 seqnum, 182 int do_replay, int do_sequence, int wide); 183 184 gss_int32 g_order_check (void **queue, gssint_uint64 seqnum); 185 186 void g_order_free (void **queue); 187 188 gss_uint32 g_queue_size(void *vqueue, size_t *sizep); 189 gss_uint32 g_queue_externalize(void *vqueue, unsigned char **buf, 190 size_t *lenremain); 191 gss_uint32 g_queue_internalize(void **vqueue, unsigned char **buf, 192 size_t *lenremain); 193 194 char *g_local_host_name (void); 195 196 char *g_strdup (char *str); 197 198 #ifdef __cplusplus 199 } 200 #endif 201 202 #endif /* _GSSAPIP_GENERIC_H_ */ 203