diff --git a/internal/sftpd/internal_test.go b/internal/sftpd/internal_test.go index 01cbdd5e..0922d56b 100644 --- a/internal/sftpd/internal_test.go +++ b/internal/sftpd/internal_test.go @@ -2278,8 +2278,8 @@ func TestRsyncArguments(t *testing.T) { assert.False(t, canAcceptRsyncArgs(args)) args = []string{"--server", "--sender", "-vlogDtpre.", "--delete", ".", "/"} assert.False(t, canAcceptRsyncArgs(args)) - args = []string{"--server", "--sender", "-e.iLsfxCIvu", "--delete", ".", "/"} - assert.False(t, canAcceptRsyncArgs(args)) + args = []string{"--server", "--sender", "-e.iLsfxCIvu", ".", "/"} + assert.True(t, canAcceptRsyncArgs(args)) args = []string{"--server", "-vlogDtpre.iLsfxCIvu", "--delete", "/"} assert.False(t, canAcceptRsyncArgs(args)) args = []string{"--server", "-vlogDtpre.iLsfxCIvu", "--delete", "--safe-links"} diff --git a/internal/sftpd/ssh_cmd.go b/internal/sftpd/ssh_cmd.go index d9109ea6..02768fe0 100644 --- a/internal/sftpd/ssh_cmd.go +++ b/internal/sftpd/ssh_cmd.go @@ -490,7 +490,7 @@ func canAcceptRsyncArgs(args []string) bool { // rsync --server -vlogDtpre.iLsfxCIvu --supported-options . ARG # push // rsync --server --sender -vlogDtpre.iLsfxCIvu --supported-options . ARG # pull // - // Then some options with a single dash and containing "e."" followed by + // Then some options with a single dash and containing "e." followed by // supported options, listed in acceptedRsyncOptions, with double dash then // dot and a finally single argument specifying the path to operate on. idx := 0 @@ -507,9 +507,9 @@ func canAcceptRsyncArgs(args []string) bool { if args[idx] == "--sender" { idx++ } - // Check that this argument starts with a dash and contains e. but does start or end with e. - if !strings.HasPrefix(args[idx], "-") || - strings.HasPrefix(args[idx], "--") || strings.HasPrefix(args[idx], "-e") || + // Check that this argument starts with a dash and contains e. but does not + // end with e. + if !strings.HasPrefix(args[idx], "-") || strings.HasPrefix(args[idx], "--") || !strings.Contains(args[idx], "e.") || strings.HasSuffix(args[idx], "e.") { return false }