interface: check ip address format

Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
This commit is contained in:
Chen Hanxiao 2014-03-31 22:25:36 +08:00
parent 7f802e287c
commit 89c45af26d
3 changed files with 12 additions and 3 deletions

View File

@ -15,7 +15,7 @@
</protocol>
<protocol family="ipv6">
<ip address="fe99::215:58ff:fe6e:5" prefix="32"/>
<ip address="foobar" prefix="38"/>
<ip address="2002::" prefix="38"/>
<route gateway="1.2.3.4"/>
</protocol>
</interface>

View File

@ -965,7 +965,7 @@ class XMLParseTest(unittest.TestCase):
check("autoconf", True, False)
check = self._make_checker(iface.protocols[1].ips[1])
check("address", "fe80::215:58ff:fe6e:5", "foobar")
check("address", "fe80::215:58ff:fe6e:5", "2002::")
check("prefix", 64, 38)
# Remove a child interface, verify it's data remains intact

View File

@ -23,6 +23,7 @@ Classes for building and installing libvirt interface xml
import logging
import libvirt
import ipaddr
from virtinst import util
from virtinst.xmlbuilder import XMLBuilder, XMLChildProperty, XMLProperty
@ -32,7 +33,15 @@ class _IPAddress(XMLBuilder):
_XML_PROP_ORDER = ["address", "prefix"]
_XML_ROOT_NAME = "ip"
address = XMLProperty("./@address")
######################
# Validation helpers #
######################
def _validate_ipaddr(self, addr):
ipaddr.IPAddress(addr)
return addr
address = XMLProperty("./@address", validate_cb=_validate_ipaddr)
prefix = XMLProperty("./@prefix", is_int=True)