Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > e16d0c94ff2c9e93ba4eea60f7b68478 > files > 43

krb5-1.6.1-70.el5_9.2.src.rpm

Ensure that we don't accidentally attempt to use or fclose() a file which we
have already fclose()d.

--- krb5-1.5/src/lib/krb5/keytab/kt_file.c	2006-06-13 10:14:27.000000000 -0400
+++ krb5-1.5/src/lib/krb5/keytab/kt_file.c	2006-07-05 14:55:11.000000000 -0400
@@ -1083,29 +1083,32 @@
     if (writevno) {
 	kt_vno = htons(krb5_kt_default_vno);
 	KTVERSION(id) = krb5_kt_default_vno;
 	if (!xfwrite(&kt_vno, sizeof(kt_vno), 1, KTFILEP(id))) {
-	    kerror = errno;
+	    kerror = errno ? errno : EIO;
 	    (void) krb5_unlock_file(context, fileno(KTFILEP(id)));
 	    (void) fclose(KTFILEP(id));
+	    KTFILEP(id) = 0;
 	    return kerror;
 	}
     } else {
 	/* gotta verify it instead... */
 	if (!xfread(&kt_vno, sizeof(kt_vno), 1, KTFILEP(id))) {
 	    if (feof(KTFILEP(id)))
 		kerror = KRB5_KEYTAB_BADVNO;
 	    else
-		kerror = errno;
+		kerror = errno ? errno : EIO;
 	    (void) krb5_unlock_file(context, fileno(KTFILEP(id)));
 	    (void) fclose(KTFILEP(id));
+	    KTFILEP(id) = 0;
 	    return kerror;
 	}
 	kt_vno = KTVERSION(id) = ntohs(kt_vno);
 	if ((kt_vno != KRB5_KT_VNO) &&
 	    (kt_vno != KRB5_KT_VNO_1)) {
 	    (void) krb5_unlock_file(context, fileno(KTFILEP(id)));
 	    (void) fclose(KTFILEP(id));
+	    KTFILEP(id) = 0;
 	    return KRB5_KEYTAB_BADVNO;
 	}
     }
     return 0;