(_gssapi_msg_order_import,_gssapi_msg_order_export):
New functions, used by {import,export}_sec_context. From Wynn Wilkes <wynn.wilkes@quest.com>. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@17059 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -274,6 +274,14 @@ _gssapi_msg_order_check(struct gss_msg_order *, OM_uint32);
|
|||||||
OM_uint32
|
OM_uint32
|
||||||
_gssapi_msg_order_f(OM_uint32);
|
_gssapi_msg_order_f(OM_uint32);
|
||||||
|
|
||||||
|
OM_uint32
|
||||||
|
_gssapi_msg_order_import(OM_uint32 *, krb5_storage *,
|
||||||
|
struct gss_msg_order **);
|
||||||
|
|
||||||
|
krb5_error_code
|
||||||
|
_gssapi_msg_order_export(krb5_storage *, struct gss_msg_order *);
|
||||||
|
|
||||||
|
|
||||||
/* 8003 */
|
/* 8003 */
|
||||||
|
|
||||||
krb5_error_code
|
krb5_error_code
|
||||||
|
@@ -274,6 +274,14 @@ _gssapi_msg_order_check(struct gss_msg_order *, OM_uint32);
|
|||||||
OM_uint32
|
OM_uint32
|
||||||
_gssapi_msg_order_f(OM_uint32);
|
_gssapi_msg_order_f(OM_uint32);
|
||||||
|
|
||||||
|
OM_uint32
|
||||||
|
_gssapi_msg_order_import(OM_uint32 *, krb5_storage *,
|
||||||
|
struct gss_msg_order **);
|
||||||
|
|
||||||
|
krb5_error_code
|
||||||
|
_gssapi_msg_order_export(krb5_storage *, struct gss_msg_order *);
|
||||||
|
|
||||||
|
|
||||||
/* 8003 */
|
/* 8003 */
|
||||||
|
|
||||||
krb5_error_code
|
krb5_error_code
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003 Kungliga Tekniska H<>gskolan
|
* Copyright (c) 2003 - 2006 Kungliga Tekniska H<>gskolan
|
||||||
* (Royal Institute of Technology, Stockholm, Sweden).
|
* (Royal Institute of Technology, Stockholm, Sweden).
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
@@ -46,6 +46,32 @@ struct gss_msg_order {
|
|||||||
OM_uint32 elem[1];
|
OM_uint32 elem[1];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static OM_uint32
|
||||||
|
msg_order_alloc(OM_uint32 *minor_status,
|
||||||
|
struct gss_msg_order **o,
|
||||||
|
OM_uint32 jitter_window)
|
||||||
|
{
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
len = jitter_window * sizeof((*o)->elem[0]);
|
||||||
|
len += sizeof(**o);
|
||||||
|
len -= sizeof((*o)->elem[0]);
|
||||||
|
|
||||||
|
*o = calloc(1, len);
|
||||||
|
if (*o == NULL) {
|
||||||
|
*minor_status = ENOMEM;
|
||||||
|
return GSS_S_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*minor_status = 0;
|
||||||
|
return GSS_S_COMPLETE;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@@ -58,21 +84,15 @@ _gssapi_msg_order_create(OM_uint32 *minor_status,
|
|||||||
OM_uint32 jitter_window,
|
OM_uint32 jitter_window,
|
||||||
int use_64)
|
int use_64)
|
||||||
{
|
{
|
||||||
size_t len;
|
OM_uint32 ret;
|
||||||
|
|
||||||
if (jitter_window == 0)
|
if (jitter_window == 0)
|
||||||
jitter_window = DEFAULT_JITTER_WINDOW;
|
jitter_window = DEFAULT_JITTER_WINDOW;
|
||||||
|
|
||||||
len = jitter_window * sizeof((*o)->elem[0]);
|
ret = msg_order_alloc(minor_status, o, jitter_window);
|
||||||
len += sizeof(**o);
|
if(ret != GSS_S_COMPLETE)
|
||||||
len -= sizeof((*o)->elem[0]);
|
return ret;
|
||||||
|
|
||||||
*o = malloc(len);
|
|
||||||
if (*o == NULL) {
|
|
||||||
*minor_status = ENOMEM;
|
|
||||||
return GSS_S_FAILURE;
|
|
||||||
}
|
|
||||||
memset(*o, 0, len);
|
|
||||||
(*o)->flags = flags;
|
(*o)->flags = flags;
|
||||||
(*o)->length = 0;
|
(*o)->length = 0;
|
||||||
(*o)->first_seq = seq_num;
|
(*o)->first_seq = seq_num;
|
||||||
@@ -187,3 +207,88 @@ _gssapi_msg_order_f(OM_uint32 flags)
|
|||||||
{
|
{
|
||||||
return flags & (GSS_C_SEQUENCE_FLAG|GSS_C_REPLAY_FLAG);
|
return flags & (GSS_C_SEQUENCE_FLAG|GSS_C_REPLAY_FLAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Translate `o` into inter-process format and export in to `sp'.
|
||||||
|
*/
|
||||||
|
|
||||||
|
krb5_error_code
|
||||||
|
_gssapi_msg_order_export(krb5_storage *sp, struct gss_msg_order *o)
|
||||||
|
{
|
||||||
|
krb5_error_code kret;
|
||||||
|
OM_uint32 i;
|
||||||
|
|
||||||
|
kret = krb5_store_int32(sp, o->flags);
|
||||||
|
if (kret)
|
||||||
|
return kret;
|
||||||
|
kret = krb5_store_int32(sp, o->start);
|
||||||
|
if (kret)
|
||||||
|
return kret;
|
||||||
|
kret = krb5_store_int32(sp, o->length);
|
||||||
|
if (kret)
|
||||||
|
return kret;
|
||||||
|
kret = krb5_store_int32(sp, o->jitter_window);
|
||||||
|
if (kret)
|
||||||
|
return kret;
|
||||||
|
kret = krb5_store_int32(sp, o->first_seq);
|
||||||
|
if (kret)
|
||||||
|
return kret;
|
||||||
|
|
||||||
|
for (i = 0; i < o->jitter_window; i++) {
|
||||||
|
kret = krb5_store_int32(sp, o->elem[i]);
|
||||||
|
if (kret)
|
||||||
|
return kret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
OM_uint32
|
||||||
|
_gssapi_msg_order_import(OM_uint32 *minor_status,
|
||||||
|
krb5_storage *sp,
|
||||||
|
struct gss_msg_order **o)
|
||||||
|
{
|
||||||
|
OM_uint32 ret;
|
||||||
|
krb5_error_code kret;
|
||||||
|
int32_t i, flags, start, length, jitter_window, first_seq;
|
||||||
|
|
||||||
|
kret = krb5_ret_int32(sp, &flags);
|
||||||
|
if (kret)
|
||||||
|
goto failed;
|
||||||
|
ret = krb5_ret_int32(sp, &start);
|
||||||
|
if (kret)
|
||||||
|
goto failed;
|
||||||
|
ret = krb5_ret_int32(sp, &length);
|
||||||
|
if (kret)
|
||||||
|
goto failed;
|
||||||
|
ret = krb5_ret_int32(sp, &jitter_window);
|
||||||
|
if (kret)
|
||||||
|
goto failed;
|
||||||
|
ret = krb5_ret_int32(sp, &first_seq);
|
||||||
|
if (kret)
|
||||||
|
goto failed;
|
||||||
|
|
||||||
|
ret = msg_order_alloc(minor_status, o, jitter_window);
|
||||||
|
if (ret != GSS_S_COMPLETE)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
(*o)->flags = flags;
|
||||||
|
(*o)->start = start;
|
||||||
|
(*o)->length = length;
|
||||||
|
(*o)->jitter_window = jitter_window;
|
||||||
|
(*o)->first_seq = first_seq;
|
||||||
|
|
||||||
|
for( i = 0; i < jitter_window; i++ ) {
|
||||||
|
kret = krb5_ret_int32(sp, (int32_t*)&((*o)->elem[i]));
|
||||||
|
if (kret)
|
||||||
|
goto failed;
|
||||||
|
}
|
||||||
|
|
||||||
|
*minor_status = 0;
|
||||||
|
return GSS_S_COMPLETE;
|
||||||
|
|
||||||
|
failed:
|
||||||
|
_gssapi_msg_order_destroy(o);
|
||||||
|
*minor_status = kret;
|
||||||
|
return GSS_S_FAILURE;
|
||||||
|
}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003 Kungliga Tekniska H<>gskolan
|
* Copyright (c) 2003 - 2006 Kungliga Tekniska H<>gskolan
|
||||||
* (Royal Institute of Technology, Stockholm, Sweden).
|
* (Royal Institute of Technology, Stockholm, Sweden).
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
@@ -46,6 +46,32 @@ struct gss_msg_order {
|
|||||||
OM_uint32 elem[1];
|
OM_uint32 elem[1];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static OM_uint32
|
||||||
|
msg_order_alloc(OM_uint32 *minor_status,
|
||||||
|
struct gss_msg_order **o,
|
||||||
|
OM_uint32 jitter_window)
|
||||||
|
{
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
len = jitter_window * sizeof((*o)->elem[0]);
|
||||||
|
len += sizeof(**o);
|
||||||
|
len -= sizeof((*o)->elem[0]);
|
||||||
|
|
||||||
|
*o = calloc(1, len);
|
||||||
|
if (*o == NULL) {
|
||||||
|
*minor_status = ENOMEM;
|
||||||
|
return GSS_S_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*minor_status = 0;
|
||||||
|
return GSS_S_COMPLETE;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@@ -58,21 +84,15 @@ _gssapi_msg_order_create(OM_uint32 *minor_status,
|
|||||||
OM_uint32 jitter_window,
|
OM_uint32 jitter_window,
|
||||||
int use_64)
|
int use_64)
|
||||||
{
|
{
|
||||||
size_t len;
|
OM_uint32 ret;
|
||||||
|
|
||||||
if (jitter_window == 0)
|
if (jitter_window == 0)
|
||||||
jitter_window = DEFAULT_JITTER_WINDOW;
|
jitter_window = DEFAULT_JITTER_WINDOW;
|
||||||
|
|
||||||
len = jitter_window * sizeof((*o)->elem[0]);
|
ret = msg_order_alloc(minor_status, o, jitter_window);
|
||||||
len += sizeof(**o);
|
if(ret != GSS_S_COMPLETE)
|
||||||
len -= sizeof((*o)->elem[0]);
|
return ret;
|
||||||
|
|
||||||
*o = malloc(len);
|
|
||||||
if (*o == NULL) {
|
|
||||||
*minor_status = ENOMEM;
|
|
||||||
return GSS_S_FAILURE;
|
|
||||||
}
|
|
||||||
memset(*o, 0, len);
|
|
||||||
(*o)->flags = flags;
|
(*o)->flags = flags;
|
||||||
(*o)->length = 0;
|
(*o)->length = 0;
|
||||||
(*o)->first_seq = seq_num;
|
(*o)->first_seq = seq_num;
|
||||||
@@ -187,3 +207,88 @@ _gssapi_msg_order_f(OM_uint32 flags)
|
|||||||
{
|
{
|
||||||
return flags & (GSS_C_SEQUENCE_FLAG|GSS_C_REPLAY_FLAG);
|
return flags & (GSS_C_SEQUENCE_FLAG|GSS_C_REPLAY_FLAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Translate `o` into inter-process format and export in to `sp'.
|
||||||
|
*/
|
||||||
|
|
||||||
|
krb5_error_code
|
||||||
|
_gssapi_msg_order_export(krb5_storage *sp, struct gss_msg_order *o)
|
||||||
|
{
|
||||||
|
krb5_error_code kret;
|
||||||
|
OM_uint32 i;
|
||||||
|
|
||||||
|
kret = krb5_store_int32(sp, o->flags);
|
||||||
|
if (kret)
|
||||||
|
return kret;
|
||||||
|
kret = krb5_store_int32(sp, o->start);
|
||||||
|
if (kret)
|
||||||
|
return kret;
|
||||||
|
kret = krb5_store_int32(sp, o->length);
|
||||||
|
if (kret)
|
||||||
|
return kret;
|
||||||
|
kret = krb5_store_int32(sp, o->jitter_window);
|
||||||
|
if (kret)
|
||||||
|
return kret;
|
||||||
|
kret = krb5_store_int32(sp, o->first_seq);
|
||||||
|
if (kret)
|
||||||
|
return kret;
|
||||||
|
|
||||||
|
for (i = 0; i < o->jitter_window; i++) {
|
||||||
|
kret = krb5_store_int32(sp, o->elem[i]);
|
||||||
|
if (kret)
|
||||||
|
return kret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
OM_uint32
|
||||||
|
_gssapi_msg_order_import(OM_uint32 *minor_status,
|
||||||
|
krb5_storage *sp,
|
||||||
|
struct gss_msg_order **o)
|
||||||
|
{
|
||||||
|
OM_uint32 ret;
|
||||||
|
krb5_error_code kret;
|
||||||
|
int32_t i, flags, start, length, jitter_window, first_seq;
|
||||||
|
|
||||||
|
kret = krb5_ret_int32(sp, &flags);
|
||||||
|
if (kret)
|
||||||
|
goto failed;
|
||||||
|
ret = krb5_ret_int32(sp, &start);
|
||||||
|
if (kret)
|
||||||
|
goto failed;
|
||||||
|
ret = krb5_ret_int32(sp, &length);
|
||||||
|
if (kret)
|
||||||
|
goto failed;
|
||||||
|
ret = krb5_ret_int32(sp, &jitter_window);
|
||||||
|
if (kret)
|
||||||
|
goto failed;
|
||||||
|
ret = krb5_ret_int32(sp, &first_seq);
|
||||||
|
if (kret)
|
||||||
|
goto failed;
|
||||||
|
|
||||||
|
ret = msg_order_alloc(minor_status, o, jitter_window);
|
||||||
|
if (ret != GSS_S_COMPLETE)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
(*o)->flags = flags;
|
||||||
|
(*o)->start = start;
|
||||||
|
(*o)->length = length;
|
||||||
|
(*o)->jitter_window = jitter_window;
|
||||||
|
(*o)->first_seq = first_seq;
|
||||||
|
|
||||||
|
for( i = 0; i < jitter_window; i++ ) {
|
||||||
|
kret = krb5_ret_int32(sp, (int32_t*)&((*o)->elem[i]));
|
||||||
|
if (kret)
|
||||||
|
goto failed;
|
||||||
|
}
|
||||||
|
|
||||||
|
*minor_status = 0;
|
||||||
|
return GSS_S_COMPLETE;
|
||||||
|
|
||||||
|
failed:
|
||||||
|
_gssapi_msg_order_destroy(o);
|
||||||
|
*minor_status = kret;
|
||||||
|
return GSS_S_FAILURE;
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user