diff --git a/lib/facter/resolvers/hostname.rb b/lib/facter/resolvers/hostname.rb index eba8782db1..53c7f9ac3c 100644 --- a/lib/facter/resolvers/hostname.rb +++ b/lib/facter/resolvers/hostname.rb @@ -68,9 +68,9 @@ def hostname_and_no_domain?(hostname, domain) def read_domain file_content = Facter::Util::FileHelper.safe_read('/etc/resolv.conf') - if file_content =~ /^domain\s+(\S+)/ + if file_content =~ /^domain\s+([^.]\S+)/ Regexp.last_match(1) - elsif file_content =~ /^search\s+(\S+)/ + elsif file_content =~ /^search\s+([^.]\S+)/ Regexp.last_match(1) end end diff --git a/lib/facter/resolvers/linux/hostname.rb b/lib/facter/resolvers/linux/hostname.rb index e2dba54eb6..32e0688559 100644 --- a/lib/facter/resolvers/linux/hostname.rb +++ b/lib/facter/resolvers/linux/hostname.rb @@ -96,9 +96,9 @@ def hostname_and_no_domain?(hostname, domain) def read_domain file_content = Facter::Util::FileHelper.safe_read('/etc/resolv.conf') - if file_content =~ /^domain\s+(\S+)/ + if file_content =~ /^domain\s+([^.]\S+)/ Regexp.last_match(1) - elsif file_content =~ /^search\s+(\S+)/ + elsif file_content =~ /^search\s+([^.]\S+)/ Regexp.last_match(1) end end diff --git a/spec/facter/resolvers/linux/hostname_spec.rb b/spec/facter/resolvers/linux/hostname_spec.rb index a69bdebf8e..f3ee0e77fc 100644 --- a/spec/facter/resolvers/linux/hostname_spec.rb +++ b/spec/facter/resolvers/linux/hostname_spec.rb @@ -79,6 +79,30 @@ it_behaves_like 'detects values' end + + context 'when /etc/resolv.conf has "search ."' do + let(:resolv_conf) { "search .\n" } + let(:domain) { nil } + let(:fqdn) { hostname } + + it_behaves_like 'detects values' + end + + context 'when /etc/resolv.conf has "search ." with multiple entires' do + let(:resolv_conf) { 'search . foo.bar' } + let(:domain) { nil } + let(:fqdn) { hostname } + + it_behaves_like 'detects values' + end + + context 'when /etc/resolv.conf has "search" with multiple entires' do + let(:resolv_conf) { 'search foo.bar example.com' } + let(:domain) { 'foo.bar' } + let(:fqdn) { "#{hostname}.#{domain}" } + + it_behaves_like 'detects values' + end end context 'when FFI is not installed' do