Use the new unsigned integer storage types. Sprinkle some error handling.

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@17428 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2006-05-04 09:50:56 +00:00
parent 83b9ad094c
commit 8faf263b83

View File

@@ -107,38 +107,69 @@ RCSID("$Id$");
#define KATOOSOON (180521L) #define KATOOSOON (180521L)
#define KALOCKED (180522L) #define KALOCKED (180522L)
static void
static krb5_error_code
decode_rx_header (krb5_storage *sp, decode_rx_header (krb5_storage *sp,
struct rx_header *h) struct rx_header *h)
{ {
krb5_ret_int32(sp, &h->epoch); krb5_error_code ret;
krb5_ret_int32(sp, &h->connid);
krb5_ret_int32(sp, &h->callid); ret = krb5_ret_uint32(sp, &h->epoch);
krb5_ret_int32(sp, &h->seqno); if (ret) return ret;
krb5_ret_int32(sp, &h->serialno); ret = krb5_ret_uint32(sp, &h->connid);
krb5_ret_int8(sp, &h->type); if (ret) return ret;
krb5_ret_int8(sp, &h->flags); ret = krb5_ret_uint32(sp, &h->callid);
krb5_ret_int8(sp, &h->status); if (ret) return ret;
krb5_ret_int8(sp, &h->secindex); ret = krb5_ret_uint32(sp, &h->seqno);
krb5_ret_int16(sp, &h->reserved); if (ret) return ret;
krb5_ret_int16(sp, &h->serviceid); ret = krb5_ret_uint32(sp, &h->serialno);
if (ret) return ret;
ret = krb5_ret_uint8(sp, &h->type);
if (ret) return ret;
ret = krb5_ret_uint8(sp, &h->flags);
if (ret) return ret;
ret = krb5_ret_uint8(sp, &h->status);
if (ret) return ret;
ret = krb5_ret_uint8(sp, &h->secindex);
if (ret) return ret;
ret = krb5_ret_uint16(sp, &h->reserved);
if (ret) return ret;
ret = krb5_ret_uint16(sp, &h->serviceid);
if (ret) return ret;
return 0;
} }
static void static krb5_error_code
encode_rx_header (struct rx_header *h, encode_rx_header (struct rx_header *h,
krb5_storage *sp) krb5_storage *sp)
{ {
krb5_store_int32(sp, h->epoch); krb5_error_code ret;
krb5_store_int32(sp, h->connid);
krb5_store_int32(sp, h->callid); ret = krb5_store_uint32(sp, h->epoch);
krb5_store_int32(sp, h->seqno); if (ret) return ret;
krb5_store_int32(sp, h->serialno); ret = krb5_store_uint32(sp, h->connid);
krb5_store_int8(sp, h->type); if (ret) return ret;
krb5_store_int8(sp, h->flags); ret = krb5_store_uint32(sp, h->callid);
krb5_store_int8(sp, h->status); if (ret) return ret;
krb5_store_int8(sp, h->secindex); ret = krb5_store_uint32(sp, h->seqno);
krb5_store_int16(sp, h->reserved); if (ret) return ret;
krb5_store_int16(sp, h->serviceid); ret = krb5_store_uint32(sp, h->serialno);
if (ret) return ret;
ret = krb5_store_uint8(sp, h->type);
if (ret) return ret;
ret = krb5_store_uint8(sp, h->flags);
if (ret) return ret;
ret = krb5_store_uint8(sp, h->status);
if (ret) return ret;
ret = krb5_store_uint8(sp, h->secindex);
if (ret) return ret;
ret = krb5_store_uint16(sp, h->reserved);
if (ret) return ret;
ret = krb5_store_uint16(sp, h->serviceid);
if (ret) return ret;
return 0;
} }
static void static void
@@ -171,7 +202,7 @@ make_error_reply (struct rx_header *hdr,
init_reply_header (hdr, &reply_hdr, HT_ABORT, HF_LAST); init_reply_header (hdr, &reply_hdr, HT_ABORT, HF_LAST);
sp = krb5_storage_emem(); sp = krb5_storage_emem();
encode_rx_header (&reply_hdr, sp); ret = encode_rx_header (&reply_hdr, sp);
krb5_store_int32(sp, ret); krb5_store_int32(sp, ret);
krb5_storage_to_data (sp, reply); krb5_storage_to_data (sp, reply);
krb5_storage_free (sp); krb5_storage_free (sp);
@@ -254,6 +285,7 @@ create_reply_ticket (krb5_context context,
krb5_keyblock *key, krb5_keyblock *key,
krb5_data *reply) krb5_data *reply)
{ {
krb5_error_code ret;
krb5_data ticket; krb5_data ticket;
krb5_keyblock session; krb5_keyblock session;
krb5_storage *sp; krb5_storage *sp;
@@ -339,7 +371,7 @@ create_reply_ticket (krb5_context context,
/* create the reply packet */ /* create the reply packet */
init_reply_header (hdr, &reply_hdr, HT_DATA, HF_LAST); init_reply_header (hdr, &reply_hdr, HT_DATA, HF_LAST);
sp = krb5_storage_emem (); sp = krb5_storage_emem ();
encode_rx_header (&reply_hdr, sp); ret = encode_rx_header (&reply_hdr, sp);
krb5_store_int32 (sp, max_seq_len); krb5_store_int32 (sp, max_seq_len);
krb5_store_xdr_data (sp, enc_data); krb5_store_xdr_data (sp, enc_data);
krb5_data_free (&enc_data); krb5_data_free (&enc_data);
@@ -846,7 +878,9 @@ _kdc_do_kaserver(krb5_context context,
return -1; return -1;
sp = krb5_storage_from_mem (buf, len); sp = krb5_storage_from_mem (buf, len);
decode_rx_header (sp, &hdr); ret = decode_rx_header (sp, &hdr);
if (ret)
goto out;
buf += RX_HEADER_SIZE; buf += RX_HEADER_SIZE;
len -= RX_HEADER_SIZE; len -= RX_HEADER_SIZE;
@@ -872,7 +906,9 @@ _kdc_do_kaserver(krb5_context context,
goto out; goto out;
} }
krb5_ret_int32(sp, &op); ret = krb5_ret_uint32(sp, &op);
if (ret)
goto out;
switch (op) { switch (op) {
case AUTHENTICATE : case AUTHENTICATE :
case AUTHENTICATE_V2 : case AUTHENTICATE_V2 :