2015-08-28 23:08:24 +00:00
|
|
|
# encoding: utf-8
|
2015-09-09 16:37:16 +00:00
|
|
|
# copyright: 2015, Vulcano Security GmbH
|
2015-10-06 16:55:44 +00:00
|
|
|
# author: Dominik Richter
|
|
|
|
# author: Christoph Hartmann
|
2015-07-15 13:15:18 +00:00
|
|
|
|
2016-03-08 18:06:55 +00:00
|
|
|
module Inspec::Resources
|
|
|
|
class Cmd < Inspec.resource(1)
|
|
|
|
name 'command'
|
|
|
|
desc 'Use the command InSpec audit resource to test an arbitrary command that is run on the system.'
|
|
|
|
example "
|
|
|
|
describe command('ls -al /') do
|
2016-04-18 12:47:27 +00:00
|
|
|
its('stdout') { should match /bin/ }
|
2016-03-08 18:06:55 +00:00
|
|
|
its('stderr') { should eq '' }
|
2016-04-18 12:47:27 +00:00
|
|
|
its('exit_status') { should eq 0 }
|
2016-03-08 18:06:55 +00:00
|
|
|
end
|
2016-05-16 06:23:21 +00:00
|
|
|
|
|
|
|
command('ls -al /').exist? will return false. Existence of command should be checked this way.
|
|
|
|
describe command('ls') do
|
|
|
|
it { should exist }
|
|
|
|
end
|
2016-03-08 18:06:55 +00:00
|
|
|
"
|
|
|
|
|
|
|
|
attr_reader :command
|
|
|
|
|
2016-04-18 12:47:27 +00:00
|
|
|
def initialize(cmd)
|
2017-06-19 15:07:36 +00:00
|
|
|
if cmd.nil?
|
|
|
|
raise 'InSpec `command` was called with `nil` as the argument. This is not supported. Please provide a valid command instead.'
|
|
|
|
end
|
2016-03-08 18:06:55 +00:00
|
|
|
@command = cmd
|
2015-11-27 13:02:38 +00:00
|
|
|
end
|
|
|
|
|
2016-03-08 18:06:55 +00:00
|
|
|
def result
|
2016-04-18 12:47:27 +00:00
|
|
|
@result ||= inspec.backend.run_command(@command)
|
2016-03-08 18:06:55 +00:00
|
|
|
end
|
2015-08-28 23:08:24 +00:00
|
|
|
|
2016-03-08 18:06:55 +00:00
|
|
|
def stdout
|
|
|
|
result.stdout
|
|
|
|
end
|
2015-08-28 23:08:24 +00:00
|
|
|
|
2016-03-08 18:06:55 +00:00
|
|
|
def stderr
|
|
|
|
result.stderr
|
|
|
|
end
|
2015-08-28 23:08:24 +00:00
|
|
|
|
2016-03-08 18:06:55 +00:00
|
|
|
def exit_status
|
|
|
|
result.exit_status.to_i
|
|
|
|
end
|
2015-08-28 23:08:24 +00:00
|
|
|
|
2016-03-08 18:06:55 +00:00
|
|
|
def exist?
|
|
|
|
# silent for mock resources
|
2017-08-14 13:03:47 +00:00
|
|
|
return false if inspec.os.name.nil?
|
2016-03-08 18:06:55 +00:00
|
|
|
|
|
|
|
if inspec.os.linux?
|
|
|
|
res = inspec.backend.run_command("bash -c 'type \"#{@command}\"'")
|
|
|
|
elsif inspec.os.windows?
|
2017-05-30 13:31:58 +00:00
|
|
|
res = inspec.backend.run_command("Get-Command \"#{@command}\"")
|
2016-03-08 18:06:55 +00:00
|
|
|
elsif inspec.os.unix?
|
|
|
|
res = inspec.backend.run_command("type \"#{@command}\"")
|
|
|
|
else
|
2016-08-03 17:18:24 +00:00
|
|
|
warn "`command(#{@command}).exist?` is not suported on your OS: #{inspec.os[:name]}"
|
2016-03-08 18:06:55 +00:00
|
|
|
return false
|
|
|
|
end
|
|
|
|
res.exit_status.to_i == 0
|
2015-11-02 11:00:15 +00:00
|
|
|
end
|
2015-10-12 11:01:58 +00:00
|
|
|
|
2016-03-08 18:06:55 +00:00
|
|
|
def to_s
|
|
|
|
"Command #{@command}"
|
|
|
|
end
|
2015-10-12 11:01:58 +00:00
|
|
|
end
|
2015-08-28 23:08:24 +00:00
|
|
|
end
|