Only prepare 10 shares per command to prevent exceeding allowed command size

When a large number of shares are defined it may cause the generated
command to exceed the maximum allowed length. To prevent this, only
allow 10 shares to be processed at a time.

Fixes #10483
This commit is contained in:
Chris Roberts 2018-12-07 12:54:02 -08:00
parent f7757b58d9
commit 924fb97e8c
2 changed files with 27 additions and 9 deletions

View File

@ -100,15 +100,21 @@ module VagrantPlugins
] ]
end end
if !shares.empty? if !shares.empty?
machine.env.ui.warn("\n" + I18n.t("vagrant_sf_smb.uac.create_warning") + "\n") uac_notified = false
sleep(UAC_PROMPT_WAIT) shares.each_slice(10) do |s_shares|
result = Vagrant::Util::PowerShell.execute(script_path, *shares, sudo: true) if !uac_notified
if result.exit_code != 0 machine.env.ui.warn("\n" + I18n.t("vagrant_sf_smb.uac.create_warning") + "\n")
share_path = result.stdout.to_s.sub("share path: ", "") uac_notified = true
raise SyncedFolderSMB::Errors::DefineShareFailed, sleep(UAC_PROMPT_WAIT)
host: share_path, end
stderr: result.stderr, result = Vagrant::Util::PowerShell.execute(script_path, *s_shares, sudo: true)
stdout: result.stdout if result.exit_code != 0
share_path = result.stdout.to_s.sub("share path: ", "")
raise SyncedFolderSMB::Errors::DefineShareFailed,
host: share_path,
stderr: result.stderr,
stdout: result.stdout
end
end end
end end
end end

View File

@ -228,6 +228,18 @@ Remark Not Vagrant Owned
expect(machine.env.ui).not_to receive(:warn) expect(machine.env.ui).not_to receive(:warn)
end end
end end
context "when more than 10 shares are defined" do
let(:folders) {
Hash[12.times.map{|i| ["/path#{i}", {hostpath: "/host#{i}"}]}]
}
after{ subject.smb_prepare(env, machine, folders, options) }
it "should execute multiple powershell commands" do
expect(Vagrant::Util::PowerShell).to receive(:execute).twice.with(any_args, sudo: true)
end
end
end end
describe ".get_smbshares" do describe ".get_smbshares" do