Merge lp:~rvb/maas/bug-network-validation into lp:~maas-committers/maas/trunk

Proposed by Raphaël Badin
Status: Merged
Approved by: Raphaël Badin
Approved revision: no longer in the source branch.
Merged at revision: 3490
Proposed branch: lp:~rvb/maas/bug-network-validation
Merge into: lp:~maas-committers/maas/trunk
Diff against target: 66 lines (+43/-2)
2 files modified
src/maasserver/models/network.py (+13/-2)
src/maasserver/tests/test_forms_network.py (+30/-0)
To merge this branch: bzr merge lp:~rvb/maas/bug-network-validation
Reviewer Review Type Date Requested Status
Blake Rouse (community) Approve
Review via email: mp+247445@code.launchpad.net

Commit message

Cope with malformed IP and netmask fields.

To post a comment you must log in.
Revision history for this message
Blake Rouse (blake-rouse) wrote :

Looks good.

The fix worked on my machine.

review: Approve
Revision history for this message
Raphaël Badin (rvb) wrote :

Thanks for review Blake!

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/maasserver/models/network.py'
2--- src/maasserver/models/network.py 2014-11-20 23:15:21 +0000
3+++ src/maasserver/models/network.py 2015-01-23 16:57:59 +0000
4@@ -330,8 +330,19 @@
5 """Validator for `vlan_tag`."""
6 # Work out whether we're using IPv6 or v4. If we're using mixed
7 # v6/v4 values, bail out.
8- ip_address = IPAddress(self.ip)
9- netmask_as_ip = IPAddress(self.netmask)
10+ try:
11+ ip_address = IPAddress(self.ip)
12+ except AddrFormatError as e:
13+ # The failure will be reported by the validation performed on
14+ # the 'ip' field by MAASIPAddressField.
15+ return
16+ try:
17+ netmask_as_ip = IPAddress(self.netmask)
18+ except AddrFormatError as e:
19+ # The failure will be reported by the validation performed on
20+ # the 'netmask' field by MAASIPAddressField.
21+ return
22+
23 if ip_address.version == 6 and netmask_as_ip.version == 6:
24 check_ip = 'fc00:1:1::'
25 elif ip_address.version == 4 and netmask_as_ip.version == 4:
26
27=== modified file 'src/maasserver/tests/test_forms_network.py'
28--- src/maasserver/tests/test_forms_network.py 2015-01-05 14:11:03 +0000
29+++ src/maasserver/tests/test_forms_network.py 2015-01-23 16:57:59 +0000
30@@ -51,6 +51,36 @@
31 network_obj = Network.objects.get(name=name)
32 self.assertAttributes(network_obj, definition)
33
34+ def test_network_creation_fails_if_empty_IP(self):
35+ network = factory.make_ipv4_network()
36+ name = factory.make_name('network')
37+ definition = {
38+ 'name': name,
39+ 'description': factory.make_string(),
40+ 'ip': "",
41+ 'netmask': "%s" % network.netmask,
42+ 'vlan_tag': factory.make_vlan_tag(),
43+ }
44+ form = NetworkForm(data=definition)
45+ self.assertFalse(form.is_valid())
46+ self.assertEqual(
47+ ["This field is required."], form.errors['ip'])
48+
49+ def test_network_creation_fails_if_empty_netmask(self):
50+ network = factory.make_ipv4_network()
51+ name = factory.make_name('network')
52+ definition = {
53+ 'name': name,
54+ 'description': factory.make_string(),
55+ 'ip': "%s" % network.cidr.ip,
56+ 'netmask': "",
57+ 'vlan_tag': factory.make_vlan_tag(),
58+ }
59+ form = NetworkForm(data=definition)
60+ self.assertFalse(form.is_valid())
61+ self.assertEqual(
62+ ["This field is required."], form.errors['netmask'])
63+
64 def test_updates_network(self):
65 network = factory.make_Network()
66 new_description = factory.make_string()