Update host resource to resolve all ipaddresses (#6481)

Signed-off-by: Alan Foster <alan@alanfoster.me>
This commit is contained in:
Alan Foster 2023-05-16 02:43:22 +01:00 committed by GitHub
parent 3ecb812aac
commit ce5fb0fb46
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 19 deletions

View file

@ -319,15 +319,9 @@ module Inspec::Resources
return nil return nil
end end
resolve_ipv4 = resolve_ipv4.inject(:merge) if resolve_ipv4.is_a?(Array)
# Append the ipv4 addresses # Append the ipv4 addresses
resolve_ipv4.each_value do |ip| resolve_ipv4 = [resolve_ipv4] unless resolve_ipv4.is_a?(Array)
matched = ip.to_s.chomp.match(Resolv::IPv4::Regex) resolve_ipv4.each { |entry| addresses << entry["IPAddress"] }
next if matched.nil? || addresses.include?(matched.to_s)
addresses << matched.to_s
end
# -Type AAAA is the DNS query for IPv6 server Address. # -Type AAAA is the DNS query for IPv6 server Address.
cmd = inspec.command("Resolve-DnsName Type AAAA #{hostname} | ConvertTo-Json") cmd = inspec.command("Resolve-DnsName Type AAAA #{hostname} | ConvertTo-Json")
@ -337,15 +331,9 @@ module Inspec::Resources
return nil return nil
end end
resolve_ipv6 = resolve_ipv6.inject(:merge) if resolve_ipv6.is_a?(Array)
# Append the ipv6 addresses # Append the ipv6 addresses
resolve_ipv6.each_value do |ip| resolve_ipv6 = [resolve_ipv6] unless resolve_ipv6.is_a?(Array)
matched = ip.to_s.chomp.match(Resolv::IPv6::Regex) resolve_ipv6.each { |entry| addresses << entry["IPAddress"] }
next if matched.nil? || addresses.include?(matched.to_s)
addresses << matched.to_s
end
addresses addresses
end end

View file

@ -35,7 +35,7 @@ describe "Inspec::Resources::Host" do
resource = MockLoader.new(:windows).load_resource("host", "microsoft.com") resource = MockLoader.new(:windows).load_resource("host", "microsoft.com")
_(resource.resolvable?).must_equal true _(resource.resolvable?).must_equal true
_(resource.reachable?).must_equal false _(resource.reachable?).must_equal false
_(resource.ipaddress).must_equal ["134.170.188.221", "2404:6800:4009:827::200e"] _(resource.ipaddress).must_equal ["134.170.185.46", "134.170.188.221", "2404:6800:4009:827::200e"]
_(resource.to_s).must_equal "Host microsoft.com" _(resource.to_s).must_equal "Host microsoft.com"
_(resource.resource_id).must_equal "microsoft.com" _(resource.resource_id).must_equal "microsoft.com"
end end
@ -107,7 +107,7 @@ describe "Inspec::Resources::Host" do
resource = MockLoader.new(:windows).load_resource("host", "microsoft.com", port: 1234, protocol: "tcp") resource = MockLoader.new(:windows).load_resource("host", "microsoft.com", port: 1234, protocol: "tcp")
_(resource.resolvable?).must_equal true _(resource.resolvable?).must_equal true
_(resource.reachable?).must_equal true _(resource.reachable?).must_equal true
_(resource.ipaddress).must_equal ["134.170.188.221", "2404:6800:4009:827::200e"] _(resource.ipaddress).must_equal ["134.170.185.46", "134.170.188.221", "2404:6800:4009:827::200e"]
_(resource.to_s).must_equal "Host microsoft.com port 1234 proto tcp" _(resource.to_s).must_equal "Host microsoft.com port 1234 proto tcp"
_(resource.resource_id).must_equal "microsoft.com-1234-tcp" _(resource.resource_id).must_equal "microsoft.com-1234-tcp"
end end
@ -379,7 +379,7 @@ describe Inspec::Resources::UnixHostProvider do
it "checks ipv4_address and ipv6_address properties on windows" do it "checks ipv4_address and ipv6_address properties on windows" do
resource = MockLoader.new(:windows).load_resource("host", "microsoft.com") resource = MockLoader.new(:windows).load_resource("host", "microsoft.com")
_(resource.ipv4_address).must_equal ["134.170.188.221"] _(resource.ipv4_address).must_equal ["134.170.185.46", "134.170.188.221"]
_(resource.ipv4_address).must_include "134.170.188.221" _(resource.ipv4_address).must_include "134.170.188.221"
_(resource.ipv6_address).must_equal ["2404:6800:4009:827::200e"] _(resource.ipv6_address).must_equal ["2404:6800:4009:827::200e"]
_(resource.ipv6_address).must_include "2404:6800:4009:827::200e" _(resource.ipv6_address).must_include "2404:6800:4009:827::200e"