HP-UX 11i and largefiles on rsync

Steve Bonds knnf6cy7w001 at sneakemail.com
Fri Apr 1 23:36:59 GMT 2005


For all you folks out there using rsync on HP-UX, be warned that HP-UX
is still broken with regard to large files.  I opened a bug report
with HP last year, as described here:

http://lists.samba.org/archive/rsync/2004-July/010226.html

I've been periodically checking on the status and today I was told
that it's been officially filed as a "we won't fix this", citing that
the mkstemp() library call wasn't mentioned in the
/usr/share/doc/lg_files.txt document.  (For some reason HP favors
using the insecure "tmpfile()" call instead.)

Despite HP's intransigence, I'd like to have an rsync that builds out
of the box with working large file support.  I figure there are
several ways to accomplish this, and I'd like some input on the best
way to proceed.  I've come up with five possible options, though if
anyone has an idea not listed here, please feel free to suggest it!

1) Change the autoconf environment to build rsync as a 64-bit binary
by default on HP-UX.  This results in a working mkstemp() but gives a
binary that won't work on ancient HP hardware.
2) Change the autoconf environment to detect HP-UX and unset
HAVE_SECURE_MKSTEMP even though the test for it succeeded.  This would
fall back to mktemp() very much like the manual process I use now, but
would be automatic.  This also means that if HP-UX were ever fixed
(HA!), the new mkstemp() wouldn't get used.
3) Write a new autoconf test for a broken mkstemp() by creating a
large sparse file in the current directory and automatically unsetting
HAVE_SECURE_MKSTEMP.  This would work on non-HP systems that were
similarly broken and allow the use of mkstemp() if HP-UX were ever
fixed (HA!)  This may falsely fail if the current filesystem doesn't
allow for large files (common on HP systems) and if the system doesn't
support sparse files this test could fill up the filesystem.
4) Implement HP's suggested workaround of a fcntl() to set O_LARGEFILE
on the file handle returned by mkstemp() inside syscall.c.  This is
essentially non-portable and indeed won't even work on HP-UX if
building a 64-bit binary.
5) Document the workarounds for HP-UX in the INSTALL file (e.g.
comment out HAVE_SECURE_MKSTEMP in config.h after running "configure"
but before running "make", or build a 64-bit binary.)

What do you all think the best approach would be?  I'd suggest #5 at a minimum.

  -- Steve


More information about the rsync mailing list