2 #ifndef GLOBUS_I_XIO_GSI_H
3 #define GLOBUS_I_XIO_GSI_H
6 #include "globus_xio_driver.h"
7 #include "globus_xio_load.h"
8 #include "globus_common.h"
11 #include "globus_gss_assist.h"
12 #include "globus_error_gssapi.h"
14 #define GLOBUS_XIO_GSI_DRIVER_MODULE GlobusXIOMyModule(gsi)
18 #define GlobusLXIOGSICreateHeader(__iovec, __length) \
20 *(((unsigned char *) (__iovec).iov_base)) = \
21 (unsigned char) (((__length) >> 24) & 0xff); \
22 *(((unsigned char *) (__iovec).iov_base)+1) = \
23 (unsigned char) (((__length) >> 16) & 0xff); \
24 *(((unsigned char *) (__iovec).iov_base)+2) = \
25 (unsigned char) (((__length) >> 8) & 0xff); \
26 *(((unsigned char *) (__iovec).iov_base)+3) = \
27 (unsigned char) (((__length) ) & 0xff); \
32 #define GlobusLXIOGSIGetTokenLength(__iovec, __length) \
35 c = (__iovec).iov_base; \
36 (__length) = ((globus_size_t) (*((c)++))) << 24; \
37 (__length) |= ((globus_size_t) (*((c)++))) << 16; \
38 (__length) |= ((globus_size_t) (*((c)++))) << 8; \
39 (__length) |= ((globus_size_t) (*((c)++))); \
45 #define GlobusXIOErrorWrapGSSFailed(failed_func, major_status, minor_status) \
47 globus_error_wrap_gssapi_error( \
48 GLOBUS_XIO_GSI_DRIVER_MODULE, \
51 GLOBUS_XIO_GSI_ERROR_WRAP_GSSAPI, \
55 _XIOSL("%s failed."), \
59 #define GlobusXioGSIErrorBadProtectionLevel() \
61 globus_error_construct_error( \
62 GLOBUS_XIO_GSI_DRIVER_MODULE, \
64 GLOBUS_XIO_GSI_ERROR_INVALID_PROTECTION_LEVEL, \
68 _XIOSL("Peer specified lower protection level")))
70 #define GlobusXioGSIErrorTokenTooBig() \
72 globus_error_construct_error( \
73 GLOBUS_XIO_GSI_DRIVER_MODULE, \
75 GLOBUS_XIO_GSI_ERROR_TOKEN_TOO_BIG, \
79 _XIOSL("Token size exceeds limit. Usually happens when someone tries to establish a insecure connection with a secure endpoint, e.g. when someone sends plain HTTP to a HTTPS endpoint without first establishing a SSL session.")))
81 #define GlobusXioGSIErrorEmptyTargetName() \
83 globus_error_construct_error( \
84 GLOBUS_XIO_GSI_DRIVER_MODULE, \
86 GLOBUS_XIO_GSI_ERROR_EMPTY_TARGET_NAME, \
90 _XIOSL("Identity authorization requested, but no target name set")))
92 #define GlobusXioGSIErrorEmptyHostName() \
94 globus_error_construct_error( \
95 GLOBUS_XIO_GSI_DRIVER_MODULE, \
97 GLOBUS_XIO_GSI_ERROR_EMPTY_HOST_NAME, \
101 _XIOSL("Host authorization requested, but no host name set")))
103 #define GlobusXioGSIAuthorizationFailed(_peer_name, _expected_name) \
105 globus_error_construct_error( \
106 GLOBUS_XIO_GSI_DRIVER_MODULE, \
108 GLOBUS_XIO_GSI_AUTHORIZATION_FAILED, \
112 _XIOSL("The peer authenticated as %s. Expected the peer " \
113 "to authenticate as %s"), (_peer_name), (_expected_name)))
118 GlobusDebugDeclare(GLOBUS_XIO_GSI);
120 #define GLOBUS_XIO_GSI_DEBUG_TRACE 4
121 #define GLOBUS_XIO_GSI_DEBUG_INTERNAL_TRACE 8
123 #define GlobusXIOGSIDebugPrintf(level, message) \
124 GlobusDebugPrintf(GLOBUS_XIO_GSI, level, message)
126 #define GlobusXIOGSIDebugEnter() \
127 GlobusXIOGSIDebugPrintf( \
128 GLOBUS_XIO_GSI_DEBUG_TRACE, \
129 (_XIOSL("[%s] Entering\n"), _xio_name))
131 #define GlobusXIOGSIDebugExit() \
132 GlobusXIOGSIDebugPrintf( \
133 GLOBUS_XIO_GSI_DEBUG_TRACE, \
134 (_XIOSL("[%s] Exiting\n"), _xio_name))
136 #define GlobusXIOGSIDebugExitWithError() \
137 GlobusXIOGSIDebugPrintf( \
138 GLOBUS_XIO_GSI_DEBUG_TRACE, \
139 (_XIOSL("[%s] Exiting with error\n"), _xio_name))
141 #define GlobusXIOGSIDebugInternalEnter() \
142 GlobusXIOGSIDebugPrintf( \
143 GLOBUS_XIO_GSI_DEBUG_INTERNAL_TRACE, \
144 (_XIOSL("[%s] I Entering\n"), _xio_name))
146 #define GlobusXIOGSIDebugInternalExit() \
147 GlobusXIOGSIDebugPrintf( \
148 GLOBUS_XIO_GSI_DEBUG_INTERNAL_TRACE, \
149 (_XIOSL("[%s] I Exiting\n"), _xio_name))
151 #define GlobusXIOGSIDebugInternalExitWithError() \
152 GlobusXIOGSIDebugPrintf( \
153 GLOBUS_XIO_GSI_DEBUG_INTERNAL_TRACE, \
154 (_XIOSL("[%s] I Exiting with error\n"), _xio_name))
161 gss_cred_id_t credential;
165 gss_channel_bindings_t channel_bindings;
166 globus_bool_t wrap_tokens;
167 globus_size_t buffer_size;
169 gss_name_t target_name;
172 char * credentials_dir;
173 unsigned char * alpn_list;
174 size_t alpn_list_len;
183 globus_l_attr_t * attr;
186 OM_uint32 max_wrap_size;
187 gss_ctx_id_t context;
188 gss_cred_id_t delegated_cred;
189 gss_cred_id_t credential;
191 gss_name_t peer_name;
192 gss_name_t local_name;
193 size_t write_iovec_count;
194 globus_xio_iovec_t * write_iovec;
195 globus_bool_t frame_writes;
196 size_t write_header_count;
197 unsigned char * write_headers;
198 globus_size_t bytes_written;
199 globus_xio_iovec_t read_iovec[2];
200 unsigned char header[4];
201 unsigned char * read_buffer;
202 globus_size_t bytes_read;
203 globus_xio_iovec_t * user_iovec;
204 size_t user_iovec_count;
205 size_t user_iovec_index;
206 size_t user_iovec_offset;
207 unsigned char * unwrapped_buffer;
208 globus_size_t unwrapped_buffer_length;
209 globus_size_t unwrapped_buffer_offset;
210 globus_size_t bytes_returned;
212 globus_object_t * result_obj;
215 globus_xio_driver_handle_t xio_driver_handle;
217 gss_cred_id_t *cred_array;
218 size_t cred_array_length;
228 globus_l_handle_t * xio_handle;
235 gss_OID_set restriction_oids;
236 gss_buffer_set_t restriction_buffers;
239 globus_xio_iovec_t iovec[2];
240 unsigned char header[4];
242 globus_object_t * result_obj;
243 globus_bool_t reading_header;
244 } globus_l_delegation_handle_t;
249 globus_result_t result;
250 globus_mutex_t mutex;
252 OM_uint32 * time_rec;
253 gss_cred_id_t * cred;
254 } globus_l_xio_gsi_delegation_arg_t;
void(* globus_xio_gsi_delegation_init_callback_t)(globus_result_t result, void *user_arg)
Definition: globus_xio_gsi.h:363
globus_xio_gsi_authorization_mode_t
Definition: globus_xio_gsi.h:341
globus_xio_gsi_protection_level_t
Definition: globus_xio_gsi.h:296
void(* globus_xio_gsi_delegation_accept_callback_t)(globus_result_t result, gss_cred_id_t delegated_cred, OM_uint32 time_rec, void *user_arg)
Definition: globus_xio_gsi.h:371