New functions gssapi_krb5_encap_length' and gssapi_krb5_make_header'

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@2276 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Assar Westerlund
1997-07-14 11:41:22 +00:00
parent a3fcb19867
commit 25ddeeab96
2 changed files with 98 additions and 30 deletions

View File

@@ -2,6 +2,43 @@
RCSID("$Id$"); RCSID("$Id$");
void
gssapi_krb5_encap_length (size_t data_len,
size_t *len,
size_t *total_len)
{
size_t len_len;
*len = 1 + 1 + GSS_KRB5_MECHANISM->length + 2 + data_len;
len_len = length_len(*len);
*total_len = 1 + len_len + *len;
}
u_char *
gssapi_krb5_make_header (u_char *p,
size_t len,
u_char *type)
{
int e;
size_t len_len, foo;
*p++ = 0x60;
len_len = length_len(len);
e = der_put_length (p + len_len - 1, len_len, len, &foo);
if(e || foo != len_len)
abort ();
p += len_len;
*p++ = 0x06;
*p++ = GSS_KRB5_MECHANISM->length;
memcpy (p, GSS_KRB5_MECHANISM->elements, GSS_KRB5_MECHANISM->length);
p += GSS_KRB5_MECHANISM->length;
memcpy (p, type, 2);
p += 2;
return p;
}
/* /*
* Give it a krb5_data and it will encapsulate with extra GSS-API wrappings. * Give it a krb5_data and it will encapsulate with extra GSS-API wrappings.
*/ */
@@ -13,21 +50,18 @@ gssapi_krb5_encapsulate(
u_char *type u_char *type
) )
{ {
u_char *p; size_t len, outer_len;
u_char *p;
output_token->length = in_data->length + GSS_KRB5_MECHANISM->length + 6; gssapi_krb5_encap_length (in_data->length, &len, &outer_len);
output_token->value = malloc (output_token->length);
if (output_token->value == NULL) output_token->length = outer_len;
return GSS_S_FAILURE; output_token->value = malloc (outer_len);
if (output_token->value == NULL)
return GSS_S_FAILURE;
p = output_token->value; p = gssapi_krb5_make_header (output_token->value, len, type);
memcpy (p, "\x60\x07\x06\x05", 4); memcpy (p, in_data->data, in_data->length);
p += 4; krb5_data_free (in_data);
memcpy (p, GSS_KRB5_MECHANISM->elements, GSS_KRB5_MECHANISM->length); return GSS_S_COMPLETE;
p += GSS_KRB5_MECHANISM->length;
memcpy (p, type, 2);
p += 2;
memcpy (p, in_data->data, in_data->length);
krb5_data_free (in_data);
return GSS_S_COMPLETE;
} }

View File

@@ -2,6 +2,43 @@
RCSID("$Id$"); RCSID("$Id$");
void
gssapi_krb5_encap_length (size_t data_len,
size_t *len,
size_t *total_len)
{
size_t len_len;
*len = 1 + 1 + GSS_KRB5_MECHANISM->length + 2 + data_len;
len_len = length_len(*len);
*total_len = 1 + len_len + *len;
}
u_char *
gssapi_krb5_make_header (u_char *p,
size_t len,
u_char *type)
{
int e;
size_t len_len, foo;
*p++ = 0x60;
len_len = length_len(len);
e = der_put_length (p + len_len - 1, len_len, len, &foo);
if(e || foo != len_len)
abort ();
p += len_len;
*p++ = 0x06;
*p++ = GSS_KRB5_MECHANISM->length;
memcpy (p, GSS_KRB5_MECHANISM->elements, GSS_KRB5_MECHANISM->length);
p += GSS_KRB5_MECHANISM->length;
memcpy (p, type, 2);
p += 2;
return p;
}
/* /*
* Give it a krb5_data and it will encapsulate with extra GSS-API wrappings. * Give it a krb5_data and it will encapsulate with extra GSS-API wrappings.
*/ */
@@ -13,21 +50,18 @@ gssapi_krb5_encapsulate(
u_char *type u_char *type
) )
{ {
u_char *p; size_t len, outer_len;
u_char *p;
output_token->length = in_data->length + GSS_KRB5_MECHANISM->length + 6; gssapi_krb5_encap_length (in_data->length, &len, &outer_len);
output_token->value = malloc (output_token->length);
if (output_token->value == NULL) output_token->length = outer_len;
return GSS_S_FAILURE; output_token->value = malloc (outer_len);
if (output_token->value == NULL)
return GSS_S_FAILURE;
p = output_token->value; p = gssapi_krb5_make_header (output_token->value, len, type);
memcpy (p, "\x60\x07\x06\x05", 4); memcpy (p, in_data->data, in_data->length);
p += 4; krb5_data_free (in_data);
memcpy (p, GSS_KRB5_MECHANISM->elements, GSS_KRB5_MECHANISM->length); return GSS_S_COMPLETE;
p += GSS_KRB5_MECHANISM->length;
memcpy (p, type, 2);
p += 2;
memcpy (p, in_data->data, in_data->length);
krb5_data_free (in_data);
return GSS_S_COMPLETE;
} }