Save asn1 class, type and tag of the reply if there is one. Used to

verify the reply in kdc-replay.


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@20956 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2007-06-07 04:32:53 +00:00
parent 55df27f234
commit 43a028c82a

View File

@@ -158,8 +158,9 @@ krb5_kdc_process_krb5_request(krb5_context context,
int int
krb5_kdc_save_request(krb5_context context, krb5_kdc_save_request(krb5_context context,
const char *fn, const char *fn,
unsigned char *buf, const unsigned char *buf,
size_t len, size_t len,
const krb5_data *reply,
const struct sockaddr *sa) const struct sockaddr *sa)
{ {
krb5_storage *sp; krb5_storage *sp;
@@ -170,7 +171,7 @@ krb5_kdc_save_request(krb5_context context,
memset(&a, 0, sizeof(a)); memset(&a, 0, sizeof(a));
d.data = buf; d.data = rk_UNCONST(buf);
d.length = len; d.length = len;
t = _kdc_now.tv_sec; t = _kdc_now.tv_sec;
@@ -191,16 +192,24 @@ krb5_kdc_save_request(krb5_context context,
if (ret) if (ret)
goto out; goto out;
ret = krb5_store_uint32(sp, 1); krb5_store_uint32(sp, 1);
if (ret) krb5_store_uint32(sp, t);
goto out2; krb5_store_address(sp, a);
ret = krb5_store_uint32(sp, t); krb5_store_data(sp, d);
if (ret) {
goto out2; Der_class cl;
ret = krb5_store_address(sp, a); Der_type ty;
if (ret) unsigned int tag;
goto out2; ret = der_get_tag (reply->data, reply->length,
ret = krb5_store_data(sp, d); &cl, &ty, &tag, NULL);
if (ret) {
krb5_store_uint32(sp, 0xffffffff);
krb5_store_uint32(sp, 0xffffffff);
} else {
krb5_store_uint32(sp, MAKE_TAG(cl, ty, 0));
krb5_store_uint32(sp, tag);
}
}
out2: out2:
krb5_free_address(context, &a); krb5_free_address(context, &a);