1
0
mirror of https://github.com/ARM-software/devlib.git synced 2025-03-04 17:27:51 +00:00

utils/ssh: Fix escaping of command for push/pull

Ensure that source and destination are quoted and all space characters
are also escaped which is required for scp to work for file paths
containing spaces.
This commit is contained in:
Marc Bonnici 2017-12-08 18:06:55 +00:00 committed by setrofim
parent 0dde18bb56
commit 35c7196396

View File

@ -35,7 +35,8 @@ from pexpect import EOF, TIMEOUT, spawn
from devlib.exception import HostError, TargetError, TimeoutError from devlib.exception import HostError, TargetError, TimeoutError
from devlib.utils.misc import which, strip_bash_colors, check_output from devlib.utils.misc import which, strip_bash_colors, check_output
from devlib.utils.misc import escape_single_quotes, escape_double_quotes from devlib.utils.misc import (escape_single_quotes, escape_double_quotes,
escape_spaces)
from devlib.utils.types import boolean from devlib.utils.types import boolean
@ -177,11 +178,15 @@ class SshConnection(object):
self.conn = ssh_get_shell(host, username, password, self.keyfile, port, timeout, False, None) self.conn = ssh_get_shell(host, username, password, self.keyfile, port, timeout, False, None)
def push(self, source, dest, timeout=30): def push(self, source, dest, timeout=30):
dest = '{}@{}:{}'.format(self.username, self.host, dest) dest = '"{}"@"{}":"{}"'.format(escape_double_quotes(self.username),
escape_spaces(escape_double_quotes(self.host)),
escape_spaces(escape_double_quotes(dest)))
return self._scp(source, dest, timeout) return self._scp(source, dest, timeout)
def pull(self, source, dest, timeout=30): def pull(self, source, dest, timeout=30):
source = '{}@{}:{}'.format(self.username, self.host, source) source = '"{}"@"{}":"{}"'.format(escape_double_quotes(self.username),
escape_spaces(escape_double_quotes(self.host)),
escape_spaces(escape_double_quotes(source)))
return self._scp(source, dest, timeout) return self._scp(source, dest, timeout)
def execute(self, command, timeout=None, check_exit_code=True, def execute(self, command, timeout=None, check_exit_code=True,