00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL
00018
00025 #include "globus_gsi_proxy.h"
00026 #include "proxycertinfo.h"
00027 #include "globus_common.h"
00028
00029 #ifndef GLOBUS_I_GSI_PROXY_H
00030 #define GLOBUS_I_GSI_PROXY_H
00031
00032 #ifdef __cplusplus
00033 extern "C" {
00034 #endif
00035
00036
00037
00038 #ifdef BUILD_DEBUG
00039
00040 extern int globus_i_gsi_proxy_debug_level;
00041 extern FILE * globus_i_gsi_proxy_debug_fstream;
00042
00043 #define GLOBUS_I_GSI_PROXY_DEBUG(_LEVEL_) \
00044 (globus_i_gsi_proxy_debug_level >= (_LEVEL_))
00045
00046 #define GLOBUS_I_GSI_PROXY_DEBUG_FPRINTF(_LEVEL_, _MESSAGE_) \
00047 { \
00048 if (GLOBUS_I_GSI_PROXY_DEBUG(_LEVEL_)) \
00049 { \
00050 globus_libc_fprintf _MESSAGE_; \
00051 } \
00052 }
00053
00054 #define GLOBUS_I_GSI_PROXY_DEBUG_FNPRINTF(_LEVEL_, _MESSAGE_) \
00055 { \
00056 if (GLOBUS_I_GSI_PROXY_DEBUG(_LEVEL_)) \
00057 { \
00058 char * _tmp_str_ = \
00059 globus_common_create_nstring _MESSAGE_; \
00060 globus_libc_fprintf(globus_i_gsi_proxy_debug_fstream, \
00061 _tmp_str_); \
00062 globus_libc_free(_tmp_str_); \
00063 } \
00064 }
00065
00066 #define GLOBUS_I_GSI_PROXY_DEBUG_PRINT(_LEVEL_, _MESSAGE_) \
00067 { \
00068 if (GLOBUS_I_GSI_PROXY_DEBUG(_LEVEL_)) \
00069 { \
00070 globus_libc_fprintf(globus_i_gsi_proxy_debug_fstream, _MESSAGE_); \
00071 } \
00072 }
00073
00074 #define GLOBUS_I_GSI_PROXY_DEBUG_PRINT_OBJECT(_LEVEL_, _OBJ_NAME_, _OBJ_) \
00075 { \
00076 if (GLOBUS_I_GSI_PROXY_DEBUG(_LEVEL_)) \
00077 { \
00078 _OBJ_NAME_##_print_fp(globus_i_gsi_proxy_debug_fstream, _OBJ_); \
00079 } \
00080 }
00081
00082 #else
00083
00084 #define GLOBUS_I_GSI_PROXY_DEBUG_FPRINTF(_LEVEL_, _MESSAGE_) {}
00085 #define GLOBUS_I_GSI_PROXY_DEBUG_FNPRINTF(_LEVEL_, _MESSAGE_) {}
00086 #define GLOBUS_I_GSI_PROXY_DEBUG_PRINT(_LEVEL_, _MESSAGE_) {}
00087 #define GLOBUS_I_GSI_PROXY_DEBUG_PRINT_OBJECT(_LEVEL_, _OBJ_NAME_, _OBJ_) {}
00088
00089 #endif
00090
00091 #define GLOBUS_I_GSI_PROXY_DEBUG_ENTER \
00092 GLOBUS_I_GSI_PROXY_DEBUG_FPRINTF( \
00093 1, (globus_i_gsi_proxy_debug_fstream, \
00094 "%s entering\n", _function_name_))
00095
00096 #define GLOBUS_I_GSI_PROXY_DEBUG_EXIT \
00097 GLOBUS_I_GSI_PROXY_DEBUG_FPRINTF( \
00098 1, (globus_i_gsi_proxy_debug_fstream, \
00099 "%s exiting\n", _function_name_))
00100
00101
00102
00103 #define GLOBUS_GSI_PROXY_OPENSSL_ERROR_RESULT(_RESULT_, \
00104 _ERRORTYPE_, _ERRORSTR_) \
00105 char * _tmp_string_ = \
00106 globus_common_create_string _ERRORSTR_; \
00107 _RESULT_ = globus_i_gsi_proxy_openssl_error_result( \
00108 _ERRORTYPE_, \
00109 __FILE__, \
00110 _function_name_, \
00111 __LINE__, \
00112 _tmp_string_, \
00113 NULL); \
00114 globus_libc_free(_tmp_string_)
00115
00116 #define GLOBUS_GSI_PROXY_ERROR_RESULT(_RESULT_, \
00117 _ERRORTYPE_, _ERRORSTR_) \
00118 char * _tmp_string_ = \
00119 globus_common_create_string _ERRORSTR_; \
00120 _RESULT_ = globus_i_gsi_proxy_error_result( \
00121 _ERRORTYPE_, \
00122 __FILE__, \
00123 _function_name_, \
00124 __LINE__, \
00125 _tmp_string_, \
00126 NULL); \
00127 globus_libc_free(_tmp_string_)
00128
00129 #define GLOBUS_GSI_PROXY_ERROR_CHAIN_RESULT(_RESULT_, \
00130 _ERRORTYPE_) \
00131 _RESULT_ = globus_i_gsi_proxy_error_chain_result( \
00132 (_RESULT_), \
00133 (_ERRORTYPE_), \
00134 __FILE__, \
00135 _function_name_, \
00136 __LINE__, \
00137 NULL, \
00138 NULL)
00139
00140 #define GLOBUS_GSI_PROXY_OPENSSL_LONG_ERROR_RESULT(_RESULT_, \
00141 _ERRORTYPE_, \
00142 _ERRORSTR_, \
00143 _LONG_DESC_) \
00144 char * _tmp_string_ = \
00145 globus_common_create_string _ERRORSTR_; \
00146 _RESULT_ = globus_i_gsi_proxy_openssl_error_result( \
00147 _ERRORTYPE_, \
00148 __FILE__, \
00149 _function_name_, \
00150 __LINE__, \
00151 _tmp_string_, \
00152 _LONG_DESC_); \
00153 globus_libc_free(_tmp_string_)
00154
00155 #define GLOBUS_GSI_PROXY_LONG_ERROR_RESULT(_RESULT_, \
00156 _ERRORTYPE_, \
00157 _ERRORSTR_, \
00158 _LONG_DESC_) \
00159 char * _tmp_string_ = \
00160 globus_common_create_string _ERRORSTR_; \
00161 _RESULT_ = globus_i_gsi_proxy_error_result( \
00162 _ERRORTYPE_, \
00163 __FILE__, \
00164 _function_name_, \
00165 __LINE__, \
00166 _tmp_string_, \
00167 NULL, \
00168 _LONG_DESC_); \
00169 globus_libc_free(_tmp_string_)
00170
00171 #define GLOBUS_GSI_PROXY_LONG_ERROR_CHAIN_RESULT(_RESULT_, \
00172 _ERRORTYPE_, \
00173 _LONG_DESC_) \
00174 _RESULT_ = globus_i_gsi_proxy_error_chain_result( \
00175 _RESULT_, \
00176 _ERRORTYPE_, \
00177 __FILE__, \
00178 _function_name_, \
00179 __LINE__, \
00180 NULL, \
00181 _LONG_DESC_)
00182
00183 #include "globus_gsi_proxy_constants.h"
00184
00198 typedef struct globus_l_gsi_proxy_handle_attrs_s
00199 {
00204 int key_bits;
00209 int init_prime;
00214 EVP_MD * signing_algorithm;
00220 int clock_skew;
00225 void (*key_gen_callback)(int, int, void *);
00226
00227 } globus_i_gsi_proxy_handle_attrs_t;
00228
00240 typedef struct globus_l_gsi_proxy_handle_s
00241 {
00243 X509_REQ * req;
00245 EVP_PKEY * proxy_key;
00247 globus_gsi_proxy_handle_attrs_t attrs;
00249 PROXYCERTINFO * proxy_cert_info;
00251 int time_valid;
00253 globus_gsi_cert_utils_cert_type_t type;
00255 char * common_name;
00257 STACK_OF(X509_EXTENSION)* extensions;
00258 } globus_i_gsi_proxy_handle_t;
00259
00260
00261
00262 void
00263 globus_i_gsi_proxy_create_private_key_cb(
00264 int num1,
00265 int num2,
00266 BIO * output);
00267
00268 globus_result_t
00269 globus_i_gsi_proxy_set_pc_times(
00270 X509 * new_pc,
00271 X509 * issuer_cert,
00272 int clock_skew,
00273 int time_valid);
00274
00275 globus_result_t
00276 globus_i_gsi_proxy_set_subject(
00277 X509 * new_pc,
00278 X509 * issuer_cert,
00279 char * common_name);
00280
00281 globus_result_t
00282 globus_i_gsi_proxy_openssl_error_result(
00283 int error_type,
00284 const char * filename,
00285 const char * function_name,
00286 int line_number,
00287 const char * short_desc,
00288 const char * long_desc);
00289
00290 globus_result_t
00291 globus_i_gsi_proxy_error_result(
00292 int error_type,
00293 const char * filename,
00294 const char * function_name,
00295 int line_number,
00296 const char * short_desc,
00297 const char * long_desc);
00298
00299 globus_result_t
00300 globus_i_gsi_proxy_error_chain_result(
00301 globus_result_t chain_result,
00302 int error_type,
00303 const char * filename,
00304 const char * function_name,
00305 int line_number,
00306 const char * short_desc,
00307 const char * long_desc);
00308
00309 #ifdef __cplusplus
00310 }
00311 #endif
00312
00313 #endif
00314
00315 #endif