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