Skip to content

Commit 9bf60d0

Browse files
authored
Merge pull request kubernetes#129219 from danwinship/networkdevicedata-validation
Require canonicalization of NetworkDeviceData IPs
2 parents f67b346 + 2636aa3 commit 9bf60d0

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

pkg/apis/resource/validation/validation.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -802,17 +802,24 @@ func validateNetworkDeviceData(networkDeviceData *resource.NetworkDeviceData, fl
802802

803803
allErrs = append(allErrs, validateSet(networkDeviceData.IPs, maxIPs,
804804
func(address string, fldPath *field.Path) field.ErrorList {
805-
return validation.IsValidCIDR(fldPath, address)
806-
},
807-
func(address string) (string, string) {
808805
// reformat CIDR to handle different ways IPs can be written
809806
// (e.g. 2001:db8::1/64 == 2001:0db8::1/64)
810807
ip, ipNet, err := netutils.ParseCIDRSloppy(address)
811808
if err != nil {
812-
return "", "" // will fail at IsValidCIDR
809+
// must fail
810+
return validation.IsValidCIDR(fldPath, address)
813811
}
814812
maskSize, _ := ipNet.Mask.Size()
815-
return fmt.Sprintf("%s/%d", ip.String(), maskSize), ""
813+
canonical := fmt.Sprintf("%s/%d", ip.String(), maskSize)
814+
if address != canonical {
815+
return field.ErrorList{
816+
field.Invalid(fldPath, address, fmt.Sprintf("must be in canonical form (%s)", canonical)),
817+
}
818+
}
819+
return nil
820+
},
821+
func(address string) (string, string) {
822+
return address, ""
816823
},
817824
fldPath.Child("ips"))...)
818825
return allErrs

pkg/apis/resource/validation/validation_resourceclaim_test.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1040,7 +1040,7 @@ func TestValidateClaimStatusUpdate(t *testing.T) {
10401040
NetworkData: &resource.NetworkDeviceData{
10411041
IPs: []string{
10421042
"2001:db8::1/64",
1043-
"2001:0db8::1/64",
1043+
"2001:db8::1/64",
10441044
},
10451045
},
10461046
},
@@ -1059,6 +1059,8 @@ func TestValidateClaimStatusUpdate(t *testing.T) {
10591059
field.TooLong(field.NewPath("status", "devices").Index(0).Child("networkData", "interfaceName"), "", interfaceNameMaxLength),
10601060
field.TooLong(field.NewPath("status", "devices").Index(0).Child("networkData", "hardwareAddress"), "", hardwareAddressMaxLength),
10611061
field.Invalid(field.NewPath("status", "devices").Index(0).Child("networkData", "ips").Index(0), "300.9.8.0/24", "must be a valid CIDR value, (e.g. 10.9.8.0/24 or 2001:db8::/64)"),
1062+
field.Invalid(field.NewPath("status", "devices").Index(0).Child("networkData", "ips").Index(1), "010.009.008.000/24", "must be in canonical form (10.9.8.0/24)"),
1063+
field.Invalid(field.NewPath("status", "devices").Index(0).Child("networkData", "ips").Index(2), "2001:0db8::1/64", "must be in canonical form (2001:db8::1/64)"),
10621064
},
10631065
oldClaim: func() *resource.ResourceClaim { return validAllocatedClaim }(),
10641066
update: func(claim *resource.ResourceClaim) *resource.ResourceClaim {
@@ -1072,6 +1074,8 @@ func TestValidateClaimStatusUpdate(t *testing.T) {
10721074
HardwareAddress: strings.Repeat("x", hardwareAddressMaxLength+1),
10731075
IPs: []string{
10741076
"300.9.8.0/24",
1077+
"010.009.008.000/24",
1078+
"2001:0db8::1/64",
10751079
},
10761080
},
10771081
},
@@ -1169,7 +1173,7 @@ func TestValidateClaimStatusUpdate(t *testing.T) {
11691173
NetworkData: &resource.NetworkDeviceData{
11701174
IPs: []string{
11711175
"2001:db8::1/64",
1172-
"2001:0db8::1/64",
1176+
"2001:db8::1/64",
11731177
},
11741178
},
11751179
},

0 commit comments

Comments
 (0)