]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Blank out invalid interface names with escaped letters etc.
authorStefan Berger <stefanb@us.ibm.com>
Wed, 31 Mar 2010 14:22:10 +0000 (10:22 -0400)
committerStefan Berger <stefanb@us.ibm.com>
Wed, 31 Mar 2010 14:22:10 +0000 (10:22 -0400)
Check that interface names only contain valid characters. Blank them out
otherwise.
Valid characters in this code are currently a-z,A-Z,0-9, '-' and '_'.

src/conf/domain_conf.c
src/conf/domain_conf.h

index 66aa53ec3cd01e1c34e38c320a79ee87bf5ad921..bf4e657859bc63ad53b0dd24aaaeed17fc4e6a68 100644 (file)
@@ -1776,6 +1776,11 @@ cleanup:
 }
 
 
+static bool
+isValidIfname(const char *ifname) {
+    return (strspn(ifname, VALID_IFNAME_CHARS) == strlen(ifname));
+}
+
 
 /* Parse the XML definition for a network interface
  * @param node XML nodeset to parse for net definition
@@ -1859,8 +1864,10 @@ virDomainNetDefParseXML(virCapsPtr caps,
                        xmlStrEqual(cur->name, BAD_CAST "target")) {
                 ifname = virXMLPropString(cur, "dev");
                 if ((ifname != NULL) &&
-                    (STRPREFIX((const char*)ifname, "vnet"))) {
+                    ((STRPREFIX((const char*)ifname, "vnet")) ||
+                     (!isValidIfname(ifname)))) {
                     /* An auto-generated target name, blank it out */
+                    /* blank out invalid interface names */
                     VIR_FREE(ifname);
                 }
             } else if ((script == NULL) &&
index ed1a4ad7f8b4ca72293b0fd562a5ca6a0bc3c566..69b64d649e97f333390edc46f94fb12c6af964c8 100644 (file)
@@ -297,6 +297,9 @@ struct _virDomainNetDef {
     virNWFilterHashTablePtr filterparams;
 };
 
+# define VALID_IFNAME_CHARS \
+ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_"
+
 enum virDomainChrTargetType {
     VIR_DOMAIN_CHR_TARGET_TYPE_NULL = 0,
     VIR_DOMAIN_CHR_TARGET_TYPE_MONITOR,