Blame krb5-1.5-fclose.patch
|
|
efbd8d5 |
Ensure that we don't accidentally attempt to use or fclose() a file which we
|
|
|
efbd8d5 |
have already fclose()d.
|
|
|
efbd8d5 |
|
|
|
efbd8d5 |
--- krb5-1.5/src/lib/krb5/keytab/kt_file.c 2006-06-13 10:14:27.000000000 -0400
|
|
|
efbd8d5 |
+++ krb5-1.5/src/lib/krb5/keytab/kt_file.c 2006-07-05 14:55:11.000000000 -0400
|
|
|
efbd8d5 |
@@ -1083,29 +1083,32 @@
|
|
|
efbd8d5 |
if (writevno) {
|
|
|
efbd8d5 |
kt_vno = htons(krb5_kt_default_vno);
|
|
|
efbd8d5 |
KTVERSION(id) = krb5_kt_default_vno;
|
|
|
efbd8d5 |
if (!xfwrite(&kt_vno, sizeof(kt_vno), 1, KTFILEP(id))) {
|
|
|
efbd8d5 |
- kerror = errno;
|
|
|
efbd8d5 |
+ kerror = errno ? errno : EIO;
|
|
|
efbd8d5 |
(void) krb5_unlock_file(context, fileno(KTFILEP(id)));
|
|
|
efbd8d5 |
(void) fclose(KTFILEP(id));
|
|
|
efbd8d5 |
+ KTFILEP(id) = 0;
|
|
|
efbd8d5 |
return kerror;
|
|
|
efbd8d5 |
}
|
|
|
efbd8d5 |
} else {
|
|
|
efbd8d5 |
/* gotta verify it instead... */
|
|
|
efbd8d5 |
if (!xfread(&kt_vno, sizeof(kt_vno), 1, KTFILEP(id))) {
|
|
|
efbd8d5 |
if (feof(KTFILEP(id)))
|
|
|
efbd8d5 |
kerror = KRB5_KEYTAB_BADVNO;
|
|
|
efbd8d5 |
else
|
|
|
efbd8d5 |
- kerror = errno;
|
|
|
efbd8d5 |
+ kerror = errno ? errno : EIO;
|
|
|
efbd8d5 |
(void) krb5_unlock_file(context, fileno(KTFILEP(id)));
|
|
|
efbd8d5 |
(void) fclose(KTFILEP(id));
|
|
|
efbd8d5 |
+ KTFILEP(id) = 0;
|
|
|
efbd8d5 |
return kerror;
|
|
|
efbd8d5 |
}
|
|
|
efbd8d5 |
kt_vno = KTVERSION(id) = ntohs(kt_vno);
|
|
|
efbd8d5 |
if ((kt_vno != KRB5_KT_VNO) &&
|
|
|
efbd8d5 |
(kt_vno != KRB5_KT_VNO_1)) {
|
|
|
efbd8d5 |
(void) krb5_unlock_file(context, fileno(KTFILEP(id)));
|
|
|
efbd8d5 |
(void) fclose(KTFILEP(id));
|
|
|
efbd8d5 |
+ KTFILEP(id) = 0;
|
|
|
efbd8d5 |
return KRB5_KEYTAB_BADVNO;
|
|
|
efbd8d5 |
}
|
|
|
efbd8d5 |
}
|
|
|
efbd8d5 |
return 0;
|