[libvirt] [PATCH v2] docs, rng: Adjust storage pool name grammar checks

John Ferlan posted 1 patch 6 years, 6 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/20171004145558.12576-1-jferlan@redhat.com
docs/schemas/domaincommon.rng  | 2 +-
docs/schemas/storagecommon.rng | 8 ++++++++
docs/schemas/storagepool.rng   | 4 ++--
3 files changed, 11 insertions(+), 3 deletions(-)
[libvirt] [PATCH v2] docs, rng: Adjust storage pool name grammar checks
Posted by John Ferlan 6 years, 6 months ago
https://bugzilla.redhat.com/show_bug.cgi?id=1475250

It's possible to define and start a pool with a '.' in the
name; however, when trying to add a volume to a domain using
the storage pool source with a '.' in the storage pool name,
the domain RNG validation fails because RNG uses 'genericName'
which does not allow a '.' in the name.

Domain XML def parsing has a virXMLValidateAgainstSchema which
generates the error. The Storage Pool XML def parsing has no
call to virXMLValidateAgainstSchema. The only Storage Pool name
validation occurs in virStoragePoolDefParseXML to ensure the
name doesn't have a '/' in it and in storagePoolDefineXML to
call virXMLCheckIllegalChars using the same parameter "\n" as
qemuDomainDefineXMLFlags would check after the RNG check
could be succesful.

In order to resolve this, create a poolName definition in
storagecommon.rng that will mimic the domain name regex that
disallows a newline character, but add the "/" in the exclude
list. Then modify the pool and volume source name definitions
to key off that poolName.

Signed-off-by: John Ferlan <jferlan@redhat.com>
---

 v1: https://www.redhat.com/archives/libvir-list/2017-September/msg01037.html

 Change only to add '/' before the newline in poolName

 docs/schemas/domaincommon.rng  | 2 +-
 docs/schemas/storagecommon.rng | 8 ++++++++
 docs/schemas/storagepool.rng   | 4 ++--
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index bac371ea3..89515564f 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -1674,7 +1674,7 @@
     <optional>
       <element name="source">
         <attribute name="pool">
-          <ref name="genericName"/>
+          <ref name="poolName"/>
         </attribute>
         <attribute name="volume">
           <ref name="volName"/>
diff --git a/docs/schemas/storagecommon.rng b/docs/schemas/storagecommon.rng
index 717f3c603..edee1b084 100644
--- a/docs/schemas/storagecommon.rng
+++ b/docs/schemas/storagecommon.rng
@@ -6,6 +6,14 @@
   <!-- This schema is not designed for standalone use; another file
        must include both this file and basictypes.rng -->
 
+  <define name="poolName">
+    <data type="string">
+      <!-- Use literal newline instead of \n for bug in libxml2 2.7.6 -->
+      <param name="pattern">[^/
+]+</param>
+    </data>
+  </define>
+
   <define name='encryption'>
     <element name='encryption'>
       <attribute name='format'>
diff --git a/docs/schemas/storagepool.rng b/docs/schemas/storagepool.rng
index f0117bd69..52b2044be 100644
--- a/docs/schemas/storagepool.rng
+++ b/docs/schemas/storagepool.rng
@@ -209,7 +209,7 @@
     <interleave>
       <optional>
         <element name='name'>
-          <ref name='genericName'/>
+          <ref name='poolName'/>
         </element>
       </optional>
       <optional>
@@ -223,7 +223,7 @@
   <define name='commonmetadata'>
     <interleave>
       <element name='name'>
-        <ref name='genericName'/>
+        <ref name='poolName'/>
       </element>
       <optional>
         <element name='uuid'>
-- 
2.13.6

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v2] docs, rng: Adjust storage pool name grammar checks
Posted by Peter Krempa 6 years, 6 months ago
On Wed, Oct 04, 2017 at 10:55:58 -0400, John Ferlan wrote:
> https://bugzilla.redhat.com/show_bug.cgi?id=1475250
> 
> It's possible to define and start a pool with a '.' in the
> name; however, when trying to add a volume to a domain using
> the storage pool source with a '.' in the storage pool name,
> the domain RNG validation fails because RNG uses 'genericName'
> which does not allow a '.' in the name.
> 
> Domain XML def parsing has a virXMLValidateAgainstSchema which
> generates the error. The Storage Pool XML def parsing has no
> call to virXMLValidateAgainstSchema. The only Storage Pool name
> validation occurs in virStoragePoolDefParseXML to ensure the
> name doesn't have a '/' in it and in storagePoolDefineXML to
> call virXMLCheckIllegalChars using the same parameter "\n" as
> qemuDomainDefineXMLFlags would check after the RNG check
> could be succesful.
> 
> In order to resolve this, create a poolName definition in
> storagecommon.rng that will mimic the domain name regex that
> disallows a newline character, but add the "/" in the exclude
> list. Then modify the pool and volume source name definitions
> to key off that poolName.
> 
> Signed-off-by: John Ferlan <jferlan@redhat.com>
> ---
> 
>  v1: https://www.redhat.com/archives/libvir-list/2017-September/msg01037.html
> 
>  Change only to add '/' before the newline in poolName
> 
>  docs/schemas/domaincommon.rng  | 2 +-
>  docs/schemas/storagecommon.rng | 8 ++++++++
>  docs/schemas/storagepool.rng   | 4 ++--
>  3 files changed, 11 insertions(+), 3 deletions(-)

ACK
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list