[PATCH v2 4/9] domain_conf.c: move vendor, product and tray checks to validate callback

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The 'tray' check isn't a XML parse specific code and can be pushed
to the validate callback, in virDomainDiskDefValidate().

'vendor' and 'product' string sizes are already checked by the
domaincommon.rng schema, but can be of use in the validate callback
since not all scenarios will go through the XML parsing.

Signed-off-by: Daniel Henrique Barboza <danielhb413@xxxxxxxxx>
---
 src/conf/domain_conf.c | 47 ++++++++++++++++++++++--------------------
 1 file changed, 25 insertions(+), 22 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index bc09577e39..e9bafd189f 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -6115,6 +6115,9 @@ virSecurityDeviceLabelDefValidateXML(virSecurityDeviceLabelDefPtr *seclabels,
 }
 
 
+#define VENDOR_LEN  8
+#define PRODUCT_LEN 16
+
 static int
 virDomainDiskDefValidate(const virDomainDef *def,
                          const virDomainDiskDef *disk)
@@ -6191,6 +6194,28 @@ virDomainDiskDefValidate(const virDomainDef *def,
             return -1;
     }
 
+    if (disk->tray_status &&
+        disk->device != VIR_DOMAIN_DISK_DEVICE_FLOPPY &&
+        disk->device != VIR_DOMAIN_DISK_DEVICE_CDROM) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("tray is only valid for cdrom and floppy"));
+        return -1;
+    }
+
+    if (disk->vendor && strlen(disk->vendor) > VENDOR_LEN) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                       _("disk vendor is more than %d characters"),
+                       VENDOR_LEN);
+        return -1;
+    }
+
+    if (disk->product && strlen(disk->product) > PRODUCT_LEN) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                       _("disk product is more than %d characters"),
+                       PRODUCT_LEN);
+        return -1;
+    }
+
     return 0;
 }
 
@@ -10496,9 +10521,6 @@ virDomainDiskDefParsePrivateData(xmlXPathContextPtr ctxt,
 }
 
 
-#define VENDOR_LEN  8
-#define PRODUCT_LEN 16
-
 static virDomainDiskDefPtr
 virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
                          xmlNodePtr node,
@@ -10673,12 +10695,6 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
             if (!(vendor = virXMLNodeContentString(cur)))
                 return NULL;
 
-            if (strlen(vendor) > VENDOR_LEN) {
-                virReportError(VIR_ERR_XML_ERROR, "%s",
-                               _("disk vendor is more than 8 characters"));
-                return NULL;
-            }
-
             if (!virStringIsPrintable(vendor)) {
                 virReportError(VIR_ERR_XML_ERROR, "%s",
                                _("disk vendor is not printable string"));
@@ -10689,12 +10705,6 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
             if (!(product = virXMLNodeContentString(cur)))
                 return NULL;
 
-            if (strlen(product) > PRODUCT_LEN) {
-                virReportError(VIR_ERR_XML_ERROR, "%s",
-                               _("disk product is more than 16 characters"));
-                return NULL;
-            }
-
             if (!virStringIsPrintable(product)) {
                 virReportError(VIR_ERR_XML_ERROR, "%s",
                                _("disk product is not printable string"));
@@ -10825,13 +10835,6 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
                            _("unknown disk tray status '%s'"), tray);
             return NULL;
         }
-
-        if (def->device != VIR_DOMAIN_DISK_DEVICE_FLOPPY &&
-            def->device != VIR_DOMAIN_DISK_DEVICE_CDROM) {
-            virReportError(VIR_ERR_XML_ERROR, "%s",
-                           _("tray is only valid for cdrom and floppy"));
-            return NULL;
-        }
     }
 
     if (removable) {
-- 
2.26.2




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux