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