add encap functions that doesn't take the token type
also make all encap function take the oid mech that they should use git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@12636 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997 - 2001 Kungliga Tekniska H<>gskolan
|
* Copyright (c) 1997 - 2003 Kungliga Tekniska H<>gskolan
|
||||||
* (Royal Institute of Technology, Stockholm, Sweden).
|
* (Royal Institute of Technology, Stockholm, Sweden).
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
@@ -36,23 +36,45 @@
|
|||||||
RCSID("$Id$");
|
RCSID("$Id$");
|
||||||
|
|
||||||
void
|
void
|
||||||
gssapi_krb5_encap_length (size_t data_len,
|
_gssapi_encap_length (size_t data_len,
|
||||||
size_t *len,
|
size_t *len,
|
||||||
size_t *total_len)
|
size_t *total_len,
|
||||||
|
const gss_OID mech)
|
||||||
{
|
{
|
||||||
size_t len_len;
|
size_t len_len;
|
||||||
|
|
||||||
*len = 1 + 1 + GSS_KRB5_MECHANISM->length + 2 + data_len;
|
*len = 1 + 1 + mech->length + data_len;
|
||||||
|
|
||||||
len_len = length_len(*len);
|
len_len = length_len(*len);
|
||||||
|
|
||||||
*total_len = 1 + len_len + *len;
|
*total_len = 1 + len_len + *len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gssapi_krb5_encap_length (size_t data_len,
|
||||||
|
size_t *len,
|
||||||
|
size_t *total_len,
|
||||||
|
const gss_OID mech)
|
||||||
|
{
|
||||||
|
return _gssapi_encap_length(data_len + 2, len, total_len, mech);
|
||||||
|
}
|
||||||
|
|
||||||
u_char *
|
u_char *
|
||||||
gssapi_krb5_make_header (u_char *p,
|
gssapi_krb5_make_header (u_char *p,
|
||||||
size_t len,
|
size_t len,
|
||||||
u_char *type)
|
const u_char *type,
|
||||||
|
const gss_OID mech)
|
||||||
|
{
|
||||||
|
p = _gssapi_make_mech_header(p, len, mech);
|
||||||
|
memcpy (p, type, 2);
|
||||||
|
p += 2;
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
u_char *
|
||||||
|
_gssapi_make_mech_header(u_char *p,
|
||||||
|
size_t len,
|
||||||
|
const gss_OID mech)
|
||||||
{
|
{
|
||||||
int e;
|
int e;
|
||||||
size_t len_len, foo;
|
size_t len_len, foo;
|
||||||
@@ -64,11 +86,9 @@ gssapi_krb5_make_header (u_char *p,
|
|||||||
abort ();
|
abort ();
|
||||||
p += len_len;
|
p += len_len;
|
||||||
*p++ = 0x06;
|
*p++ = 0x06;
|
||||||
*p++ = GSS_KRB5_MECHANISM->length;
|
*p++ = mech->length;
|
||||||
memcpy (p, GSS_KRB5_MECHANISM->elements, GSS_KRB5_MECHANISM->length);
|
memcpy (p, mech->elements, mech->length);
|
||||||
p += GSS_KRB5_MECHANISM->length;
|
p += mech->length;
|
||||||
memcpy (p, type, 2);
|
|
||||||
p += 2;
|
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,17 +97,17 @@ gssapi_krb5_make_header (u_char *p,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
OM_uint32
|
OM_uint32
|
||||||
gssapi_krb5_encapsulate(
|
_gssapi_encapsulate(
|
||||||
OM_uint32 *minor_status,
|
OM_uint32 *minor_status,
|
||||||
const krb5_data *in_data,
|
const krb5_data *in_data,
|
||||||
gss_buffer_t output_token,
|
gss_buffer_t output_token,
|
||||||
u_char *type
|
const gss_OID mech
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
size_t len, outer_len;
|
size_t len, outer_len;
|
||||||
u_char *p;
|
u_char *p;
|
||||||
|
|
||||||
gssapi_krb5_encap_length (in_data->length, &len, &outer_len);
|
_gssapi_encap_length (in_data->length, &len, &outer_len, mech);
|
||||||
|
|
||||||
output_token->length = outer_len;
|
output_token->length = outer_len;
|
||||||
output_token->value = malloc (outer_len);
|
output_token->value = malloc (outer_len);
|
||||||
@@ -96,7 +116,38 @@ gssapi_krb5_encapsulate(
|
|||||||
return GSS_S_FAILURE;
|
return GSS_S_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
p = gssapi_krb5_make_header (output_token->value, len, type);
|
p = _gssapi_make_mech_header (output_token->value, len, mech);
|
||||||
|
memcpy (p, in_data->data, in_data->length);
|
||||||
|
return GSS_S_COMPLETE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Give it a krb5_data and it will encapsulate with extra GSS-API krb5
|
||||||
|
* wrappings.
|
||||||
|
*/
|
||||||
|
|
||||||
|
OM_uint32
|
||||||
|
gssapi_krb5_encapsulate(
|
||||||
|
OM_uint32 *minor_status,
|
||||||
|
const krb5_data *in_data,
|
||||||
|
gss_buffer_t output_token,
|
||||||
|
const u_char *type,
|
||||||
|
const gss_OID mech
|
||||||
|
)
|
||||||
|
{
|
||||||
|
size_t len, outer_len;
|
||||||
|
u_char *p;
|
||||||
|
|
||||||
|
gssapi_krb5_encap_length (in_data->length, &len, &outer_len, mech);
|
||||||
|
|
||||||
|
output_token->length = outer_len;
|
||||||
|
output_token->value = malloc (outer_len);
|
||||||
|
if (output_token->value == NULL) {
|
||||||
|
*minor_status = ENOMEM;
|
||||||
|
return GSS_S_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
p = gssapi_krb5_make_header (output_token->value, len, type, mech);
|
||||||
memcpy (p, in_data->data, in_data->length);
|
memcpy (p, in_data->data, in_data->length);
|
||||||
return GSS_S_COMPLETE;
|
return GSS_S_COMPLETE;
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997 - 2001 Kungliga Tekniska H<>gskolan
|
* Copyright (c) 1997 - 2003 Kungliga Tekniska H<>gskolan
|
||||||
* (Royal Institute of Technology, Stockholm, Sweden).
|
* (Royal Institute of Technology, Stockholm, Sweden).
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
@@ -36,23 +36,45 @@
|
|||||||
RCSID("$Id$");
|
RCSID("$Id$");
|
||||||
|
|
||||||
void
|
void
|
||||||
gssapi_krb5_encap_length (size_t data_len,
|
_gssapi_encap_length (size_t data_len,
|
||||||
size_t *len,
|
size_t *len,
|
||||||
size_t *total_len)
|
size_t *total_len,
|
||||||
|
const gss_OID mech)
|
||||||
{
|
{
|
||||||
size_t len_len;
|
size_t len_len;
|
||||||
|
|
||||||
*len = 1 + 1 + GSS_KRB5_MECHANISM->length + 2 + data_len;
|
*len = 1 + 1 + mech->length + data_len;
|
||||||
|
|
||||||
len_len = length_len(*len);
|
len_len = length_len(*len);
|
||||||
|
|
||||||
*total_len = 1 + len_len + *len;
|
*total_len = 1 + len_len + *len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gssapi_krb5_encap_length (size_t data_len,
|
||||||
|
size_t *len,
|
||||||
|
size_t *total_len,
|
||||||
|
const gss_OID mech)
|
||||||
|
{
|
||||||
|
return _gssapi_encap_length(data_len + 2, len, total_len, mech);
|
||||||
|
}
|
||||||
|
|
||||||
u_char *
|
u_char *
|
||||||
gssapi_krb5_make_header (u_char *p,
|
gssapi_krb5_make_header (u_char *p,
|
||||||
size_t len,
|
size_t len,
|
||||||
u_char *type)
|
const u_char *type,
|
||||||
|
const gss_OID mech)
|
||||||
|
{
|
||||||
|
p = _gssapi_make_mech_header(p, len, mech);
|
||||||
|
memcpy (p, type, 2);
|
||||||
|
p += 2;
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
u_char *
|
||||||
|
_gssapi_make_mech_header(u_char *p,
|
||||||
|
size_t len,
|
||||||
|
const gss_OID mech)
|
||||||
{
|
{
|
||||||
int e;
|
int e;
|
||||||
size_t len_len, foo;
|
size_t len_len, foo;
|
||||||
@@ -64,11 +86,9 @@ gssapi_krb5_make_header (u_char *p,
|
|||||||
abort ();
|
abort ();
|
||||||
p += len_len;
|
p += len_len;
|
||||||
*p++ = 0x06;
|
*p++ = 0x06;
|
||||||
*p++ = GSS_KRB5_MECHANISM->length;
|
*p++ = mech->length;
|
||||||
memcpy (p, GSS_KRB5_MECHANISM->elements, GSS_KRB5_MECHANISM->length);
|
memcpy (p, mech->elements, mech->length);
|
||||||
p += GSS_KRB5_MECHANISM->length;
|
p += mech->length;
|
||||||
memcpy (p, type, 2);
|
|
||||||
p += 2;
|
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,17 +97,17 @@ gssapi_krb5_make_header (u_char *p,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
OM_uint32
|
OM_uint32
|
||||||
gssapi_krb5_encapsulate(
|
_gssapi_encapsulate(
|
||||||
OM_uint32 *minor_status,
|
OM_uint32 *minor_status,
|
||||||
const krb5_data *in_data,
|
const krb5_data *in_data,
|
||||||
gss_buffer_t output_token,
|
gss_buffer_t output_token,
|
||||||
u_char *type
|
const gss_OID mech
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
size_t len, outer_len;
|
size_t len, outer_len;
|
||||||
u_char *p;
|
u_char *p;
|
||||||
|
|
||||||
gssapi_krb5_encap_length (in_data->length, &len, &outer_len);
|
_gssapi_encap_length (in_data->length, &len, &outer_len, mech);
|
||||||
|
|
||||||
output_token->length = outer_len;
|
output_token->length = outer_len;
|
||||||
output_token->value = malloc (outer_len);
|
output_token->value = malloc (outer_len);
|
||||||
@@ -96,7 +116,38 @@ gssapi_krb5_encapsulate(
|
|||||||
return GSS_S_FAILURE;
|
return GSS_S_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
p = gssapi_krb5_make_header (output_token->value, len, type);
|
p = _gssapi_make_mech_header (output_token->value, len, mech);
|
||||||
|
memcpy (p, in_data->data, in_data->length);
|
||||||
|
return GSS_S_COMPLETE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Give it a krb5_data and it will encapsulate with extra GSS-API krb5
|
||||||
|
* wrappings.
|
||||||
|
*/
|
||||||
|
|
||||||
|
OM_uint32
|
||||||
|
gssapi_krb5_encapsulate(
|
||||||
|
OM_uint32 *minor_status,
|
||||||
|
const krb5_data *in_data,
|
||||||
|
gss_buffer_t output_token,
|
||||||
|
const u_char *type,
|
||||||
|
const gss_OID mech
|
||||||
|
)
|
||||||
|
{
|
||||||
|
size_t len, outer_len;
|
||||||
|
u_char *p;
|
||||||
|
|
||||||
|
gssapi_krb5_encap_length (in_data->length, &len, &outer_len, mech);
|
||||||
|
|
||||||
|
output_token->length = outer_len;
|
||||||
|
output_token->value = malloc (outer_len);
|
||||||
|
if (output_token->value == NULL) {
|
||||||
|
*minor_status = ENOMEM;
|
||||||
|
return GSS_S_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
p = gssapi_krb5_make_header (output_token->value, len, type, mech);
|
||||||
memcpy (p, in_data->data, in_data->length);
|
memcpy (p, in_data->data, in_data->length);
|
||||||
return GSS_S_COMPLETE;
|
return GSS_S_COMPLETE;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user