(kadm5_log_rename): handle errors better

Fixes Coverity, NetBSD CID#628


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@17030 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2006-04-10 08:16:41 +00:00
parent 5d676c4509
commit ce43c5de5a

View File

@@ -369,43 +369,53 @@ kadm5_log_rename (kadm5_server_context *context,
krb5_data value; krb5_data value;
kadm5_log_context *log_context = &context->log_context; kadm5_log_context *log_context = &context->log_context;
krb5_data_zero(&value);
sp = krb5_storage_emem(); sp = krb5_storage_emem();
ret = hdb_entry2value (context->context, ent, &value); ret = hdb_entry2value (context->context, ent, &value);
if (ret) { if (ret)
krb5_storage_free(sp); goto failed;
return ret;
}
ret = kadm5_log_preamble (context, sp, kadm_rename); ret = kadm5_log_preamble (context, sp, kadm_rename);
if (ret) { if (ret)
krb5_storage_free(sp); goto failed;
krb5_data_free (&value);
return ret; ret = krb5_store_int32 (sp, 0);
} if (ret)
krb5_store_int32 (sp, 0); goto failed;
off = krb5_storage_seek (sp, 0, SEEK_CUR); off = krb5_storage_seek (sp, 0, SEEK_CUR);
krb5_store_principal (sp, source); ret = krb5_store_principal (sp, source);
if (ret)
goto failed;
krb5_storage_write(sp, value.data, value.length); krb5_storage_write(sp, value.data, value.length);
krb5_data_free (&value);
len = krb5_storage_seek (sp, 0, SEEK_CUR) - off; len = krb5_storage_seek (sp, 0, SEEK_CUR) - off;
krb5_storage_seek(sp, -(len + 4), SEEK_CUR); krb5_storage_seek(sp, -(len + 4), SEEK_CUR);
krb5_store_int32 (sp, len); ret = krb5_store_int32 (sp, len);
krb5_storage_seek(sp, len, SEEK_CUR);
krb5_store_int32 (sp, len);
if (ret) {
krb5_storage_free (sp);
return ret;
}
ret = kadm5_log_postamble (log_context, sp);
if (ret) {
krb5_storage_free (sp);
return ret;
}
ret = kadm5_log_flush (log_context, sp);
krb5_storage_free (sp);
if (ret) if (ret)
return ret; goto failed;
ret = kadm5_log_end (context);
krb5_storage_seek(sp, len, SEEK_CUR);
ret = krb5_store_int32 (sp, len);
if (ret)
goto failed;
ret = kadm5_log_postamble (log_context, sp);
if (ret)
goto failed;
ret = kadm5_log_flush (log_context, sp);
if (ret)
goto failed;
krb5_storage_free (sp);
krb5_data_free (&value);
return kadm5_log_end (context);
failed:
krb5_data_free(&value);
krb5_storage_free(sp);
return ret; return ret;
} }