On Wed, Feb 23, 2022 at 09:36:00AM +1100, Damien Miller wrote: > Yes, this is because scp/rcp does open(path, O_CREAT) and then > ftruncate() at close() time, whereas scp/sftp does open(path, > O_CREAT|O_TRUNC) on the basis that in an aborted transfer it's better > to leave truncated files around than files with inconsistent contents. I see in flags_from_portable() where O_TRUNC is set if SSH2_FXF_TRUNC is, but I don't think it's set otherwise. It's possible that's always set somehow though. I haven't looked into how the protocol works enough to know what's on the queue when sshbuf_get_u32(iqueue, &pflags)) is called. I'm assuming here that scp/sftp goes through the code in sftp-server.c. > I don't want to change the behaviour of sftp's upload code, because I > think it is better (at the very least, it allows resumption of > transfers without needing rsync-like tricks), so IMO the best way to > avoid this would be to teach the upload code to go via a temporary > file. My recent patch adds an option to sftp-server.c to force a temporary file. It would be a trivial change to always do this. > Not sure whether this is worth the hassle though for such a > corner-case. -- nw _______________________________________________ openssh-unix-dev mailing list openssh-unix-dev@xxxxxxxxxxx https://lists.mindrot.org/mailman/listinfo/openssh-unix-dev