This extension is for doing chmod, chtimes, and chown on symlinks. That is on the actual symlink, not on what it points to. See https://github.com/openssh/openssh-portable/blob/master/PROTOCOL#L508
Good insights from @puellanivis in #648 (comment):
I would definitely suggest going for targeting v2 for extensions. I already have quite a few, but I hadn’t seen this lsetstat@openssh.com one yet.
Probably need to think on how I expect an extended type request gets sent. sftp.Client should probably support it through a direct LSetStat call… or rather the various chown chtimes etc should have an L prefix varient.
Though utimensat isn’t going to be possible, even lsetstat@openssh.com only has second precision through the File Attributes specification.
I got utimensat from reading the openssh sftp-server implementation. But yeah, the fact that it uses utimensat to set it, does not mean that there is ns (nanosecond) precision in the protocol on the wire.
Openssh's sftp-server here: https://github.com/openssh/openssh-portable/blob/master/sftp-server.c#L1460
This extension is for doing chmod, chtimes, and chown on symlinks. That is on the actual symlink, not on what it points to. See https://github.com/openssh/openssh-portable/blob/master/PROTOCOL#L508
Good insights from @puellanivis in #648 (comment):
I got utimensat from reading the openssh sftp-server implementation. But yeah, the fact that it uses utimensat to set it, does not mean that there is ns (nanosecond) precision in the protocol on the wire.
Openssh's sftp-server here: https://github.com/openssh/openssh-portable/blob/master/sftp-server.c#L1460