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",
|
||||
"uname",
|
||||
"which",
|
||||
"mkdir",
|
||||
]
|
||||
|
||||
# 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
|
||||
def filter(command)
|
||||
# rm -Rf /some/dir
|
||||
# rm -R /some/dir
|
||||
# rm -R -f /some/dir
|
||||
# rm -f /some/dir
|
||||
# rm /some/dir
|
||||
cmd_parts = command.strip.split(/\s+/)
|
||||
dir = cmd_parts[1]
|
||||
if dir == '-Rf'
|
||||
dir = cmd_parts[2]
|
||||
return "rm '#{dir}' -recurse -force"
|
||||
|
||||
# Figure out if we need to do this recursively
|
||||
recurse = false
|
||||
cmd_parts.each do |k|
|
||||
argument = k.downcase
|
||||
if argument == '-r' || argument == '-rf' || argument == '-fr'
|
||||
recurse = true
|
||||
break
|
||||
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
|
||||
|
||||
def accept?(command)
|
||||
|
|
|
@ -52,14 +52,27 @@ describe VagrantPlugins::CommunicatorWinRM::CommandFilter, unit: true do
|
|||
"if (Test-Path $p) {")
|
||||
end
|
||||
|
||||
it 'filters out rm -Rf commands' do
|
||||
it 'filters out rm recurse commands' do
|
||||
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
|
||||
|
||||
it 'filters out rm commands' do
|
||||
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
|
||||
|
||||
it 'filters out chown commands' do
|
||||
|
|
Loading…
Reference in New Issue