mirror of https://github.com/docker/docs.git
Merge pull request #2038 from dgageot/brownoxford-validate-cidr
Additional validation on virtualbox-hostonly-cidr
This commit is contained in:
commit
97fcc446d7
|
@ -45,6 +45,7 @@ const (
|
|||
var (
|
||||
ErrUnableToGenerateRandomIP = errors.New("unable to generate random IP")
|
||||
ErrMustEnableVTX = errors.New("This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory.")
|
||||
ErrNetworkAddrCidr = errors.New("host-only cidr must be specified with a host address, not a network address")
|
||||
)
|
||||
|
||||
type Driver struct {
|
||||
|
@ -658,19 +659,17 @@ func (d *Driver) setupHostOnlyNetwork(machineName string) error {
|
|||
hostOnlyCIDR = defaultHostOnlyCIDR
|
||||
}
|
||||
|
||||
ip, network, err := net.ParseCIDR(hostOnlyCIDR)
|
||||
|
||||
ip, network, err := parseAndValidateCIDR(hostOnlyCIDR)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
nAddr := network.IP.To4()
|
||||
|
||||
dhcpAddr, err := getRandomIPinSubnet(network.IP)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
nAddr := network.IP.To4()
|
||||
lowerDHCPIP := net.IPv4(nAddr[0], nAddr[1], nAddr[2], byte(100))
|
||||
upperDHCPIP := net.IPv4(nAddr[0], nAddr[1], nAddr[2], byte(254))
|
||||
|
||||
|
@ -695,6 +694,20 @@ func (d *Driver) setupHostOnlyNetwork(machineName string) error {
|
|||
"--cableconnected2", "on")
|
||||
}
|
||||
|
||||
func parseAndValidateCIDR(hostOnlyCIDR string) (net.IP, *net.IPNet, error) {
|
||||
ip, network, err := net.ParseCIDR(hostOnlyCIDR)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
networkAddress := network.IP.To4()
|
||||
if ip.Equal(networkAddress) {
|
||||
return nil, nil, ErrNetworkAddrCidr
|
||||
}
|
||||
|
||||
return ip, network, nil
|
||||
}
|
||||
|
||||
// createDiskImage makes a disk image at dest with the given size in MB. If r is
|
||||
// not nil, it will be read as a raw disk image to convert from.
|
||||
func createDiskImage(dest string, size int, r io.Reader) error {
|
||||
|
|
|
@ -152,6 +152,31 @@ func TestGetIPErrors(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestParseValidCIDR(t *testing.T) {
|
||||
ip, network, err := parseAndValidateCIDR("192.168.100.1/24")
|
||||
|
||||
assert.Equal(t, "192.168.100.1", ip.String())
|
||||
assert.Equal(t, "192.168.100.0", network.IP.String())
|
||||
assert.Equal(t, "ffffff00", network.Mask.String())
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestInvalidCIDR(t *testing.T) {
|
||||
ip, network, err := parseAndValidateCIDR("192.168.100.1")
|
||||
|
||||
assert.EqualError(t, err, "invalid CIDR address: 192.168.100.1")
|
||||
assert.Nil(t, ip)
|
||||
assert.Nil(t, network)
|
||||
}
|
||||
|
||||
func TestInvalidNetworkIpCIDR(t *testing.T) {
|
||||
ip, network, err := parseAndValidateCIDR("192.168.100.0/24")
|
||||
|
||||
assert.Equal(t, ErrNetworkAddrCidr, err)
|
||||
assert.Nil(t, ip)
|
||||
assert.Nil(t, network)
|
||||
}
|
||||
|
||||
func newTestDriver(name string) *Driver {
|
||||
return NewDriver(name, "")
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue