2 #ifndef GLOBUS_I_GSI_GSS_UTILS_H
3 #define GLOBUS_I_GSI_GSS_UTILS_H
5 #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL
17 #define GLOBUS_GSI_GSSAPI_ERROR_RESULT(_MIN_RESULT_, _MIN_, \
19 if (_MIN_RESULT_ != NULL) \
22 globus_common_create_string _ERRSTR_; \
23 *_MIN_RESULT_ = (OM_uint32) globus_i_gsi_gssapi_error_result( \
24 _MIN_, __FILE__, __func__, \
25 __LINE__, tmpstr, NULL); \
26 globus_libc_free(tmpstr); \
29 #define GLOBUS_GSI_GSSAPI_OPENSSL_ERROR_RESULT(_MIN_RESULT_, \
30 _ERRORTYPE_, _ERRORSTR_) \
33 globus_common_create_string _ERRORSTR_; \
35 (OM_uint32) globus_i_gsi_gssapi_openssl_error_result( \
36 _ERRORTYPE_, __FILE__, __func__, __LINE__, tmpstr, NULL); \
37 globus_libc_free(tmpstr); \
40 #define GLOBUS_GSI_GSSAPI_ERROR_CHAIN_RESULT(_MIN_RESULT_, _TOP_RESULT_, \
42 *_MIN_RESULT_ = (OM_uint32) globus_i_gsi_gssapi_error_chain_result( \
43 (globus_result_t)_TOP_RESULT_, \
44 _ERRORTYPE_, __FILE__, \
45 __func__, __LINE__, NULL, NULL)
47 #define GLOBUS_GSI_GSSAPI_LONG_ERROR_RESULT(_MIN_RESULT_, _MIN_, \
48 _ERRSTR_, _LONG_DESC_) \
51 globus_common_create_string _ERRSTR_; \
52 *_MIN_RESULT_ = (OM_uint32) globus_i_gsi_gssapi_error_result( \
53 _MIN_, __FILE__, __func__, \
54 __LINE__, tmpstr, _LONG_DESC_); \
55 globus_libc_free(tmpstr); \
58 #define GLOBUS_GSI_GSSAPI_OPENSSL_LONG_ERROR_RESULT(_MIN_RESULT_, \
64 globus_common_create_string _ERRORSTR_; \
66 (OM_uint32) globus_i_gsi_gssapi_openssl_error_result( \
67 _ERRORTYPE_, __FILE__, __func__, \
68 __LINE__, tmpstr, _LONG_DESC_); \
69 globus_libc_free(tmpstr); \
72 #define GLOBUS_GSI_GSSAPI_LONG_ERROR_CHAIN_RESULT(_MIN_RESULT_, _TOP_RESULT_, \
73 _ERRORTYPE_, _LONG_DESC_) \
74 *_MIN_RESULT_ = (OM_uint32) globus_i_gsi_gssapi_error_chain_result( \
75 (globus_result_t)_TOP_RESULT_, \
76 _ERRORTYPE_, __FILE__, \
77 __func__, __LINE__, NULL, _LONG_DESC_)
79 #define GLOBUS_GSI_GSSAPI_MALLOC_ERROR(_MIN_RESULT_) \
82 globus_l_gsi_gssapi_error_strings[ \
83 GLOBUS_GSI_GSSAPI_ERROR_OUT_OF_MEMORY]; \
84 *_MIN_RESULT_ = (OM_uint32) globus_error_put( \
85 globus_error_wrap_errno_error( \
86 GLOBUS_GSI_GSSAPI_MODULE, \
88 GLOBUS_GSI_GSSAPI_ERROR_OUT_OF_MEMORY, \
99 extern int globus_i_gsi_gssapi_debug_level;
100 extern FILE * globus_i_gsi_gssapi_debug_fstream;
101 extern globus_mutex_t globus_i_gssapi_activate_mutex;
102 extern globus_bool_t globus_i_gssapi_active;
107 #define GLOBUS_I_GSI_GSSAPI_DEBUG(_LEVEL_) \
108 (globus_i_gsi_gssapi_debug_level >= (_LEVEL_))
110 #define GLOBUS_I_GSI_GSSAPI_DEBUG_FPRINTF(_LEVEL_, _MESSAGE_) \
112 if (GLOBUS_I_GSI_GSSAPI_DEBUG(_LEVEL_)) \
114 globus_libc_fprintf _MESSAGE_; \
118 #define GLOBUS_I_GSI_GSSAPI_DEBUG_FNPRINTF(_LEVEL_, _MESSAGE_) \
120 if (GLOBUS_I_GSI_GSSAPI_DEBUG(_LEVEL_)) \
123 globus_common_create_nstring _MESSAGE_; \
124 globus_libc_fprintf(globus_i_gsi_gssapi_debug_fstream, \
126 globus_libc_free(_tmp_str_); \
130 #define GLOBUS_I_GSI_GSSAPI_DEBUG_PRINT(_LEVEL_, _MESSAGE_) \
132 if (GLOBUS_I_GSI_GSSAPI_DEBUG(_LEVEL_)) \
134 globus_libc_fprintf( \
135 globus_i_gsi_gssapi_debug_fstream, \
140 #define GLOBUS_I_GSI_GSSAPI_DEBUG_PRINT_OBJECT(_LEVEL_, _TYPE_, _OBJ_) \
142 if (GLOBUS_I_GSI_GSSAPI_DEBUG(_LEVEL_)) \
145 globus_i_gsi_gssapi_debug_fstream, \
152 #define GLOBUS_I_GSI_GSSAPI_DEBUG(_LEVEL_) 0
153 #define GLOBUS_I_GSI_GSSAPI_DEBUG_FPRINTF(_LEVEL_, _MESSAGE_)
154 #define GLOBUS_I_GSI_GSSAPI_DEBUG_FNPRINTF(_LEVEL_, _MESSAGE_)
155 #define GLOBUS_I_GSI_GSSAPI_DEBUG_PRINT(_LEVEL_, _MESSAGE_)
156 #define GLOBUS_I_GSI_GSSAPI_DEBUG_PRINT_OBJECT(_LEVEL,_TYPE_, _OBJ_)
160 #define GLOBUS_I_GSI_GSSAPI_DEBUG_ENTER \
161 GLOBUS_I_GSI_GSSAPI_DEBUG_FPRINTF( \
162 3, (globus_i_gsi_gssapi_debug_fstream, \
163 "%s entering\n", __func__))
165 #define GLOBUS_I_GSI_GSSAPI_DEBUG_EXIT \
166 GLOBUS_I_GSI_GSSAPI_DEBUG_FPRINTF( \
167 3, (globus_i_gsi_gssapi_debug_fstream, \
168 "%s exiting: major_status=%d\n", \
169 __func__, (int)major_status))
171 #define GLOBUS_I_GSI_GSSAPI_INTERNAL_DEBUG_EXIT \
172 GLOBUS_I_GSI_GSSAPI_DEBUG_FPRINTF( \
173 3, (globus_i_gsi_gssapi_debug_fstream, \
177 extern int globus_i_gsi_gssapi_min_tls_protocol;
178 extern int globus_i_gsi_gssapi_max_tls_protocol;
179 extern const char * globus_i_gsi_gssapi_cipher_list;
180 extern globus_bool_t globus_i_gsi_gssapi_server_cipher_order;
181 extern uid_t globus_i_gsi_gssapi_vhost_cred_owner;
185 GLOBUS_I_GSI_GSS_DEFAULT_CONTEXT,
186 GLOBUS_I_GSI_GSS_ANON_CONTEXT
187 } globus_i_gsi_gss_context_type_t;
190 globus_i_gsi_gss_copy_name_to_name(
191 OM_uint32 * minor_status,
192 gss_name_desc ** output,
193 const gss_name_desc * input);
196 globus_i_gsi_gss_create_and_fill_context(
197 OM_uint32 * minor_status,
198 gss_ctx_id_desc ** context_handle,
200 const gss_name_t target_name,
201 gss_cred_id_desc * cred_handle,
202 const gss_cred_usage_t cred_usage,
203 OM_uint32 req_flags);
206 globus_i_gsi_gss_create_anonymous_cred(
207 OM_uint32 * minor_status,
208 gss_cred_id_t * output_cred_handle,
209 const gss_cred_usage_t cred_usage);
212 globus_i_gsi_gss_cred_read_bio(
213 OM_uint32 * minor_status,
214 const gss_cred_usage_t cred_usage,
215 gss_cred_id_t * cred_id_handle,
219 globus_i_gsi_gss_cred_read(
220 OM_uint32 * minor_status,
221 const gss_cred_usage_t cred_usage,
222 gss_cred_id_t * cred_handle,
223 const X509_NAME * desired_subject);
226 globus_i_gsi_gss_create_cred(
227 OM_uint32 * minor_status,
228 const gss_cred_usage_t cred_usage,
229 gss_cred_id_t * output_cred_handle_P,
230 globus_gsi_cred_handle_t * cred_handle,
231 globus_bool_t sni_context);
233 int globus_i_gsi_gss_verify_extensions_callback(
234 globus_gsi_callback_data_t callback_data,
235 X509_EXTENSION * extension);
238 globus_i_gsi_gss_handshake(
239 OM_uint32 * minor_status,
240 gss_ctx_id_desc * context_handle);
243 globus_i_gsi_gss_get_token(
244 OM_uint32 * minor_status,
245 const gss_ctx_id_desc * context_handle,
247 const gss_buffer_t output_token);
250 globus_i_gsi_gss_put_token(
251 OM_uint32 * minor_status,
252 const gss_ctx_id_desc * context_handle,
254 const gss_buffer_t input_token);
257 globus_i_gsi_gss_retrieve_peer(
258 OM_uint32 * minor_status,
259 gss_ctx_id_desc * context_handle,
260 const gss_cred_usage_t cred_usage);
262 #if LINK_WITH_INTERNAL_OPENSSL_API
264 globus_i_gsi_gss_SSL_write_bio(
265 OM_uint32 * minor_status,
266 gss_ctx_id_desc * context,
270 globus_i_gsi_gss_SSL_read_bio(
271 OM_uint32 * minor_status,
272 gss_ctx_id_desc * context,
277 globus_i_gsi_gss_get_context_goodtill(
278 OM_uint32 * minor_status,
279 gss_ctx_id_t context,
283 globus_i_gsi_gssapi_init_ssl_context(
284 OM_uint32 * minor_status,
285 gss_cred_id_t credential,
286 globus_i_gsi_gss_context_type_t anon_ctx,
287 globus_bool_t sni_context);
290 globus_i_gsi_gssapi_openssl_error_result(
292 const char * filename,
293 const char * function_name,
295 const char * short_desc,
296 const char * long_desc);
299 globus_i_gsi_gssapi_error_result(
300 const OM_uint32 minor_status,
301 const char * filename,
302 const char * function_name,
304 const char * short_desc,
305 const char * long_desc);
308 globus_i_gsi_gssapi_error_chain_result(
309 globus_result_t chain_result,
311 const char * filename,
312 const char * function_name,
314 const char * short_desc,
315 const char * long_desc);
318 globus_i_gsi_gssapi_error_join_chains_result(
319 globus_result_t outer_error,
320 globus_result_t inner_error);
323 globus_i_gsi_gssapi_get_hostname(
324 OM_uint32 * minor_status,
325 gss_name_desc * name);
328 globus_i_gss_read_vhost_cred_dir(
329 OM_uint32 *minor_status,
331 gss_cred_id_t **output_credentials_array,
332 size_t *output_credentials_array_count);
336 GSS_I_COMPATIBILITY_HYBRID,
337 GSS_I_COMPATIBILITY_STRICT_GT2,
338 GSS_I_COMPATIBILITY_STRICT_RFC2818
340 gss_i_name_compatibility_mode_t;
342 extern gss_i_name_compatibility_mode_t gss_i_name_compatibility_mode;