diff options
author | Simo Sorce <simo@redhat.com> | 2012-07-23 18:03:15 -0400 |
---|---|---|
committer | Simo Sorce <simo@redhat.com> | 2012-10-25 15:53:30 -0400 |
commit | 3fe4e9cb0281b1e758545ce8cae14df05972bf61 (patch) | |
tree | 80c795eb8235280fd130ca115309c773556dd3f3 /proxy/src/client | |
parent | 9984eedf6443b479c1561618a724635814f8b311 (diff) | |
download | gss-proxy-3fe4e9cb0281b1e758545ce8cae14df05972bf61.tar.gz gss-proxy-3fe4e9cb0281b1e758545ce8cae14df05972bf61.tar.xz gss-proxy-3fe4e9cb0281b1e758545ce8cae14df05972bf61.zip |
Add name handle wrapper
Diffstat (limited to 'proxy/src/client')
-rw-r--r-- | proxy/src/client/gpm_accept_sec_context.c | 4 | ||||
-rw-r--r-- | proxy/src/client/gpm_acquire_cred.c | 40 | ||||
-rw-r--r-- | proxy/src/client/gpm_import_and_canon_name.c | 84 | ||||
-rw-r--r-- | proxy/src/client/gpm_indicate_mechs.c | 6 | ||||
-rw-r--r-- | proxy/src/client/gpm_init_sec_context.c | 6 | ||||
-rw-r--r-- | proxy/src/client/gpm_inquire_context.c | 14 | ||||
-rw-r--r-- | proxy/src/client/gssapi_gpm.h | 28 |
7 files changed, 71 insertions, 111 deletions
diff --git a/proxy/src/client/gpm_accept_sec_context.c b/proxy/src/client/gpm_accept_sec_context.c index 1f6a3d3..d94c001 100644 --- a/proxy/src/client/gpm_accept_sec_context.c +++ b/proxy/src/client/gpm_accept_sec_context.c @@ -31,7 +31,7 @@ OM_uint32 gpm_accept_sec_context(OM_uint32 *minor_status, gssx_cred *acceptor_cred_handle, gss_buffer_t input_token_buffer, gss_channel_bindings_t input_chan_bindings, - gss_name_t *src_name, + gssx_name **src_name, gss_OID *mech_type, gss_buffer_t output_token, OM_uint32 *ret_flags, @@ -126,7 +126,7 @@ OM_uint32 gpm_accept_sec_context(OM_uint32 *minor_status, *mech_type = mech; } if (src_name) { - *src_name = (gss_name_t)name; + *src_name = name; } if (outbuf) { *output_token = *outbuf; diff --git a/proxy/src/client/gpm_acquire_cred.c b/proxy/src/client/gpm_acquire_cred.c index 99d6438..2b2c6c3 100644 --- a/proxy/src/client/gpm_acquire_cred.c +++ b/proxy/src/client/gpm_acquire_cred.c @@ -68,7 +68,7 @@ static int gpmint_cred_to_actual_mechs(gssx_cred *c, gss_OID_set *a) } OM_uint32 gpm_acquire_cred(OM_uint32 *minor_status, - const gss_name_t desired_name, + gssx_name *desired_name, OM_uint32 time_req, const gss_OID_set desired_mechs, gss_cred_usage_t cred_usage, @@ -95,19 +95,8 @@ OM_uint32 gpm_acquire_cred(OM_uint32 *minor_status, /* ignore call_ctx for now */ - if (desired_name) { - arg->desired_name = calloc(1, sizeof(gssx_name)); - if (!arg->desired_name) { - ret_maj = GSS_S_FAILURE; - ret_min = ENOMEM; - goto done; - } - ret_maj = gp_conv_name_to_gssx(&ret_min, - desired_name, arg->desired_name); - if (ret_maj) { - goto done; - } - } + arg->desired_name = desired_name; + if (desired_mechs) { ret = gp_conv_oid_set_to_gssx(desired_mechs, &arg->desired_mechs); if (ret) { @@ -167,6 +156,8 @@ OM_uint32 gpm_acquire_cred(OM_uint32 *minor_status, ret_min = 0; done: + /* desired_name is passed in, don't let gpm_free_xdrs free it */ + arg->desired_name = NULL; gpm_free_xdrs(GSSX_ACQUIRE_CRED, &uarg, &ures); *minor_status = ret_min; return ret_maj; @@ -174,7 +165,7 @@ done: OM_uint32 gpm_add_cred(OM_uint32 *minor_status, gssx_cred *input_cred_handle, - const gss_name_t desired_name, + gssx_name *desired_name, const gss_OID desired_mech, gss_cred_usage_t cred_usage, OM_uint32 initiator_time_req, @@ -204,18 +195,9 @@ OM_uint32 gpm_add_cred(OM_uint32 *minor_status, if (output_cred_handle != NULL) { arg->add_cred_to_input_handle = true; } - if (desired_name != GSS_C_NO_NAME) { - arg->desired_name = calloc(1, sizeof(gssx_name)); - if (!arg->desired_name) { - ret = ENOMEM; - goto done; - } - ret_maj = gp_conv_name_to_gssx(&ret_min, - desired_name, arg->desired_name); - if (ret_maj) { - goto done; - } - } + + arg->desired_name = desired_name; + if (desired_mech != GSS_C_NO_OID) { mechs.count = 1; mechs.elements = desired_mech; @@ -404,7 +386,7 @@ done: *mechanisms = mechs; } } else { - (void)gpm_release_name(&ret_min, (gss_name_t *)&dname); + (void)gpm_release_name(&ret_min, &dname); (void)gss_release_oid_set(&ret_min, &mechs); } return ret_maj; @@ -490,7 +472,7 @@ OM_uint32 gpm_inquire_cred_by_mech(OM_uint32 *minor_status, done: *minor_status = ret_min; if (ret_maj != GSS_S_COMPLETE) { - (void)gpm_release_name(&ret_min, (gss_name_t *)&dname); + (void)gpm_release_name(&ret_min, &dname); } return ret_maj; } diff --git a/proxy/src/client/gpm_import_and_canon_name.c b/proxy/src/client/gpm_import_and_canon_name.c index 9c60754..a4f9772 100644 --- a/proxy/src/client/gpm_import_and_canon_name.c +++ b/proxy/src/client/gpm_import_and_canon_name.c @@ -26,14 +26,12 @@ #include "gssapi_gpm.h" OM_uint32 gpm_display_name(OM_uint32 *minor_status, - gss_name_t input_name, + gssx_name *in_name, gss_buffer_t output_name_buffer, gss_OID *output_name_type) { gss_buffer_desc input_name_buffer = GSS_C_EMPTY_BUFFER; gssx_name *output_name = NULL; - gss_name_t tmp; - gssx_name *name; uint32_t ret_maj; uint32_t ret_min; uint32_t discard; @@ -44,39 +42,36 @@ OM_uint32 gpm_display_name(OM_uint32 *minor_status, } *minor_status = 0; - if (!input_name) { + if (!in_name) { return GSS_S_CALL_INACCESSIBLE_READ; } if (!output_name_buffer) { return GSS_S_CALL_INACCESSIBLE_WRITE; } - name = (gssx_name *)input_name; - - if (name->display_name.octet_string_len == 0) { - if (name->exported_name.octet_string_len == 0) { + if (in_name->display_name.octet_string_len == 0) { + if (in_name->exported_name.octet_string_len == 0) { return GSS_S_BAD_NAME; } - gp_conv_gssx_to_buffer(&name->exported_name, &input_name_buffer); - tmp = (gss_name_t)output_name; + gp_conv_gssx_to_buffer(&in_name->exported_name, &input_name_buffer); ret_maj = gpm_import_name(&ret_min, &input_name_buffer, - GSS_C_NT_EXPORT_NAME, &tmp); + GSS_C_NT_EXPORT_NAME, &output_name); if (ret_maj) { goto done; } /* steal display_name and name_type */ - name->display_name = output_name->display_name; + in_name->display_name = output_name->display_name; output_name->display_name.octet_string_len = 0; output_name->display_name.octet_string_val = NULL; - name->name_type = output_name->name_type; + in_name->name_type = output_name->name_type; output_name->name_type.octet_string_len = 0; output_name->name_type.octet_string_val = NULL; } - ret = gp_copy_gssx_to_buffer(&name->display_name, output_name_buffer); + ret = gp_copy_gssx_to_buffer(&in_name->display_name, output_name_buffer); if (ret) { ret_min = ret; ret_maj = GSS_S_FAILURE; @@ -84,7 +79,7 @@ OM_uint32 gpm_display_name(OM_uint32 *minor_status, } if (output_name_type) { - ret = gp_conv_gssx_to_oid_alloc(&name->name_type, output_name_type); + ret = gp_conv_gssx_to_oid_alloc(&in_name->name_type, output_name_type); if (ret) { gss_release_buffer(&discard, output_name_buffer); ret_min = ret; @@ -108,7 +103,7 @@ done: OM_uint32 gpm_import_name(OM_uint32 *minor_status, gss_buffer_t input_name_buffer, gss_OID input_name_type, - gss_name_t *output_name) + gssx_name **output_name) { gssx_name *name; int ret; @@ -144,15 +139,14 @@ OM_uint32 gpm_import_name(OM_uint32 *minor_status, return GSS_S_FAILURE; } - *output_name = (gss_name_t)name; + *output_name = name; return GSS_S_COMPLETE; } OM_uint32 gpm_export_name(OM_uint32 *minor_status, - const gss_name_t input_name, + gssx_name *input_name, gss_buffer_t exported_name) { - gssx_name *name; int ret; if (!minor_status) { @@ -164,13 +158,11 @@ OM_uint32 gpm_export_name(OM_uint32 *minor_status, return GSS_S_CALL_INACCESSIBLE_READ; } - name = (gssx_name *)input_name; - - if (name->exported_name.octet_string_len == 0) { + if (input_name->exported_name.octet_string_len == 0) { return GSS_S_NAME_NOT_MN; } - ret = gp_copy_gssx_to_buffer(&name->exported_name, exported_name); + ret = gp_copy_gssx_to_buffer(&input_name->exported_name, exported_name); if (ret) { *minor_status = ret; return GSS_S_FAILURE; @@ -179,28 +171,23 @@ OM_uint32 gpm_export_name(OM_uint32 *minor_status, } OM_uint32 gpm_duplicate_name(OM_uint32 *minor_status, - const gss_name_t input_name, - gss_name_t *dest_name) + gssx_name *input_name, + gssx_name **dest_name) { - gssx_name *name; - gssx_name *namecopy; int ret; - name = (gssx_name *)input_name; - - ret = gp_copy_gssx_name_alloc(name, &namecopy); + ret = gp_copy_gssx_name_alloc(input_name, dest_name); if (ret) { *minor_status = ret; return GSS_S_FAILURE; } - *dest_name = (gss_name_t)namecopy; return GSS_S_COMPLETE; } OM_uint32 gpm_canonicalize_name(OM_uint32 *minor_status, - const gss_name_t input_name, + gssx_name *input_name, const gss_OID mech_type, - gss_name_t *output_name) + gssx_name **output_name) { union gp_rpc_arg uarg; union gp_rpc_res ures; @@ -208,7 +195,6 @@ OM_uint32 gpm_canonicalize_name(OM_uint32 *minor_status, gssx_res_import_and_canon_name *res = &ures.import_and_canon_name; uint32_t ret_maj; uint32_t ret_min; - gssx_name *name; int ret; if (!minor_status) { @@ -223,14 +209,12 @@ OM_uint32 gpm_canonicalize_name(OM_uint32 *minor_status, return GSS_S_CALL_INACCESSIBLE_WRITE; } - name = (gssx_name *)input_name; - memset(arg, 0, sizeof(gssx_arg_import_and_canon_name)); memset(res, 0, sizeof(gssx_res_import_and_canon_name)); /* ignore call_ctx for now */ - ret = gp_copy_gssx_name(name, &arg->input_name); + ret = gp_copy_gssx_name(input_name, &arg->input_name); if (ret) { goto done; } @@ -254,7 +238,7 @@ OM_uint32 gpm_canonicalize_name(OM_uint32 *minor_status, } /* steal output_name */ - *output_name = (gss_name_t)res->output_name; + *output_name = res->output_name; res->output_name = NULL; done: @@ -268,40 +252,38 @@ done: } OM_uint32 gpm_inquire_name(OM_uint32 *minor_status, - gss_name_t name, + gssx_name *name, int *name_is_MN, gss_OID *MN_mech, gss_buffer_set_t *attrs) { gss_buffer_set_t xattrs = GSS_C_NO_BUFFER_SET; - gssx_name *xname; uint32_t i; int ret; *minor_status = 0; - xname = (gssx_name *)name; - if (xname->exported_name.octet_string_len != 0) { + if (name->exported_name.octet_string_len != 0) { if (name_is_MN != NULL) { *name_is_MN = 1; } } if (MN_mech != NULL) { - ret = gp_conv_gssx_to_oid_alloc(&xname->name_type, MN_mech); + ret = gp_conv_gssx_to_oid_alloc(&name->name_type, MN_mech); if (ret) { *minor_status = ret; return GSS_S_FAILURE; } } - if (xname->name_attributes.name_attributes_len != 0) { + if (name->name_attributes.name_attributes_len != 0) { xattrs = calloc(1, sizeof(gss_buffer_set_desc)); if (!xattrs) { *minor_status = ENOMEM; return GSS_S_FAILURE; } - xattrs->count = xname->name_attributes.name_attributes_len; + xattrs->count = name->name_attributes.name_attributes_len; xattrs->elements = calloc(xattrs->count, sizeof(gss_buffer_desc)); if (!xattrs->elements) { free(xattrs); @@ -310,7 +292,7 @@ OM_uint32 gpm_inquire_name(OM_uint32 *minor_status, } for (i = 0; i < xattrs->count; i++) { ret = gp_copy_gssx_to_buffer( - &xname->name_attributes.name_attributes_val[i].attr, + &name->name_attributes.name_attributes_val[i].attr, &xattrs->elements[i]); if (ret) { for (--i; i >= 0; i--) { @@ -329,14 +311,14 @@ OM_uint32 gpm_inquire_name(OM_uint32 *minor_status, } OM_uint32 gpm_release_name(OM_uint32 *minor_status, - gss_name_t *input_name) + gssx_name **input_name) { *minor_status = 0; - if (*input_name != GSS_C_NO_NAME) { + if (*input_name != NULL) { xdr_free((xdrproc_t)xdr_gssx_name, (char *)(*input_name)); free(*input_name); - *input_name = GSS_C_NO_NAME; + *input_name = NULL; } return GSS_S_COMPLETE; } @@ -356,12 +338,12 @@ OM_uint32 gpm_compare_name(OM_uint32 *minor_status, *name_equal = 0; - ret_maj = gpm_display_name(&ret_min, (gss_name_t)name1, &buf1, &type1); + ret_maj = gpm_display_name(&ret_min, name1, &buf1, &type1); if (ret_maj != GSS_S_COMPLETE) { goto done; } - ret_maj = gpm_display_name(&ret_min, (gss_name_t)name2, &buf2, &type2); + ret_maj = gpm_display_name(&ret_min, name2, &buf2, &type2); if (ret_maj != GSS_S_COMPLETE) { goto done; } diff --git a/proxy/src/client/gpm_indicate_mechs.c b/proxy/src/client/gpm_indicate_mechs.c index 693e588..257541a 100644 --- a/proxy/src/client/gpm_indicate_mechs.c +++ b/proxy/src/client/gpm_indicate_mechs.c @@ -390,13 +390,12 @@ OM_uint32 gpm_inquire_names_for_mech(OM_uint32 *minor_status, } OM_uint32 gpm_inquire_mechs_for_name(OM_uint32 *minor_status, - const gss_name_t input_name, + gssx_name *input_name, gss_OID_set *mech_types) { uint32_t ret_min; uint32_t ret_maj; uint32_t discard; - gssx_name *name; gss_OID name_type = GSS_C_NO_OID; int present; int i; @@ -415,8 +414,7 @@ OM_uint32 gpm_inquire_mechs_for_name(OM_uint32 *minor_status, return GSS_S_FAILURE; } - name = (gssx_name *)input_name; - ret_min = gp_conv_gssx_to_oid_alloc(&name->name_type, &name_type); + ret_min = gp_conv_gssx_to_oid_alloc(&input_name->name_type, &name_type); if (ret_min) { ret_maj = GSS_S_FAILURE; goto done; diff --git a/proxy/src/client/gpm_init_sec_context.c b/proxy/src/client/gpm_init_sec_context.c index ab6ed80..12df858 100644 --- a/proxy/src/client/gpm_init_sec_context.c +++ b/proxy/src/client/gpm_init_sec_context.c @@ -29,7 +29,7 @@ OM_uint32 gpm_init_sec_context(OM_uint32 *minor_status, gssx_cred *cred_handle, gssx_ctx **context_handle, - gss_name_t target_name, + gssx_name *target_name, gss_OID mech_type, OM_uint32 req_flags, OM_uint32 time_req, @@ -63,9 +63,7 @@ OM_uint32 gpm_init_sec_context(OM_uint32 *minor_status, arg->context_handle = *context_handle; } - if (target_name != GSS_C_NO_NAME) { - arg->target_name = (gssx_name *)target_name; - } + arg->target_name = target_name; ret = gp_conv_oid_to_gssx(mech_type, &arg->mech_type); if (ret) { diff --git a/proxy/src/client/gpm_inquire_context.c b/proxy/src/client/gpm_inquire_context.c index e417159..24ad5d1 100644 --- a/proxy/src/client/gpm_inquire_context.c +++ b/proxy/src/client/gpm_inquire_context.c @@ -50,8 +50,8 @@ OM_uint32 gpm_inquire_context(OM_uint32 *minor_status, if (src_name) { ret_maj = gpm_duplicate_name(minor_status, - (gss_name_t)&context_handle->src_name, - (gss_name_t *)src_name); + &context_handle->src_name, + src_name); if (ret_maj != GSS_S_COMPLETE) { return ret_maj; } @@ -59,11 +59,11 @@ OM_uint32 gpm_inquire_context(OM_uint32 *minor_status, if (targ_name) { ret_maj = gpm_duplicate_name(minor_status, - (gss_name_t)&context_handle->targ_name, - (gss_name_t *)targ_name); + &context_handle->targ_name, + targ_name); if (ret_maj != GSS_S_COMPLETE) { if (src_name) { - (void)gpm_release_name(&tmp_min, (gss_name_t *)src_name); + (void)gpm_release_name(&tmp_min, src_name); } return ret_maj; } @@ -77,10 +77,10 @@ OM_uint32 gpm_inquire_context(OM_uint32 *minor_status, ret = gp_conv_gssx_to_oid_alloc(&context_handle->mech, mech_type); if (ret) { if (src_name) { - (void)gpm_release_name(&tmp_min, (gss_name_t *)src_name); + (void)gpm_release_name(&tmp_min, src_name); } if (targ_name) { - (void)gpm_release_name(&tmp_min, (gss_name_t *)targ_name); + (void)gpm_release_name(&tmp_min, targ_name); } *minor_status = ret; return GSS_S_FAILURE; diff --git a/proxy/src/client/gssapi_gpm.h b/proxy/src/client/gssapi_gpm.h index 2766354..706a6de 100644 --- a/proxy/src/client/gssapi_gpm.h +++ b/proxy/src/client/gssapi_gpm.h @@ -41,7 +41,7 @@ int gpm_make_call(int proc, union gp_rpc_arg *arg, union gp_rpc_res *res); void gpm_free_xdrs(int proc, union gp_rpc_arg *arg, union gp_rpc_res *res); OM_uint32 gpm_release_name(OM_uint32 *minor_status, - gss_name_t *input_name); + gssx_name **input_name); OM_uint32 gpm_release_buffer(OM_uint32 *minor_status, gss_buffer_t buffer); @@ -60,7 +60,7 @@ OM_uint32 gpm_accept_sec_context(OM_uint32 *minor_status, gssx_cred *acceptor_cred_handle, gss_buffer_t input_token_buffer, gss_channel_bindings_t input_chan_bindings, - gss_name_t *src_name, + gssx_name **src_name, gss_OID *mech_type, gss_buffer_t output_token, OM_uint32 *ret_flags, @@ -75,7 +75,7 @@ OM_uint32 gpm_delete_sec_context(OM_uint32 *minor_status, gss_buffer_t output_token); OM_uint32 gpm_acquire_cred(OM_uint32 *minor_status, - const gss_name_t desired_name, + gssx_name *desired_name, OM_uint32 time_req, const gss_OID_set desired_mechs, gss_cred_usage_t cred_usage, @@ -85,7 +85,7 @@ OM_uint32 gpm_acquire_cred(OM_uint32 *minor_status, OM_uint32 gpm_add_cred(OM_uint32 *minor_status, gssx_cred *input_cred_handle, - const gss_name_t desired_name, + gssx_name *desired_name, const gss_OID desired_mech, gss_cred_usage_t cred_usage, OM_uint32 initiator_time_req, @@ -113,7 +113,7 @@ OM_uint32 gpm_inquire_names_for_mech(OM_uint32 *minor_status, gss_OID mech_type, gss_OID_set *mech_names); OM_uint32 gpm_inquire_mechs_for_name(OM_uint32 *minor_status, - const gss_name_t input_name, + gssx_name *input_name, gss_OID_set *mech_types); OM_uint32 gpm_inquire_attrs_for_mech(OM_uint32 *minor_status, gss_OID mech, @@ -136,25 +136,25 @@ OM_uint32 gpm_indicate_mechs_by_attrs(OM_uint32 *minor_status, gss_OID_set *mechs); OM_uint32 gpm_display_name(OM_uint32 *minor_status, - gss_name_t input_name, + gssx_name *in_name, gss_buffer_t output_name_buffer, gss_OID *output_name_type); OM_uint32 gpm_import_name(OM_uint32 *minor_status, gss_buffer_t input_name_buffer, gss_OID input_name_type, - gss_name_t *output_name); + gssx_name **output_name); OM_uint32 gpm_export_name(OM_uint32 *minor_status, - const gss_name_t input_name, + gssx_name *input_name, gss_buffer_t exported_name); OM_uint32 gpm_duplicate_name(OM_uint32 *minor_status, - const gss_name_t input_name, - gss_name_t *dest_name); + gssx_name *input_name, + gssx_name **dest_name); OM_uint32 gpm_canonicalize_name(OM_uint32 *minor_status, - const gss_name_t input_name, + gssx_name *input_name, const gss_OID mech_type, - gss_name_t *output_name); + gssx_name **output_name); OM_uint32 gpm_inquire_name(OM_uint32 *minor_status, - gss_name_t name, + gssx_name *name, int *name_is_NM, gss_OID *NM_mech, gss_buffer_set_t *attrs); @@ -166,7 +166,7 @@ OM_uint32 gpm_compare_name(OM_uint32 *minor_status, OM_uint32 gpm_init_sec_context(OM_uint32 *minor_status, gssx_cred *cred_handle, gssx_ctx **context_handle, - gss_name_t target_name, + gssx_name *target_name, gss_OID mech_type, OM_uint32 req_flags, OM_uint32 time_req, |