From ab2ab5c61d5f3ffa94a48a2aca1555bfeda68efb Mon Sep 17 00:00:00 2001 From: Steven Murawski Date: Mon, 6 Jun 2016 16:29:30 -0500 Subject: add logging message if attempting to kill critical process --- lib/mixlib/shellout/windows.rb | 10 +++++++++- spec/mixlib/shellout/windows_spec.rb | 12 +++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/lib/mixlib/shellout/windows.rb b/lib/mixlib/shellout/windows.rb index 6957ea9..5b13dad 100644 --- a/lib/mixlib/shellout/windows.rb +++ b/lib/mixlib/shellout/windows.rb @@ -333,13 +333,21 @@ module Mixlib ] end + def self.unsafe_process?(name, logger) + return false unless system_required_processes.include? name + logger.debug( + "A request to kill a critical system process - #{name} - was received and skipped." + ) + true + end + # recursively kills all child processes of given pid # calls itself querying for children child procs until # none remain. Important that a single WmiLite instance # is passed in since each creates its own WMI rpc process def self.kill_process_tree(pid, wmi, logger) wmi.query("select * from Win32_Process where ParentProcessID=#{pid}").each do |instance| - next if system_required_processes.include? instance.wmi_ole_object.name + next if unsafe_process?(instance.wmi_ole_object.name, logger) child_pid = instance.wmi_ole_object.processid kill_process_tree(child_pid, wmi, logger) kill_process(instance, logger) diff --git a/spec/mixlib/shellout/windows_spec.rb b/spec/mixlib/shellout/windows_spec.rb index eb8ee78..8b40fde 100644 --- a/spec/mixlib/shellout/windows_spec.rb +++ b/spec/mixlib/shellout/windows_spec.rb @@ -114,10 +114,12 @@ describe 'Mixlib::ShellOut::Windows', :windows_only do let(:wmi) { Object.new } let(:wmi_ole_object) { Object.new } let(:wmi_process) { Object.new } + let(:logger) { Object.new } before do allow(wmi).to receive(:query).and_return([wmi_process]) allow(wmi_process).to receive(:wmi_ole_object).and_return(wmi_ole_object) + allow(logger).to receive(:debug) end context 'with a protected system process in the process tree' do @@ -128,7 +130,7 @@ describe 'Mixlib::ShellOut::Windows', :windows_only do it 'does not attempt to kill csrss.exe' do expect(utils).to_not receive(:kill_process) - utils.kill_process_tree(200, wmi, nil) + utils.kill_process_tree(200, wmi, logger) end end @@ -139,10 +141,10 @@ describe 'Mixlib::ShellOut::Windows', :windows_only do end it 'does attempt to kill blah.exe' do - expect(utils).to receive(:kill_process).with(wmi_process, nil) - expect(utils).to receive(:kill_process_tree).with(200, wmi, nil).and_call_original - expect(utils).to receive(:kill_process_tree).with(300, wmi, nil) - utils.kill_process_tree(200, wmi, nil) + expect(utils).to receive(:kill_process).with(wmi_process, logger) + expect(utils).to receive(:kill_process_tree).with(200, wmi, logger).and_call_original + expect(utils).to receive(:kill_process_tree).with(300, wmi, logger) + utils.kill_process_tree(200, wmi, logger) end end end -- cgit v1.2.1