Ticket #4285: sftp: timestamps are not preserved for uploaded symlink.

* (sftpfs_symlink): don't call sftpfs_fix_filename() for target file
    bacause it breaks symlink: relative symlinks became an absolute one.
  * (sftpfs_utime): set timestamps only, don't touch other attributes.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
Andrew Borodin 2021-09-11 20:24:30 +03:00
parent 899c926fcb
commit 8e5f8255e1

View File

@ -387,6 +387,8 @@ sftpfs_symlink (const vfs_path_t * vpath1, const vfs_path_t * vpath2, GError **
sftpfs_super_t *super = NULL;
const vfs_path_element_t *path_element1;
const vfs_path_element_t *path_element2 = NULL;
const char *path1;
size_t path1_len;
const GString *ctmp_path;
char *tmp_path;
unsigned int tmp_path_len;
@ -400,16 +402,14 @@ sftpfs_symlink (const vfs_path_t * vpath1, const vfs_path_t * vpath2, GError **
tmp_path_len = ctmp_path->len;
path_element1 = vfs_path_get_by_index (vpath1, -1);
path1 = path_element1->path;
path1_len = strlen (path1);
do
{
const GString *fixfname;
fixfname = sftpfs_fix_filename (path_element1->path);
res =
libssh2_sftp_symlink_ex (super->sftp_session, fixfname->str, fixfname->len, tmp_path,
tmp_path_len, LIBSSH2_SFTP_SYMLINK);
libssh2_sftp_symlink_ex (super->sftp_session, path1, path1_len, tmp_path, tmp_path_len,
LIBSSH2_SFTP_SYMLINK);
if (res >= 0)
break;
@ -448,6 +448,7 @@ sftpfs_utime (const vfs_path_t * vpath, time_t atime, time_t mtime, GError ** mc
if (res < 0)
return res;
attrs.flags = LIBSSH2_SFTP_ATTR_ACMODTIME;
attrs.atime = atime;
attrs.mtime = mtime;