From 2c542ce8b1870b14a1e9b6a03410372cf85ac8a0 Mon Sep 17 00:00:00 2001 From: Nicolas Williams Date: Fri, 26 May 2017 14:23:57 -0500 Subject: [PATCH] Better corrupt keytab recovery? --- lib/krb5/keytab_file.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/krb5/keytab_file.c b/lib/krb5/keytab_file.c index 05118c83c..829a26c85 100644 --- a/lib/krb5/keytab_file.c +++ b/lib/krb5/keytab_file.c @@ -684,8 +684,21 @@ fkt_add_entry(krb5_context context, } while(1) { + off_t here; + + here = krb5_storage_seek(sp, 0, SEEK_CUR); + if (here == -1) { + ret = errno; + krb5_set_error_message(context, ret, + N_("Failed writing keytab block " + "in keytab %s: %s", ""), + d->filename, strerror(ret)); + goto out; + } ret = krb5_ret_int32(sp, &len); - if(ret == KRB5_KT_END) { + if (ret) { + /* There could have been a partial length. Recover! */ + (void) krb5_storage_truncate(sp, here); len = keytab.length; break; }