Merge pull request #4271 from Scythril/winrm_mkdir_rm_filter
communicator/winrm: Fixed some WinRM command filters
This commit is contained in:
commit
7aff08f9a1
|
@ -11,6 +11,7 @@ module VagrantPlugins
|
||||||
"test",
|
"test",
|
||||||
"uname",
|
"uname",
|
||||||
"which",
|
"which",
|
||||||
|
"mkdir",
|
||||||
]
|
]
|
||||||
|
|
||||||
# Filter the given Vagrant command to ensure compatibility with Windows
|
# Filter the given Vagrant command to ensure compatibility with Windows
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
module VagrantPlugins
|
||||||
|
module CommunicatorWinRM
|
||||||
|
module CommandFilters
|
||||||
|
# Converts a *nix 'mkdir' command to a PowerShell equivalent
|
||||||
|
class Mkdir
|
||||||
|
def filter(command)
|
||||||
|
# mkdir -p /some/dir
|
||||||
|
# mkdir /some/dir
|
||||||
|
cmd_parts = command.strip.split(/\s+/)
|
||||||
|
dir = cmd_parts.pop
|
||||||
|
while !dir.nil? && dir.start_with?('-')
|
||||||
|
dir = cmd_parts.pop
|
||||||
|
end
|
||||||
|
# This will ignore any -p switches, which are redundant in PowerShell,
|
||||||
|
# and ambiguous in PowerShell 4+
|
||||||
|
return "mkdir #{dir} -force"
|
||||||
|
end
|
||||||
|
|
||||||
|
def accept?(command)
|
||||||
|
command.start_with?('mkdir ')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -5,14 +5,35 @@ module VagrantPlugins
|
||||||
class Rm
|
class Rm
|
||||||
def filter(command)
|
def filter(command)
|
||||||
# rm -Rf /some/dir
|
# rm -Rf /some/dir
|
||||||
|
# rm -R /some/dir
|
||||||
|
# rm -R -f /some/dir
|
||||||
|
# rm -f /some/dir
|
||||||
# rm /some/dir
|
# rm /some/dir
|
||||||
cmd_parts = command.strip.split(/\s+/)
|
cmd_parts = command.strip.split(/\s+/)
|
||||||
dir = cmd_parts[1]
|
|
||||||
if dir == '-Rf'
|
# Figure out if we need to do this recursively
|
||||||
dir = cmd_parts[2]
|
recurse = false
|
||||||
return "rm '#{dir}' -recurse -force"
|
cmd_parts.each do |k|
|
||||||
|
argument = k.downcase
|
||||||
|
if argument == '-r' || argument == '-rf' || argument == '-fr'
|
||||||
|
recurse = true
|
||||||
|
break
|
||||||
|
end
|
||||||
end
|
end
|
||||||
return "rm '#{dir}' -force"
|
|
||||||
|
# Figure out which argument is the path
|
||||||
|
dir = cmd_parts.pop
|
||||||
|
while !dir.nil? && dir.start_with?('-')
|
||||||
|
dir = cmd_parts.pop
|
||||||
|
end
|
||||||
|
|
||||||
|
ret_cmd = ''
|
||||||
|
if recurse
|
||||||
|
ret_cmd = "rm #{dir} -recurse -force"
|
||||||
|
else
|
||||||
|
ret_cmd = "rm #{dir} -force"
|
||||||
|
end
|
||||||
|
return ret_cmd
|
||||||
end
|
end
|
||||||
|
|
||||||
def accept?(command)
|
def accept?(command)
|
||||||
|
|
|
@ -52,14 +52,27 @@ describe VagrantPlugins::CommunicatorWinRM::CommandFilter, unit: true do
|
||||||
"if (Test-Path $p) {")
|
"if (Test-Path $p) {")
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'filters out rm -Rf commands' do
|
it 'filters out rm recurse commands' do
|
||||||
expect(subject.filter('rm -Rf /some/dir')).to eq(
|
expect(subject.filter('rm -Rf /some/dir')).to eq(
|
||||||
"rm '/some/dir' -recurse -force")
|
"rm /some/dir -recurse -force")
|
||||||
|
expect(subject.filter('rm -fr /some/dir')).to eq(
|
||||||
|
"rm /some/dir -recurse -force")
|
||||||
|
expect(subject.filter('rm -r /some/dir')).to eq(
|
||||||
|
"rm /some/dir -recurse -force")
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'filters out rm commands' do
|
it 'filters out rm commands' do
|
||||||
expect(subject.filter('rm /some/dir')).to eq(
|
expect(subject.filter('rm /some/dir')).to eq(
|
||||||
"rm '/some/dir' -force")
|
"rm /some/dir -force")
|
||||||
|
expect(subject.filter('rm -f /some/dir')).to eq(
|
||||||
|
"rm /some/dir -force")
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'filters out mkdir commands' do
|
||||||
|
expect(subject.filter('mkdir /some/dir')).to eq(
|
||||||
|
"mkdir /some/dir -force")
|
||||||
|
expect(subject.filter('mkdir -p /some/dir')).to eq(
|
||||||
|
"mkdir /some/dir -force")
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'filters out chown commands' do
|
it 'filters out chown commands' do
|
||||||
|
|
Loading…
Reference in New Issue