fix: parse correctly kernel command line missing DNS config

If nameserver is missing, `net.ParseIP` parses it as `nil` `net.IP` and
later on this `<nil>` address is pushed to `resolv.conf`.

Signed-off-by: Andrey Smirnov <smirnov.andrey@gmail.com>
This commit is contained in:
Andrey Smirnov 2020-01-27 16:55:40 +00:00 committed by Andrey Smirnov
parent e495e29308
commit cebd88f77c
2 changed files with 21 additions and 2 deletions

View File

@ -225,10 +225,13 @@ func buildKernelOptions(cmdline string) (name string, opts []nic.Option) {
// case 6:
// Primary DNS Resolver
case 7:
resolvers = append(resolvers, net.ParseIP(field))
fallthrough
// Secondary DNS Resolver
case 8:
resolvers = append(resolvers, net.ParseIP(field))
nameserverIP := net.ParseIP(field)
if nameserverIP != nil {
resolvers = append(resolvers, nameserverIP)
}
}
}
// NTP server

View File

@ -52,6 +52,22 @@ func (suite *NetconfSuite) TestKernelNetconf() {
suite.Assert().Equal(len(addr.Routes()), 1)
}
func (suite *NetconfSuite) TestKernelNetconfIncomplete() {
name, opts := buildKernelOptions("1.1.1.1::3.3.3.3:255.255.255.0::eth0:none:::")
iface, err := nic.New(opts...)
suite.Require().NoError(err)
suite.Assert().Equal(iface.Name, name)
suite.Assert().Equal(len(iface.AddressMethod), 1)
addr := iface.AddressMethod[0]
suite.Assert().Equal(addr.Name(), "static")
suite.Assert().Equal(addr.Hostname(), "")
suite.Assert().Equal(addr.Address().IP, net.ParseIP("1.1.1.1"))
suite.Assert().Len(addr.Resolvers(), 0)
suite.Assert().Equal(len(addr.Routes()), 1)
}
func sampleConfig() []machine.Device {
return []machine.Device{
{