(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
This commit is contained in:
@@ -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).
|
* (Royal Institute of Technology, Stockholm, Sweden).
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
@@ -772,31 +772,54 @@ kadm5_log_goto_end (int fd)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
kadm5_ret_t
|
kadm5_ret_t
|
||||||
kadm5_log_previous (krb5_storage *sp,
|
kadm5_log_previous (krb5_context context,
|
||||||
|
krb5_storage *sp,
|
||||||
u_int32_t *ver,
|
u_int32_t *ver,
|
||||||
time_t *timestamp,
|
time_t *timestamp,
|
||||||
enum kadm_ops *op,
|
enum kadm_ops *op,
|
||||||
u_int32_t *len)
|
u_int32_t *len)
|
||||||
{
|
{
|
||||||
|
krb5_error_code ret;
|
||||||
off_t off;
|
off_t off;
|
||||||
int32_t tmp;
|
int32_t tmp;
|
||||||
|
|
||||||
krb5_storage_seek(sp, -8, SEEK_CUR);
|
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;
|
*len = tmp;
|
||||||
krb5_ret_int32 (sp, &tmp);
|
ret = krb5_ret_int32 (sp, &tmp);
|
||||||
*ver = tmp;
|
*ver = tmp;
|
||||||
off = 24 + *len;
|
off = 24 + *len;
|
||||||
krb5_storage_seek(sp, -off, SEEK_CUR);
|
krb5_storage_seek(sp, -off, SEEK_CUR);
|
||||||
krb5_ret_int32 (sp, &tmp);
|
ret = krb5_ret_int32 (sp, &tmp);
|
||||||
assert(tmp == *ver);
|
if (ret)
|
||||||
krb5_ret_int32 (sp, &tmp);
|
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;
|
*timestamp = tmp;
|
||||||
krb5_ret_int32 (sp, &tmp);
|
ret = krb5_ret_int32 (sp, &tmp);
|
||||||
*op = tmp;
|
*op = tmp;
|
||||||
krb5_ret_int32 (sp, &tmp);
|
ret = krb5_ret_int32 (sp, &tmp);
|
||||||
assert(tmp == *len);
|
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;
|
return 0;
|
||||||
|
|
||||||
|
end_of_storage:
|
||||||
|
krb5_set_error_string(context, "kadm5_log_previous: end of storage "
|
||||||
|
"reached before end");
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user