From 07a6cbf039049d3be04c329ce6adad6d2b42744e Mon Sep 17 00:00:00 2001 From: Ryo Nakamura Date: Thu, 14 Mar 2024 15:14:31 +0900 Subject: chmod after truncate and setutimes on the remote side. When the source file permission is r--r--r--, truncate and setutimes AFTER chmod fail due to permission deined. So, do chmod after truncate and setutimes. --- src/fileops.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/fileops.c b/src/fileops.c index 5db7906..2c13436 100644 --- a/src/fileops.c +++ b/src/fileops.c @@ -323,12 +323,14 @@ int mscp_setstat(const char *path, struct stat *st, bool preserve_ts, sftp_sessi ret = sftp_setstat(sftp, path, &attr); sftp_err_to_errno(sftp); } else { - if ((ret = chmod(path, st->st_mode)) < 0) - return ret; if ((ret = truncate(path, st->st_size)) < 0) return ret; - if (preserve_ts) - ret = setutimes(path, st->st_atim, st->st_mtim); + if (preserve_ts) { + if ((ret = setutimes(path, st->st_atim, st->st_mtim)) < 0) + return ret; + } + if ((ret = chmod(path, st->st_mode)) < 0) + return ret; } return ret; -- cgit v1.2.3