[pykickstart][rhel7-branch/master][PATCH 1/2] Validate network interface name when parsing the kickstart (#1081982)

Martin Kolman mkolman at redhat.com
Mon Sep 8 15:14:12 UTC 2014


Resolves: rhbz#1081982
Signed-off-by: Martin Kolman <mkolman at redhat.com>
---
 pykickstart/commands/network.py | 42 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)

diff --git a/pykickstart/commands/network.py b/pykickstart/commands/network.py
index 7b1341c..d48aec2 100644
--- a/pykickstart/commands/network.py
+++ b/pykickstart/commands/network.py
@@ -523,3 +523,45 @@ class RHEL7_Network(F20_Network):
         op.add_option("--interfacename", dest="interfacename", action="store",
                 default="")
         return op
+
+    def parse(self, args):
+        # call the overridden command to do it's job first
+        retval = F20_Network.parse(self, args)
+
+        # validate the device name
+        # (for reference see the NetworkManager source code:
+        #  NetworkManager/src/settings/plugins/ifcfg-rh/reader.c
+        #  and the make_vlan_setting function)
+
+        min_vlan_id = 0
+        max_vlan_id = 4095
+        vlan_id = None
+
+        # if it contains '.', vlan id should follow (eg 'ens7.171', 'mydev.171')
+        split_name = retval.interfacename.split(".", 1)
+        if len(split_name) > 1:
+            # 'vlan' can't be followed by a '.'
+            if split_name[0] == "vlan":
+                raise KickstartValueError(formatErrorMsg(self.lineno,
+                    msg=_("for network --interfacename 'vlan' can't be followed by a '.'")))
+            try:
+                vlan_id = int(split_name[1])
+            except ValueError:
+                raise KickstartValueError(formatErrorMsg(self.lineno,
+                    msg=_("if network --interfacename contains a '.', valid vlan id should follow")))
+
+        # if it starts with 'vlan', vlan id should follow ('vlan171')
+        if retval.interfacename.startswith("vlan"):
+            try:
+                vlan_id = int(retval.interfacename.strip("vlan"))
+            except ValueError:
+                raise KickstartValueError(formatErrorMsg(self.lineno,
+                    msg=_("if network --interfacename starts with 'vlan', valid vlan id should follow")))
+
+        # check if the vlan id is in range
+        if vlan_id is not None:
+            if not(min_vlan_id <= vlan_id <= max_vlan_id):
+                raise KickstartValueError(formatErrorMsg(self.lineno,
+                        msg=_("vlan id out of range")))
+
+        return retval
-- 
1.9.3



More information about the anaconda-patches mailing list