summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Rosser <jonathan.rosser@rd.bbc.co.uk>2022-01-04 17:42:03 +0000
committerJeremy Stanley <fungi@yuggoth.org>2022-04-10 12:39:22 +0000
commit5bfaa4a6f355a6820fe16c1aea77a01ba7b97eaa (patch)
treebfefb48f1089ab1d9f601da3ff528c050ec40bc4
parent25c2d3fe9678bb467952e8203cfc8c40f4a86a87 (diff)
downloadgit-review-5bfaa4a6f355a6820fe16c1aea77a01ba7b97eaa.tar.gz
Force use of scp rather than sftp when possible
OpenSSH has deprecated its use of scp/rcp protocol in favor of SFTP, which the embedded Apache mina-sshd in widely-deployed Gerrit versions does not yet support. The default officially changed in OpenSSH 9.0 (some distributions, such as Fedora and CentOS, switched their default behavior to this as early as OpenSSH 8.7 or 8.8), leading to a ``subsystem request failed on channel 0`` error during commit-msg hook retrieval. Now git-review will attempt to detect whether scp's -O option is available to force use of the legacy scp/rcp protocol, and apply it if so. Change-Id: Ib64c03c3e12a3a8390e38f6ca9393db3b3c2a9e3
-rw-r--r--git_review/cmd.py8
-rw-r--r--releasenotes/notes/scp-subsystem-c8d78aa8f7f69f66.yaml15
2 files changed, 23 insertions, 0 deletions
diff --git a/git_review/cmd.py b/git_review/cmd.py
index 9215b5d..566bf22 100644
--- a/git_review/cmd.py
+++ b/git_review/cmd.py
@@ -373,9 +373,17 @@ def set_hooks_commit_msg(remote, target_file):
userhost = hostname
# OS independent target file
scp_target_file = target_file.replace(os.sep, "/")
+
+ # Get scp options
+ scp_out = run_command("scp")
+ scp_opts = scp_out[scp_out.index("[") + 2:scp_out.index("]")]
+
cmd = ["scp", userhost + ":hooks/commit-msg", scp_target_file]
if port is not None:
cmd.insert(1, "-P%s" % port)
+ # Force scp protocol if the -O option is available
+ if "O" in scp_opts:
+ cmd.insert(1, "-O")
if VERBOSE:
hook_url = 'scp://%s%s/hooks/commit-msg' \
diff --git a/releasenotes/notes/scp-subsystem-c8d78aa8f7f69f66.yaml b/releasenotes/notes/scp-subsystem-c8d78aa8f7f69f66.yaml
new file mode 100644
index 0000000..1521445
--- /dev/null
+++ b/releasenotes/notes/scp-subsystem-c8d78aa8f7f69f66.yaml
@@ -0,0 +1,15 @@
+---
+fixes:
+ - |
+ OpenSSH has deprecated its use of scp/rcp protocol in favor of
+ SFTP, which the embedded Apache mina-sshd in widely-deployed
+ Gerrit versions does not yet support. The default officially
+ changed in OpenSSH 9.0 (some distributions, such as Fedora and
+ CentOS, switched their default behavior to this as early as
+ OpenSSH 8.7 or 8.8), leading to a ``subsystem request failed on
+ channel 0`` error during commit-msg hook retrieval. Now
+ git-review will attempt to detect whether scp's -O option is
+ available to force use of the legacy scp/rcp protocol, and apply
+ it if so. Future git-review versions may change the fallback
+ behavior once an SFTP subsystem is implemented and available for
+ a new Gerrit release.