In krb5_ktfileint_write_entry, add a no-op fseek in between reading
authorGreg Hudson <ghudson@mit.edu>
Sat, 23 May 2009 00:09:58 +0000 (00:09 +0000)
committerGreg Hudson <ghudson@mit.edu>
Sat, 23 May 2009 00:09:58 +0000 (00:09 +0000)
EOF and writing the placeholder length field.  Otherwise we can run
into an apparent bug in the Solaris 10 stdio library which causes the
next no-op fseek after the fwrite to fail with EINVAL.

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@22367 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/keytab/kt_file.c

index 4139da5e022c8db0f132fbfa65131061658d6003..4c90b8b47dcccad620c0abaa05a2e3943ec6436d 100644 (file)
@@ -1659,6 +1659,9 @@ krb5_ktfileint_find_slot(krb5_context context, krb5_keytab id, krb5_int32 *size_
            return errno;
         if (!fread(&size, sizeof(size), 1, fp)) {
             /* Hit the end of file, reserve this slot. */
+            /* Necessary to avoid a later fseek failing on Solaris 10. */
+           if (fseek(fp, 0, SEEK_CUR))
+               return errno;
            /* htonl(0) is 0, so no need to worry about byte order */
             size = 0;
             if (!fwrite(&size, sizeof(size), 1, fp))