Skip to content
Snippets Groups Projects
Commit 86fc364ca5f8 authored by kiilerix's avatar kiilerix
Browse files

sshrepo: don't quote obviously safe strings (issue2983)

This restores compatibility with hg-over-ssh servers that don't parse
commandlines as sh does but works ok in the most common cases.
parent 013688350c7d
No related branches found
No related tags found
No related merge requests found
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
# This software may be used and distributed according to the terms of the # This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version. # GNU General Public License version 2 or any later version.
import re
from i18n import _ from i18n import _
import util, error, wireproto import util, error, wireproto
...@@ -20,6 +21,8 @@ ...@@ -20,6 +21,8 @@
def _serverquote(s): def _serverquote(s):
'''quote a string for the remote shell ... which we assume is sh''' '''quote a string for the remote shell ... which we assume is sh'''
if re.match(r'[a-zA-Z0-9._\-/]*$', s):
return s
return "'%s'" % s.replace("'", "'\\''") return "'%s'" % s.replace("'", "'\\''")
class sshrepository(wireproto.wirerepository): class sshrepository(wireproto.wirerepository):
......
...@@ -105,13 +105,13 @@ ...@@ -105,13 +105,13 @@
output of dummyssh output of dummyssh
$ cat dummylog $ cat dummylog
Got arguments 1:user@dummy 2:'hg' init 'remote2' Got arguments 1:user@dummy 2:hg init remote2
Got arguments 1:user@dummy 2:'hg' -R 'remote2' serve --stdio Got arguments 1:user@dummy 2:hg -R remote2 serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote2' serve --stdio Got arguments 1:user@dummy 2:hg -R remote2 serve --stdio
Got arguments 1:user@dummy 2:'hg' init 'remote1' Got arguments 1:user@dummy 2:hg init remote1
Got arguments 1:user@dummy 2:'hg' -R 'remote1' serve --stdio Got arguments 1:user@dummy 2:hg -R remote1 serve --stdio
Got arguments 1:user@dummy 2:'hg' init 'remote1' Got arguments 1:user@dummy 2:hg init remote1
Got arguments 1:user@dummy 2:'hg' init 'remote1' Got arguments 1:user@dummy 2:hg init remote1
comparing repositories comparing repositories
......
...@@ -275,13 +275,13 @@ ...@@ -275,13 +275,13 @@
3fb238f49e8c 3fb238f49e8c
$ cat dummylog $ cat dummylog
Got arguments 1:user@dummy 2:'hg' -R 'nonexistent' serve --stdio Got arguments 1:user@dummy 2:hg -R nonexistent serve --stdio
Got arguments 1:user@dummy 2:'hg' -R '/$TESTTMP/nonexistent' serve --stdio Got arguments 1:user@dummy 2:hg -R /$TESTTMP/nonexistent serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'local' serve --stdio Got arguments 1:user@dummy 2:hg -R local serve --stdio
Got arguments 1:user@dummy 2:'hg' -R '$TESTTMP/local' serve --stdio Got arguments 1:user@dummy 2:hg -R $TESTTMP/local serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio Got arguments 1:user@dummy 2:hg -R remote serve --stdio
changegroup-in-remote hook: HG_NODE=a28a9d1a809cab7d4e2fde4bee738a9ede948b60 HG_SOURCE=serve HG_URL=remote:ssh:127.0.0.1 changegroup-in-remote hook: HG_NODE=a28a9d1a809cab7d4e2fde4bee738a9ede948b60 HG_SOURCE=serve HG_URL=remote:ssh:127.0.0.1
...@@ -287,11 +287,11 @@ ...@@ -287,11 +287,11 @@
changegroup-in-remote hook: HG_NODE=a28a9d1a809cab7d4e2fde4bee738a9ede948b60 HG_SOURCE=serve HG_URL=remote:ssh:127.0.0.1 changegroup-in-remote hook: HG_NODE=a28a9d1a809cab7d4e2fde4bee738a9ede948b60 HG_SOURCE=serve HG_URL=remote:ssh:127.0.0.1
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio Got arguments 1:user@dummy 2:hg -R remote serve --stdio
changegroup-in-remote hook: HG_NODE=1383141674ec756a6056f6a9097618482fe0f4a6 HG_SOURCE=serve HG_URL=remote:ssh:127.0.0.1 changegroup-in-remote hook: HG_NODE=1383141674ec756a6056f6a9097618482fe0f4a6 HG_SOURCE=serve HG_URL=remote:ssh:127.0.0.1
...@@ -297,5 +297,5 @@ ...@@ -297,5 +297,5 @@
changegroup-in-remote hook: HG_NODE=1383141674ec756a6056f6a9097618482fe0f4a6 HG_SOURCE=serve HG_URL=remote:ssh:127.0.0.1 changegroup-in-remote hook: HG_NODE=1383141674ec756a6056f6a9097618482fe0f4a6 HG_SOURCE=serve HG_URL=remote:ssh:127.0.0.1
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:'hg' init 'a repo' Got arguments 1:user@dummy 2:hg init 'a repo'
Got arguments 1:user@dummy 2:'hg' -R 'a repo' serve --stdio Got arguments 1:user@dummy 2:hg -R 'a repo' serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'a repo' serve --stdio Got arguments 1:user@dummy 2:hg -R 'a repo' serve --stdio
...@@ -98,8 +98,8 @@ ...@@ -98,8 +98,8 @@
no changes found no changes found
$ cat dummylog $ cat dummylog
Got arguments 1:user@dummy 2:'hg' -R 'cloned' serve --stdio Got arguments 1:user@dummy 2:hg -R cloned serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'sub' serve --stdio Got arguments 1:user@dummy 2:hg -R sub serve --stdio
Got arguments 1:user@dummy 2:'hg' -R '$TESTTMP/cloned' serve --stdio Got arguments 1:user@dummy 2:hg -R $TESTTMP/cloned serve --stdio
Got arguments 1:user@dummy 2:'hg' -R '$TESTTMP/sub' serve --stdio Got arguments 1:user@dummy 2:hg -R $TESTTMP/sub serve --stdio
$ rm $BINDIR/ssh $ rm $BINDIR/ssh
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment