(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