Reject unspecified advertise addr on swarm init
Docker-DCO-1.1-Signed-off-by: Josh Hawn <josh.hawn@docker.com> (github: jlhawn)
(cherry picked from commit eeac871946
)
Signed-off-by: Victor Vieux <victorvieux@gmail.com>
This commit is contained in:
parent
a8c2248e6f
commit
98132f7db9
2 changed files with 11 additions and 4 deletions
|
@ -11,8 +11,8 @@ var (
|
|||
errNoIP = errors.New("could not find the system's IP address")
|
||||
errMustSpecifyListenAddr = errors.New("must specify a listening address because the address to advertise is not recognized as a system address, and a system's IP address to use could not be uniquely identified")
|
||||
errBadListenAddr = errors.New("listen address must be an IP address or network interface (with optional port number)")
|
||||
errBadAdvertiseAddr = errors.New("advertise address must be an IP address or network interface (with optional port number)")
|
||||
errBadDefaultAdvertiseAddr = errors.New("default advertise address must be an IP address or network interface (without a port number)")
|
||||
errBadAdvertiseAddr = errors.New("advertise address must be a non-zero IP address or network interface (with optional port number)")
|
||||
errBadDefaultAdvertiseAddr = errors.New("default advertise address must be a non-zero IP address or network interface (without a port number)")
|
||||
)
|
||||
|
||||
func resolveListenAddr(specifiedAddr string) (string, string, error) {
|
||||
|
@ -69,7 +69,7 @@ func (c *Cluster) resolveAdvertiseAddr(advertiseAddr, listenAddrPort string) (st
|
|||
}
|
||||
|
||||
// If it's not an interface, it must be an IP (for now)
|
||||
if net.ParseIP(advertiseHost) == nil {
|
||||
if ip := net.ParseIP(advertiseHost); ip == nil || ip.IsUnspecified() {
|
||||
return "", "", errBadAdvertiseAddr
|
||||
}
|
||||
|
||||
|
@ -89,7 +89,7 @@ func (c *Cluster) resolveAdvertiseAddr(advertiseAddr, listenAddrPort string) (st
|
|||
}
|
||||
|
||||
// If it's not an interface, it must be an IP (for now)
|
||||
if net.ParseIP(c.config.DefaultAdvertiseAddr) == nil {
|
||||
if ip := net.ParseIP(c.config.DefaultAdvertiseAddr); ip == nil || ip.IsUnspecified() {
|
||||
return "", "", errBadDefaultAdvertiseAddr
|
||||
}
|
||||
|
||||
|
|
|
@ -86,6 +86,13 @@ func (s *DockerSwarmSuite) TestSwarmInitIPv6(c *check.C) {
|
|||
c.Assert(out, checker.Contains, "Swarm: active")
|
||||
}
|
||||
|
||||
func (s *DockerSwarmSuite) TestSwarmInitUnspecifiedAdvertiseAddr(c *check.C) {
|
||||
d := s.AddDaemon(c, false, false)
|
||||
out, err := d.Cmd("swarm", "init", "--advertise-addr", "0.0.0.0")
|
||||
c.Assert(err, checker.NotNil)
|
||||
c.Assert(out, checker.Contains, "advertise address must be a non-zero IP address")
|
||||
}
|
||||
|
||||
func (s *DockerSwarmSuite) TestSwarmIncompatibleDaemon(c *check.C) {
|
||||
// init swarm mode and stop a daemon
|
||||
d := s.AddDaemon(c, true, true)
|
||||
|
|
Loading…
Reference in a new issue