diff options
Diffstat (limited to 'crypto/kerberosIV/lib/krb/create_ciph.c')
-rw-r--r-- | crypto/kerberosIV/lib/krb/create_ciph.c | 44 |
1 files changed, 37 insertions, 7 deletions
diff --git a/crypto/kerberosIV/lib/krb/create_ciph.c b/crypto/kerberosIV/lib/krb/create_ciph.c index 27d27ff..c22f01e 100644 --- a/crypto/kerberosIV/lib/krb/create_ciph.c +++ b/crypto/kerberosIV/lib/krb/create_ciph.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 1996, 1997 Kungliga Tekniska Högskolan + * Copyright (c) 1995, 1996, 1997, 1998 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -38,7 +38,7 @@ #include "krb_locl.h" -RCSID("$Id: create_ciph.c,v 1.9 1997/04/01 08:18:20 joda Exp $"); +RCSID("$Id: create_ciph.c,v 1.12 1998/07/24 06:32:53 assar Exp $"); /* * This routine is used by the authentication server to create @@ -91,23 +91,53 @@ create_ciph(KTEXT c, /* Text block to hold ciphertext */ { unsigned char *p = c->dat; + size_t rem = sizeof(c->dat); + int tmp; memset(c, 0, sizeof(KTEXT_ST)); + if (rem < 8) + return KFAILURE; memcpy(p, session, 8); p += 8; + rem -= 8; - p += krb_put_nir(service, instance, realm, p); + tmp = krb_put_nir(service, instance, realm, p, rem); + if (tmp < 0) + return KFAILURE; + p += tmp; + rem -= tmp; + - p += krb_put_int(life, p, 1); - p += krb_put_int(kvno, p, 1); + tmp = krb_put_int(life, p, rem, 1); + if (tmp < 0) + return KFAILURE; + p += tmp; + rem -= tmp; + + tmp = krb_put_int(kvno, p, rem, 1); + if (tmp < 0) + return KFAILURE; + p += tmp; + rem -= tmp; - p += krb_put_int(tkt->length, p, 1); + tmp = krb_put_int(tkt->length, p, rem, 1); + if (tmp < 0) + return KFAILURE; + p += tmp; + rem -= tmp; + if (rem < tkt->length) + return KFAILURE; memcpy(p, tkt->dat, tkt->length); p += tkt->length; + rem -= tkt->length; - p += krb_put_int(kdc_time, p, 4); + tmp = krb_put_int(kdc_time, p, rem, 4); + if (tmp < 0) + return KFAILURE; + p += tmp; + rem -= tmp; /* multiple of eight bytes */ c->length = (p - c->dat + 7) & ~7; |