1 /* 2 * Copyright 2008 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" 59 typedef 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 167 typedef struct _g_set_elt *g_set_elt; 168 typedef struct { 169 k5_mutex_t mutex; 170 void *data; 171 } g_set; 172 #define G_SET_INIT { K5_MUTEX_PARTIAL_INITIALIZER, 0 } 173 174 int g_set_init (g_set_elt *s); 175 int g_set_destroy (g_set_elt *s); 176 int g_set_entry_add (g_set_elt *s, void *key, void *value); 177 int g_set_entry_delete (g_set_elt *s, void *key); 178 int g_set_entry_get (g_set_elt *s, void *key, void **value); 179 180 int g_save_name (g_set *vdb, gss_name_t name); 181 int g_save_cred_id (g_set *vdb, gss_cred_id_t cred); 182 int g_save_ctx_id (g_set *vdb, gss_ctx_id_t ctx); 183 int g_save_lucidctx_id (g_set *vdb, void *lctx); 184 185 int g_validate_name (g_set *vdb, gss_name_t name); 186 int g_validate_cred_id (g_set *vdb, gss_cred_id_t cred); 187 int g_validate_ctx_id (g_set *vdb, gss_ctx_id_t ctx); 188 int g_validate_lucidctx_id (g_set *vdb, void *lctx); 189 190 int g_delete_name (g_set *vdb, gss_name_t name); 191 int g_delete_cred_id (g_set *vdb, gss_cred_id_t cred); 192 int g_delete_ctx_id (g_set *vdb, gss_ctx_id_t ctx); 193 int g_delete_lucidctx_id (g_set *vdb, void *lctx); 194 195 int g_make_string_buffer (const char *str, gss_buffer_t buffer); 196 197 unsigned int g_token_size (const gss_OID_desc * mech, unsigned int body_size); 198 199 void g_make_token_header (const gss_OID_desc * mech, unsigned int body_size, 200 unsigned char **buf, int tok_type); 201 202 gss_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 208 OM_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 213 OM_uint32 g_display_com_err_status (OM_uint32 *minor_status, 214 OM_uint32 status_value, 215 gss_buffer_t status_string); 216 217 gss_int32 g_order_init (void **queue, gssint_uint64 seqnum, 218 int do_replay, int do_sequence, int wide); 219 220 gss_int32 g_order_check (void **queue, gssint_uint64 seqnum); 221 222 void g_order_free (void **queue); 223 224 gss_uint32 g_queue_size(void *vqueue, size_t *sizep); 225 gss_uint32 g_queue_externalize(void *vqueue, unsigned char **buf, 226 size_t *lenremain); 227 gss_uint32 g_queue_internalize(void **vqueue, unsigned char **buf, 228 size_t *lenremain); 229 230 char *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 */ 235 OM_uint32 generic_gss_release_buffer 236 (OM_uint32*, /* minor_status */ 237 gss_buffer_t /* buffer */ 238 ); 239 240 OM_uint32 generic_gss_release_oid_set 241 (OM_uint32*, /* minor_status */ 242 gss_OID_set* /* set */ 243 ); 244 245 OM_uint32 generic_gss_release_oid 246 (OM_uint32*, /* minor_status */ 247 gss_OID* /* set */ 248 ); 249 250 OM_uint32 generic_gss_copy_oid 251 (OM_uint32 *, /* minor_status */ 252 gss_OID_desc * const, /* oid */ /* SUNW15resync */ 253 gss_OID * /* new_oid */ 254 ); 255 256 OM_uint32 generic_gss_create_empty_oid_set 257 (OM_uint32 *, /* minor_status */ 258 gss_OID_set * /* oid_set */ 259 ); 260 261 OM_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 267 OM_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 274 OM_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 280 OM_uint32 generic_gss_str_to_oid 281 (OM_uint32 *, /* minor_status */ 282 gss_buffer_t, /* oid_str */ 283 gss_OID * /* oid */ 284 ); 285 #endif /* 0 */ 286 287 #endif /* _GSSAPIP_GENERIC_H_ */ 288