diff options
Diffstat (limited to 'proxy/src/gp_conv.c')
-rw-r--r-- | proxy/src/gp_conv.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/proxy/src/gp_conv.c b/proxy/src/gp_conv.c index 4f06987..f93f48e 100644 --- a/proxy/src/gp_conv.c +++ b/proxy/src/gp_conv.c @@ -631,3 +631,50 @@ int gp_conv_oid_set_to_gssx(gss_OID_set in, gssx_OID_set *out) return 0; } + +int gp_copy_gssx_name_alloc(gssx_name *in, gssx_name **out) +{ + gssx_name *o; + int ret; + + o = calloc(1, sizeof(gssx_name)); + if (!o) { + return ENOMEM; + } + + if (in->display_name) { + ret = gp_conv_octet_string_alloc(in->display_name->octet_string_len, + in->display_name->octet_string_val, + &o->display_name); + if (ret) { + goto done; + } + } + ret = gp_conv_octet_string(in->name_type.octet_string_len, + in->name_type.octet_string_val, + &o->name_type); + if (ret) { + goto done; + } + ret = gp_conv_octet_string(in->exported_name.octet_string_len, + in->exported_name.octet_string_val, + &o->exported_name); + if (ret) { + goto done; + } + ret = gp_conv_octet_string(in->exported_composite_name.octet_string_len, + in->exported_composite_name.octet_string_val, + &o->exported_composite_name); + if (ret) { + goto done; + } + + *out = o; + +done: + if (ret) { + xdr_free((xdrproc_t)xdr_gssx_name, (char *)o); + free(o); + } + return ret; +} |