1 /* 2 * Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 #ifndef NATIVE_FUNC_H 27 #define NATIVE_FUNC_H 28 29 #include "gssapi.h" 30 31 #ifdef WIN32 32 #include <windows.h> 33 #define GETLIB(libName) LoadLibrary(libName) 34 #define GETFUNC(lib,name) GetProcAddress(lib,name) 35 #define CLOSELIB(lib) CloseHandle(lib) 36 #else 37 #include <dlfcn.h> 38 #define GETLIB(libName) dlopen(libName, RTLD_NOW) 39 #define GETFUNC(lib,name) dlsym(lib,name) 40 #define CLOSELIB(lib) dlclose(lib) 41 #endif 42 43 #ifndef TRUE 44 #define TRUE 1 45 #endif 46 47 #ifndef FALSE 48 #define FALSE 0 49 #endif 50 51 int loadNative(const char *libName); 52 53 /* function pointer definitions */ 54 typedef OM_uint32 (*RELEASE_NAME_FN_PTR) 55 (OM_uint32 *minor_status, 56 gss_name_t *name); 57 58 typedef OM_uint32 (*IMPORT_NAME_FN_PTR) 59 (OM_uint32 *minor_status, 60 gss_const_buffer_t input_name_buffer, 61 gss_const_OID input_name_type, 62 gss_name_t *output_name); 63 64 typedef OM_uint32 (*COMPARE_NAME_FN_PTR) 65 (OM_uint32 *minor_status, 66 gss_const_name_t name1, 67 gss_const_name_t name2, 68 int *name_equal); 69 70 typedef OM_uint32 (*CANONICALIZE_NAME_FN_PTR) 71 (OM_uint32 *minor_status, 72 gss_const_name_t input_name, 73 gss_const_OID mech_type, 74 gss_name_t *output_name); 75 76 typedef OM_uint32 (*EXPORT_NAME_FN_PTR) 77 (OM_uint32 *minor_status, 78 gss_const_name_t input_name, 79 gss_buffer_t exported_name); 80 81 typedef OM_uint32 (*DISPLAY_NAME_FN_PTR) 82 (OM_uint32 *minor_status, 83 gss_const_name_t input_name, 84 gss_buffer_t output_name_buffer, 85 gss_OID *output_name_type); 86 87 typedef OM_uint32 (*ACQUIRE_CRED_FN_PTR) 88 (OM_uint32 *minor_status, 89 gss_const_name_t desired_name, 90 OM_uint32 time_req, 91 gss_const_OID_set desired_mech, 92 gss_cred_usage_t cred_usage, 93 gss_cred_id_t *output_cred_handle, 94 gss_OID_set *actual_mechs, 95 OM_uint32 *time_rec); 96 97 typedef OM_uint32 (*RELEASE_CRED_FN_PTR) 98 (OM_uint32 *minor_status, 99 gss_cred_id_t *cred_handle); 100 101 typedef OM_uint32 (*INQUIRE_CRED_FN_PTR) 102 (OM_uint32 *minor_status, 103 gss_const_cred_id_t cred_handle, 104 gss_name_t *name, 105 OM_uint32 *lifetime, 106 gss_cred_usage_t *cred_usage, 107 gss_OID_set *mechanisms); 108 109 typedef OM_uint32 (*IMPORT_SEC_CONTEXT_FN_PTR) 110 (OM_uint32 *minor_status, 111 gss_const_buffer_t interprocess_token, 112 gss_ctx_id_t *context_handle); 113 114 typedef OM_uint32 (*INIT_SEC_CONTEXT_FN_PTR) 115 (OM_uint32 *minor_status, 116 gss_const_cred_id_t initiator_cred_handle, 117 gss_ctx_id_t *context_handle, 118 gss_const_name_t target_name, 119 gss_const_OID mech_type, 120 OM_uint32 req_flags, 121 OM_uint32 time_req, 122 gss_const_channel_bindings_t input_chan_bindings, 123 gss_const_buffer_t input_token, 124 gss_OID *actual_mech_type, 125 gss_buffer_t output_token, 126 OM_uint32 *ret_flags, 127 OM_uint32 *time_rec); 128 129 typedef OM_uint32 (*ACCEPT_SEC_CONTEXT_FN_PTR) 130 (OM_uint32 *minor_status, 131 gss_ctx_id_t *context_handle, 132 gss_const_cred_id_t acceptor_cred_handle, 133 gss_const_buffer_t input_token, 134 gss_const_channel_bindings_t input_chan_bindings, 135 gss_name_t *src_name, 136 gss_OID *mech_type, 137 gss_buffer_t output_token, 138 OM_uint32 *ret_flags, 139 OM_uint32 *time_rec, 140 gss_cred_id_t *delegated_cred_handle); 141 142 typedef OM_uint32 (*INQUIRE_CONTEXT_FN_PTR) 143 (OM_uint32 *minor_status, 144 gss_const_ctx_id_t context_handle, 145 gss_name_t *src_name, 146 gss_name_t *targ_name, 147 OM_uint32 *lifetime_rec, 148 gss_OID *mech_type, 149 OM_uint32 *ctx_flags, 150 int *locally_initiated, 151 int *open); 152 153 typedef OM_uint32 (*DELETE_SEC_CONTEXT_FN_PTR) 154 (OM_uint32 *minor_status, 155 gss_ctx_id_t *context_handle, 156 gss_buffer_t output_token); 157 158 typedef OM_uint32 (*CONTEXT_TIME_FN_PTR) 159 (OM_uint32 *minor_status, 160 gss_const_ctx_id_t context_handle, 161 OM_uint32 *time_rec); 162 163 typedef OM_uint32 (*WRAP_SIZE_LIMIT_FN_PTR) 164 (OM_uint32 *minor_status, 165 gss_const_ctx_id_t context_handle, 166 int conf_req_flag, 167 gss_qop_t qop_req, 168 OM_uint32 req_output_size, 169 OM_uint32 *max_input_size); 170 171 typedef OM_uint32 (*EXPORT_SEC_CONTEXT_FN_PTR) 172 (OM_uint32 *minor_status, 173 gss_ctx_id_t *context_handle, 174 gss_buffer_t interprocess_token); 175 176 typedef OM_uint32 (*GET_MIC_FN_PTR) 177 (OM_uint32 *minor_status, 178 gss_const_ctx_id_t context_handle, 179 gss_qop_t qop_req, 180 gss_const_buffer_t message_buffer, 181 gss_buffer_t msg_token); 182 183 typedef OM_uint32 (*VERIFY_MIC_FN_PTR) 184 (OM_uint32 *minor_status, 185 gss_const_ctx_id_t context_handle, 186 gss_const_buffer_t message_buffer, 187 gss_const_buffer_t token_buffer, 188 gss_qop_t *qop_state); 189 190 typedef OM_uint32 (*WRAP_FN_PTR) 191 (OM_uint32 *minor_status, 192 gss_const_ctx_id_t context_handle, 193 int conf_req_flag, 194 gss_qop_t qop_req, 195 gss_const_buffer_t input_message_buffer, 196 int *conf_state, 197 gss_buffer_t output_message_buffer); 198 199 typedef OM_uint32 (*UNWRAP_FN_PTR) 200 (OM_uint32 *minor_status, 201 gss_const_ctx_id_t context_handle, 202 gss_const_buffer_t input_message_buffer, 203 gss_buffer_t output_message_buffer, 204 int *conf_state, 205 gss_qop_t *qop_state); 206 207 typedef OM_uint32 (*INDICATE_MECHS_FN_PTR) 208 (OM_uint32 *minor_status, 209 gss_OID_set *mech_set); 210 211 typedef OM_uint32 (*INQUIRE_NAMES_FOR_MECH_FN_PTR) 212 (OM_uint32 *minor_status, 213 gss_const_OID mechanism, 214 gss_OID_set *name_types); 215 216 typedef OM_uint32 (*ADD_OID_SET_MEMBER_FN_PTR) 217 (OM_uint32 *minor_status, 218 gss_const_OID member_oid, 219 gss_OID_set *oid_set); 220 221 typedef OM_uint32 (*DISPLAY_STATUS_FN_PTR) 222 (OM_uint32 *minor_status, 223 OM_uint32 status_value, 224 int status_type, 225 gss_const_OID mech_type, 226 OM_uint32 *message_context, 227 gss_buffer_t status_string); 228 229 typedef OM_uint32 (*CREATE_EMPTY_OID_SET_FN_PTR) 230 (OM_uint32 *minor_status, 231 gss_OID_set *oid_set); 232 233 typedef OM_uint32 (*RELEASE_OID_SET_FN_PTR) 234 (OM_uint32 *minor_status, 235 gss_OID_set *set); 236 237 typedef OM_uint32 (*RELEASE_BUFFER_FN_PTR) 238 (OM_uint32 *minor_status, 239 gss_buffer_t buffer); 240 241 242 /* dynamically resolved functions from gss library */ 243 244 typedef struct GSS_FUNCTION_TABLE { 245 gss_OID_set mechs; 246 RELEASE_NAME_FN_PTR releaseName; 247 IMPORT_NAME_FN_PTR importName; 248 COMPARE_NAME_FN_PTR compareName; 249 CANONICALIZE_NAME_FN_PTR canonicalizeName; 250 EXPORT_NAME_FN_PTR exportName; 251 DISPLAY_NAME_FN_PTR displayName; 252 ACQUIRE_CRED_FN_PTR acquireCred; 253 RELEASE_CRED_FN_PTR releaseCred; 254 INQUIRE_CRED_FN_PTR inquireCred; 255 IMPORT_SEC_CONTEXT_FN_PTR importSecContext; 256 INIT_SEC_CONTEXT_FN_PTR initSecContext; 257 ACCEPT_SEC_CONTEXT_FN_PTR acceptSecContext; 258 INQUIRE_CONTEXT_FN_PTR inquireContext; 259 DELETE_SEC_CONTEXT_FN_PTR deleteSecContext; 260 CONTEXT_TIME_FN_PTR contextTime; 261 WRAP_SIZE_LIMIT_FN_PTR wrapSizeLimit; 262 EXPORT_SEC_CONTEXT_FN_PTR exportSecContext; 263 GET_MIC_FN_PTR getMic; 264 VERIFY_MIC_FN_PTR verifyMic; 265 WRAP_FN_PTR wrap; 266 UNWRAP_FN_PTR unwrap; 267 INDICATE_MECHS_FN_PTR indicateMechs; 268 INQUIRE_NAMES_FOR_MECH_FN_PTR inquireNamesForMech; 269 ADD_OID_SET_MEMBER_FN_PTR addOidSetMember; 270 DISPLAY_STATUS_FN_PTR displayStatus; 271 CREATE_EMPTY_OID_SET_FN_PTR createEmptyOidSet; 272 RELEASE_OID_SET_FN_PTR releaseOidSet; 273 RELEASE_BUFFER_FN_PTR releaseBuffer; 274 275 } GSS_FUNCTION_TABLE; 276 277 typedef GSS_FUNCTION_TABLE *GSS_FUNCTION_TABLE_PTR; 278 279 /* global GSS function table */ 280 GSS_FUNCTION_TABLE_PTR ftab; 281 282 #endif