diff --git a/lib/backend.py b/lib/backend.py index 0150ea2c3b5073ba4fa877650c65c50561cefbd0..d71574060dcfb0a2711e3815ec96966cdd638c93 100644 --- a/lib/backend.py +++ b/lib/backend.py @@ -1022,14 +1022,14 @@ def ExportSnapshot(disk, dest_node, instance): comprcmd = "gzip" - destcmd = utils.BuildShellCmd("mkdir -p %s; cat > %s/%s", + destcmd = utils.BuildShellCmd("mkdir -p %s && cat > %s/%s", destdir, destdir, destfile) remotecmd = ssh.BuildSSHCmd(dest_node, 'root', destcmd) - - + + # all commands have been checked, so we're safe to combine them - command = '|'.join([expcmd, comprcmd, ' '.join(remotecmd)]) + command = '|'.join([expcmd, comprcmd, utils.ShellQuoteArgs(remotecmd)]) result = utils.RunCmd(command) @@ -1178,7 +1178,7 @@ def ImportOSIntoInstance(instance, os_disk, swap_disk, src_node, src_image): real_os_dev.dev_path, real_swap_dev.dev_path, logfile) - command = '|'.join([' '.join(remotecmd), comprcmd, impcmd]) + command = '|'.join([utils.ShellQuoteArgs(remotecmd), comprcmd, impcmd]) result = utils.RunCmd(command) diff --git a/lib/ssh.py b/lib/ssh.py index 55a329292201a75ccfab3f0a11db26ca59ba8af5..2f33d462a9859519d67bfb7f772930bd79c56ffd 100644 --- a/lib/ssh.py +++ b/lib/ssh.py @@ -54,6 +54,7 @@ ASK_KEY_OPTS = [ "-oHashKnownHosts=no", ] + def BuildSSHCmd(hostname, user, command, batch=True, ask_key=False): """Build an ssh string to execute a command on a remote node. @@ -78,7 +79,7 @@ def BuildSSHCmd(hostname, user, command, batch=True, ask_key=False): argv.extend(BATCH_MODE_OPTS) elif ask_key: argv.extend(ASK_KEY_OPTS) - argv.extend(["%s@%s" % (user, hostname), "'%s'" % command]) + argv.extend(["%s@%s" % (user, hostname), command]) return argv