28
29
#include "gssapiP_krb5.h"
30
31
OM_uint32 krb5_gss_export_name(OM_uint32 *minor_status,
31
const gss_name_t input_name,
32
gss_buffer_t exported_name)
32
const gss_name_t input_name,
33
gss_buffer_t exported_name)
42
code = krb5_gss_init_context(&context);
49
exported_name->length = 0;
50
exported_name->value = NULL;
52
if (! kg_validate_name(input_name)) {
54
*minor_status = (OM_uint32) G_VALIDATE_FAILED;
55
krb5_free_context(context);
56
return(GSS_S_CALL_BAD_STRUCTURE|GSS_S_BAD_NAME);
59
if ((code = krb5_unparse_name(context, (krb5_principal) input_name,
63
krb5_free_context(context);
64
return(GSS_S_FAILURE);
67
krb5_free_context(context);
69
exported_name->length = 10 + length + gss_mech_krb5->length;
70
exported_name->value = malloc(exported_name->length);
71
if (!exported_name->value) {
74
*minor_status = ENOMEM;
75
return(GSS_S_FAILURE);
77
cp = exported_name->value;
79
/* Note: we assume the OID will be less than 128 bytes... */
80
*cp++ = 0x04; *cp++ = 0x01;
81
*cp++ = (gss_mech_krb5->length+2) >> 8;
82
*cp++ = (gss_mech_krb5->length+2) & 0xFF;
84
*cp++ = (gss_mech_krb5->length) & 0xFF;
85
memcpy(cp, gss_mech_krb5->elements, gss_mech_krb5->length);
86
cp += gss_mech_krb5->length;
90
*cp++ = length & 0xFF;
91
memcpy(cp, str, length);
95
return(GSS_S_COMPLETE);
44
code = krb5_gss_init_context(&context);
51
exported_name->length = 0;
52
exported_name->value = NULL;
54
if (! kg_validate_name(input_name)) {
56
*minor_status = (OM_uint32) G_VALIDATE_FAILED;
57
krb5_free_context(context);
58
return(GSS_S_CALL_BAD_STRUCTURE|GSS_S_BAD_NAME);
61
if ((code = krb5_unparse_name(context, (krb5_principal) input_name,
65
save_error_info((OM_uint32)code, context);
66
krb5_free_context(context);
67
return(GSS_S_FAILURE);
70
krb5_free_context(context);
72
exported_name->length = 10 + length + gss_mech_krb5->length;
73
exported_name->value = malloc(exported_name->length);
74
if (!exported_name->value) {
77
*minor_status = ENOMEM;
78
return(GSS_S_FAILURE);
80
cp = exported_name->value;
82
/* Note: we assume the OID will be less than 128 bytes... */
83
*cp++ = 0x04; *cp++ = 0x01;
84
store_16_be(gss_mech_krb5->length+2, cp);
87
*cp++ = (gss_mech_krb5->length) & 0xFF;
88
memcpy(cp, gss_mech_krb5->elements, gss_mech_krb5->length);
89
cp += gss_mech_krb5->length;
90
store_32_be(length, cp);
92
memcpy(cp, str, length);
96
return(GSS_S_COMPLETE);