From f634448adfdac0a4c68cbce6cf50ee3a1678b17c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Wed, 24 Aug 2005 14:26:23 +0000 Subject: [PATCH] (kadm5_log_previous): catch errors instead of asserting and set error string. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@15969 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/kadm5/log.c | 43 +++++++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/lib/kadm5/log.c b/lib/kadm5/log.c index 3c7415dc0..9be683e82 100644 --- a/lib/kadm5/log.c +++ b/lib/kadm5/log.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997 - 2003 Kungliga Tekniska Högskolan + * Copyright (c) 1997 - 2005 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -772,31 +772,54 @@ kadm5_log_goto_end (int fd) */ kadm5_ret_t -kadm5_log_previous (krb5_storage *sp, +kadm5_log_previous (krb5_context context, + krb5_storage *sp, u_int32_t *ver, time_t *timestamp, enum kadm_ops *op, u_int32_t *len) { + krb5_error_code ret; off_t off; int32_t tmp; krb5_storage_seek(sp, -8, SEEK_CUR); - krb5_ret_int32 (sp, &tmp); + ret = krb5_ret_int32 (sp, &tmp); + if (ret) + goto end_of_storage; *len = tmp; - krb5_ret_int32 (sp, &tmp); + ret = krb5_ret_int32 (sp, &tmp); *ver = tmp; off = 24 + *len; krb5_storage_seek(sp, -off, SEEK_CUR); - krb5_ret_int32 (sp, &tmp); - assert(tmp == *ver); - krb5_ret_int32 (sp, &tmp); + ret = krb5_ret_int32 (sp, &tmp); + if (ret) + goto end_of_storage; + if (tmp != *ver) { + krb5_set_error_string(context, "kadm5_log_previous: log entry " + "have consistency failure, version number wrong"); + return KADM5_BAD_DB; + } + ret = krb5_ret_int32 (sp, &tmp); + if (ret) + goto end_of_storage; *timestamp = tmp; - krb5_ret_int32 (sp, &tmp); + ret = krb5_ret_int32 (sp, &tmp); *op = tmp; - krb5_ret_int32 (sp, &tmp); - assert(tmp == *len); + ret = krb5_ret_int32 (sp, &tmp); + if (ret) + goto end_of_storage; + if (tmp != *ver) { + krb5_set_error_string(context, "kadm5_log_previous: log entry " + "have consistency failure, length wrong"); + return KADM5_BAD_DB; + } return 0; + + end_of_storage: + krb5_set_error_string(context, "kadm5_log_previous: end of storage " + "reached before end"); + return ret; } /*