diff options
| author | Shulhan <ms@kilabit.info> | 2026-02-15 13:44:39 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2026-02-15 13:45:38 +0700 |
| commit | 83a162bfa6e6eba78ae439e193682c19b9cd4744 (patch) | |
| tree | 8588115d422a34aeaefa22e759ef1f19d992784f /session.go | |
| parent | 19d58e9a4c900aec1d63de45a655657c760b1235 (diff) | |
| download | awwan-83a162bfa6e6eba78ae439e193682c19b9cd4744.tar.xz | |
all: fix chmod/chown if destination is directory
Given the following command
#put!+0644 src/file dst/
If the dst is a directory, it would cause the directory permission
changes to 0644.
This changes fix it by checking if the destination is a directory first.
If we cannot stat the dst, skip the chmod/chown command.
Diffstat (limited to 'session.go')
| -rw-r--r-- | session.go | 11 |
1 files changed, 11 insertions, 0 deletions
@@ -265,6 +265,17 @@ func (ses *Session) SudoCopy(ctx context.Context, req *ExecRequest, stmt *Statem return fmt.Errorf("%s: %w", logp, err) } + dstFileInfo, err := os.Stat(dst) + if err != nil { + log.Printf(`%s: stat fails, skip setting file mode and/or owner: %s`, + logp, err) + return nil + } + if dstFileInfo.IsDir() { + srcBase := filepath.Base(src) + dst = filepath.Join(dst, srcBase) + } + if stmt.mode != 0 { var ( fsmode = strconv.FormatUint(uint64(stmt.mode), 8) |
