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 #define GLOBUS_I_GSI_PROXY_DEBUG_PRINT_PCI(_LEVEL_, _OBJ_) \
00083 { \
00084 if (GLOBUS_I_GSI_PROXY_DEBUG(_LEVEL_)) \
00085 { \
00086 BIO *b = BIO_new_fp(globus_i_gsi_proxy_debug_fstream, BIO_NOCLOSE); \
00087 const X509V3_EXT_METHOD *meth = X509V3_EXT_get_nid(NID_proxyCertInfo); \
00088 meth->i2r(meth, (_OBJ_), b, 4); \
00089 BIO_flush(b); \
00090 BIO_free(b); \
00091 } \
00092 }
00093 #else
00094
00095 #define GLOBUS_I_GSI_PROXY_DEBUG_FPRINTF(_LEVEL_, _MESSAGE_) {}
00096 #define GLOBUS_I_GSI_PROXY_DEBUG_FNPRINTF(_LEVEL_, _MESSAGE_) {}
00097 #define GLOBUS_I_GSI_PROXY_DEBUG_PRINT(_LEVEL_, _MESSAGE_) {}
00098 #define GLOBUS_I_GSI_PROXY_DEBUG_PRINT_OBJECT(_LEVEL_, _OBJ_NAME_, _OBJ_) {}
00099 #define GLOBUS_I_GSI_PROXY_DEBUG_PRINT_PCI(_LEVEL_, _OBJ_) {}
00100
00101 #endif
00102
00103 #define GLOBUS_I_GSI_PROXY_DEBUG_ENTER \
00104 GLOBUS_I_GSI_PROXY_DEBUG_FPRINTF( \
00105 1, (globus_i_gsi_proxy_debug_fstream, \
00106 "%s entering\n", __func__))
00107
00108 #define GLOBUS_I_GSI_PROXY_DEBUG_EXIT \
00109 GLOBUS_I_GSI_PROXY_DEBUG_FPRINTF( \
00110 1, (globus_i_gsi_proxy_debug_fstream, \
00111 "%s exiting\n", __func__))
00112
00113
00114
00115 #define GLOBUS_GSI_PROXY_OPENSSL_ERROR_RESULT(_RESULT_, \
00116 _ERRORTYPE_, _ERRORSTR_) \
00117 char * _tmp_string_ = \
00118 globus_common_create_string _ERRORSTR_; \
00119 _RESULT_ = globus_i_gsi_proxy_openssl_error_result( \
00120 _ERRORTYPE_, \
00121 __FILE__, \
00122 __func__, \
00123 __LINE__, \
00124 _tmp_string_, \
00125 NULL); \
00126 globus_libc_free(_tmp_string_)
00127
00128 #define GLOBUS_GSI_PROXY_ERROR_RESULT(_RESULT_, \
00129 _ERRORTYPE_, _ERRORSTR_) \
00130 char * _tmp_string_ = \
00131 globus_common_create_string _ERRORSTR_; \
00132 _RESULT_ = globus_i_gsi_proxy_error_result( \
00133 _ERRORTYPE_, \
00134 __FILE__, \
00135 __func__, \
00136 __LINE__, \
00137 _tmp_string_, \
00138 NULL); \
00139 globus_libc_free(_tmp_string_)
00140
00141 #define GLOBUS_GSI_PROXY_ERROR_CHAIN_RESULT(_RESULT_, \
00142 _ERRORTYPE_) \
00143 _RESULT_ = globus_i_gsi_proxy_error_chain_result( \
00144 (_RESULT_), \
00145 (_ERRORTYPE_), \
00146 __FILE__, \
00147 __func__, \
00148 __LINE__, \
00149 NULL, \
00150 NULL)
00151
00152 #define GLOBUS_GSI_PROXY_OPENSSL_LONG_ERROR_RESULT(_RESULT_, \
00153 _ERRORTYPE_, \
00154 _ERRORSTR_, \
00155 _LONG_DESC_) \
00156 char * _tmp_string_ = \
00157 globus_common_create_string _ERRORSTR_; \
00158 _RESULT_ = globus_i_gsi_proxy_openssl_error_result( \
00159 _ERRORTYPE_, \
00160 __FILE__, \
00161 __func__, \
00162 __LINE__, \
00163 _tmp_string_, \
00164 _LONG_DESC_); \
00165 globus_libc_free(_tmp_string_)
00166
00167 #define GLOBUS_GSI_PROXY_LONG_ERROR_RESULT(_RESULT_, \
00168 _ERRORTYPE_, \
00169 _ERRORSTR_, \
00170 _LONG_DESC_) \
00171 char * _tmp_string_ = \
00172 globus_common_create_string _ERRORSTR_; \
00173 _RESULT_ = globus_i_gsi_proxy_error_result( \
00174 _ERRORTYPE_, \
00175 __FILE__, \
00176 __func__, \
00177 __LINE__, \
00178 _tmp_string_, \
00179 NULL, \
00180 _LONG_DESC_); \
00181 globus_libc_free(_tmp_string_)
00182
00183 #define GLOBUS_GSI_PROXY_LONG_ERROR_CHAIN_RESULT(_RESULT_, \
00184 _ERRORTYPE_, \
00185 _LONG_DESC_) \
00186 _RESULT_ = globus_i_gsi_proxy_error_chain_result( \
00187 _RESULT_, \
00188 _ERRORTYPE_, \
00189 __FILE__, \
00190 __func__, \
00191 __LINE__, \
00192 NULL, \
00193 _LONG_DESC_)
00194
00195 #include "globus_gsi_proxy_constants.h"
00196
00210 typedef struct globus_l_gsi_proxy_handle_attrs_s
00211 {
00216 int key_bits;
00221 int init_prime;
00226 const EVP_MD * signing_algorithm;
00232 int clock_skew;
00237 void (*key_gen_callback)(int, int, void *);
00238
00239 } globus_i_gsi_proxy_handle_attrs_t;
00240
00252 typedef struct globus_l_gsi_proxy_handle_s
00253 {
00255 X509_REQ * req;
00257 EVP_PKEY * proxy_key;
00259 globus_gsi_proxy_handle_attrs_t attrs;
00261 PROXY_CERT_INFO_EXTENSION * proxy_cert_info;
00263 int time_valid;
00265 globus_gsi_cert_utils_cert_type_t type;
00267 char * common_name;
00269 STACK_OF(X509_EXTENSION)* extensions;
00270 } globus_i_gsi_proxy_handle_t;
00271
00272
00273
00274 void
00275 globus_i_gsi_proxy_create_private_key_cb(
00276 int num1,
00277 int num2,
00278 BIO * output);
00279
00280 globus_result_t
00281 globus_i_gsi_proxy_set_pc_times(
00282 X509 * new_pc,
00283 X509 * issuer_cert,
00284 int clock_skew,
00285 int time_valid);
00286
00287 globus_result_t
00288 globus_i_gsi_proxy_set_subject(
00289 X509 * new_pc,
00290 X509 * issuer_cert,
00291 char * common_name);
00292
00293 globus_result_t
00294 globus_i_gsi_proxy_openssl_error_result(
00295 int error_type,
00296 const char * filename,
00297 const char * function_name,
00298 int line_number,
00299 const char * short_desc,
00300 const char * long_desc);
00301
00302 globus_result_t
00303 globus_i_gsi_proxy_error_result(
00304 int error_type,
00305 const char * filename,
00306 const char * function_name,
00307 int line_number,
00308 const char * short_desc,
00309 const char * long_desc);
00310
00311 globus_result_t
00312 globus_i_gsi_proxy_error_chain_result(
00313 globus_result_t chain_result,
00314 int error_type,
00315 const char * filename,
00316 const char * function_name,
00317 int line_number,
00318 const char * short_desc,
00319 const char * long_desc);
00320
00321 #ifdef __cplusplus
00322 }
00323 #endif
00324
00325 #endif
00326
00327 #endif