HEIMDAL: lib/krb5: work around AIX fwrite() caching bug in stdio_store()
authorStefan Metzmacher <metze@samba.org>
Thu, 1 Feb 2024 12:58:32 +0000 (13:58 +0100)
committerStefan Metzmacher <metze@samba.org>
Wed, 22 May 2024 06:45:49 +0000 (08:45 +0200)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Björn Jacke <bjacke@samba.org>
third_party/heimdal/lib/krb5/store_stdio.c

index 9244b9e7f5faa1d2ebe5ea3a789802c453b9d52b..db19c4cdcb2c1c02a08c9e173297369500339200 100644 (file)
@@ -92,6 +92,8 @@ stdio_store(krb5_storage * sp, const void *data, size_t size)
 
     /* similar pattern to net_write() to support pipes */
     while (rem > 0) {
+       int ret;
+
        count = fwrite(cbuf, 1, rem, F(sp));
        if (count < 0) {
            if (errno == EINTR)
@@ -112,6 +114,19 @@ stdio_store(krb5_storage * sp, const void *data, size_t size)
        }
        cbuf += count;
        rem -= count;
+#ifdef _AIX
+       /*
+        * fwrite has broken caching on AIX
+        */
+       do {
+               ret = stdio_sync(sp);
+       } while (ret == EINTR);
+       if (ret != 0) {
+           errno = ret;
+           POS(sp) = -1;
+           return -1;
+       }
+#endif /* _AIX */
     }
     if (POS(sp) >= 0)
        POS(sp) += size;