summaryrefslogtreecommitdiffstats
path: root/modules/ssh
diff options
context:
space:
mode:
authorGusted <williamzijl7@hotmail.com>2022-08-02 09:56:38 +0200
committerGitHub <noreply@github.com>2022-08-02 15:56:38 +0800
commit8740631b79390299e0dc82469bcb85553a4a09f7 (patch)
tree24bdd73e081a3457eae7bc34d3f23f3b9e322f79 /modules/ssh
parent036dd8a788468e7730b29982747cc3cf8829ce86 (diff)
downloadgitea-8740631b79390299e0dc82469bcb85553a4a09f7.tar.gz
gitea-8740631b79390299e0dc82469bcb85553a4a09f7.zip
Enable Wire 2 for Internal SSH Server (#20616)
- Git only decides to use the Wire 2 protocol when `git {receive,upload}-pack` receive the `GIT_PROTOCOL` environment with as value `version=2`. Currently the internal SSH Server wasn't passing this environment through. The `gitea serv` code already passed all received environments to the git command, so no code changes there.
Diffstat (limited to 'modules/ssh')
-rw-r--r--modules/ssh/ssh.go10
1 files changed, 10 insertions, 0 deletions
diff --git a/modules/ssh/ssh.go b/modules/ssh/ssh.go
index bffe29f4c3..5cc011e581 100644
--- a/modules/ssh/ssh.go
+++ b/modules/ssh/ssh.go
@@ -75,11 +75,21 @@ func sessionHandler(session ssh.Session) {
ctx, cancel := context.WithCancel(session.Context())
defer cancel()
+ gitProtocol := ""
+ for _, env := range session.Environ() {
+ if strings.HasPrefix(env, "GIT_PROTOCOL=") {
+ // The value would be version=2, so using normal split doesn't work here.
+ gitProtocol = strings.SplitN(env, "=", 2)[1]
+ break
+ }
+ }
+
cmd := exec.CommandContext(ctx, setting.AppPath, args...)
cmd.Env = append(
os.Environ(),
"SSH_ORIGINAL_COMMAND="+command,
"SKIP_MINWINSVC=1",
+ "GIT_PROTOCOL="+gitProtocol,
)
stdout, err := cmd.StdoutPipe()