(kadm5_log_previous): document assumptions and make less broken.
Bug report from Ronny Blomme. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@20584 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -798,6 +798,10 @@ kadm5_log_goto_end (int fd)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Return previous log entry.
|
* Return previous log entry.
|
||||||
|
*
|
||||||
|
* The pointer in `sp<73> is assumed to be at the top of the entry before
|
||||||
|
* previous entry. On success, the `sp<73> pointer is set to data portion
|
||||||
|
* of previous entry. In case of error, its not changed at all.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
kadm5_ret_t
|
kadm5_ret_t
|
||||||
@@ -809,9 +813,11 @@ kadm5_log_previous (krb5_context context,
|
|||||||
uint32_t *len)
|
uint32_t *len)
|
||||||
{
|
{
|
||||||
krb5_error_code ret;
|
krb5_error_code ret;
|
||||||
off_t off;
|
off_t off, oldoff;
|
||||||
int32_t tmp;
|
int32_t tmp;
|
||||||
|
|
||||||
|
oldoff = krb5_storage_seek(sp, 0, SEEK_CUR);
|
||||||
|
|
||||||
krb5_storage_seek(sp, -8, SEEK_CUR);
|
krb5_storage_seek(sp, -8, SEEK_CUR);
|
||||||
ret = krb5_ret_int32 (sp, &tmp);
|
ret = krb5_ret_int32 (sp, &tmp);
|
||||||
if (ret)
|
if (ret)
|
||||||
@@ -825,6 +831,7 @@ kadm5_log_previous (krb5_context context,
|
|||||||
if (ret)
|
if (ret)
|
||||||
goto end_of_storage;
|
goto end_of_storage;
|
||||||
if (tmp != *ver) {
|
if (tmp != *ver) {
|
||||||
|
krb5_storage_seek(sp, oldoff, SEEK_SET);
|
||||||
krb5_set_error_string(context, "kadm5_log_previous: log entry "
|
krb5_set_error_string(context, "kadm5_log_previous: log entry "
|
||||||
"have consistency failure, version number wrong");
|
"have consistency failure, version number wrong");
|
||||||
return KADM5_BAD_DB;
|
return KADM5_BAD_DB;
|
||||||
@@ -838,7 +845,8 @@ kadm5_log_previous (krb5_context context,
|
|||||||
ret = krb5_ret_int32 (sp, &tmp);
|
ret = krb5_ret_int32 (sp, &tmp);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto end_of_storage;
|
goto end_of_storage;
|
||||||
if (tmp != *ver) {
|
if (tmp != *len) {
|
||||||
|
krb5_storage_seek(sp, oldoff, SEEK_SET);
|
||||||
krb5_set_error_string(context, "kadm5_log_previous: log entry "
|
krb5_set_error_string(context, "kadm5_log_previous: log entry "
|
||||||
"have consistency failure, length wrong");
|
"have consistency failure, length wrong");
|
||||||
return KADM5_BAD_DB;
|
return KADM5_BAD_DB;
|
||||||
@@ -846,6 +854,7 @@ kadm5_log_previous (krb5_context context,
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
end_of_storage:
|
end_of_storage:
|
||||||
|
krb5_storage_seek(sp, oldoff, SEEK_SET);
|
||||||
krb5_set_error_string(context, "kadm5_log_previous: end of storage "
|
krb5_set_error_string(context, "kadm5_log_previous: end of storage "
|
||||||
"reached before end");
|
"reached before end");
|
||||||
return ret;
|
return ret;
|
||||||
|
Reference in New Issue
Block a user