]> xenbits.xensource.com Git - libvirt.git/commitdiff
storage: unify permission formatting
authorMartin Kletzander <mkletzan@redhat.com>
Wed, 10 Dec 2014 12:54:10 +0000 (13:54 +0100)
committerMartin Kletzander <mkletzan@redhat.com>
Tue, 16 Dec 2014 14:47:56 +0000 (15:47 +0100)
Volume and pool formatting functions took different approaches to
unspecified uids/gids.  When unknown, it is always parsed as -1, but one
of the functions formatted it as unsigned int (wrong) and one as
int (better).  Due to that, our two of our XML files from tests cannot
be parsed on 32-bit machines.

RNG schema needs to be modified as well, but because both
storagepool.rng and storagevol.rng need same schema for permission
element, save some space by moving it to storagecommon.rng.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
docs/schemas/storagecommon.rng
docs/schemas/storagepool.rng
docs/schemas/storagevol.rng
src/conf/storage_conf.c
tests/storagevolxml2xmlin/vol-gluster-dir-neg-uid.xml [new file with mode: 0644]
tests/storagevolxml2xmlout/vol-gluster-dir-neg-uid.xml [new file with mode: 0644]
tests/storagevolxml2xmlout/vol-gluster-dir.xml
tests/storagevolxml2xmlout/vol-sheepdog.xml
tests/storagevolxml2xmltest.c

index 06b2f81fde59d97f410d830689c426c5b297442c..629505f14726c97b516d32d66847b11d1b9ce676 100644 (file)
     <notAllowed/>
   </define>
 
+  <define name='permissions'>
+    <optional>
+      <element name='permissions'>
+        <interleave>
+          <element name='mode'>
+            <ref name='octalMode'/>
+          </element>
+          <element name='owner'>
+            <choice>
+              <ref name='unsignedInt'/>
+              <value>-1</value>
+            </choice>
+          </element>
+          <element name='group'>
+            <choice>
+              <ref name='unsignedInt'/>
+              <value>-1</value>
+            </choice>
+          </element>
+          <optional>
+            <element name='label'>
+              <text/>
+            </element>
+          </optional>
+        </interleave>
+      </element>
+    </optional>
+  </define>
+
 </grammar>
index 0f05c5cc5f3e02f5e3e62331c1e1a7fc48b69ae0..db6ff49a0425e7b1ee17865ce1573003370f73f2 100644 (file)
@@ -3,6 +3,7 @@
 <grammar xmlns="http://relaxng.org/ns/structure/1.0"
     datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
   <include href='basictypes.rng'/>
+  <include href='storagecommon.rng'/>
   <start>
     <ref name='pool'/>
   </start>
     </interleave>
   </define>
 
-  <define name='permissions'>
-    <optional>
-      <element name='permissions'>
-        <interleave>
-          <element name='mode'>
-            <ref name='octalMode'/>
-          </element>
-          <element name='owner'>
-            <choice>
-              <ref name='unsignedInt'/>
-              <value>-1</value>
-            </choice>
-          </element>
-          <element name='group'>
-            <choice>
-              <ref name='unsignedInt'/>
-              <value>-1</value>
-            </choice>
-          </element>
-          <optional>
-            <element name='label'>
-              <text/>
-            </element>
-          </optional>
-        </interleave>
-      </element>
-    </optional>
-  </define>
-
   <define name='target'>
     <element name='target'>
       <interleave>
index 1b2d4cccad79e3120ce5c18d3c028f620a5f6958..7450547ffa055596f54a3663a80b2653fa6686c8 100644 (file)
     </interleave>
   </define>
 
-  <define name='permissions'>
-    <optional>
-      <element name='permissions'>
-        <interleave>
-          <element name='mode'>
-            <ref name='octalMode'/>
-          </element>
-          <element name='owner'>
-            <ref name='unsignedInt'/>
-          </element>
-          <element name='group'>
-            <ref name='unsignedInt'/>
-          </element>
-          <optional>
-            <element name='label'>
-              <text/>
-            </element>
-          </optional>
-        </interleave>
-      </element>
-    </optional>
-  </define>
-
   <define name='timestamps'>
     <optional>
       <element name='timestamps'>
index 3987470450fe9517ccd51847c67f3b3f6bab1f04..e1be06432d1e83658991904ff68033245ba660b3 100644 (file)
@@ -1203,7 +1203,6 @@ virStoragePoolDefFormat(virStoragePoolDefPtr def)
                           (int) def->target.perms.uid);
         virBufferAsprintf(&buf, "<group>%d</group>\n",
                           (int) def->target.perms.gid);
-
         virBufferEscapeString(&buf, "<label>%s</label>\n",
                               def->target.perms.label);
 
@@ -1527,10 +1526,10 @@ virStorageVolTargetDefFormat(virStorageVolOptionsPtr options,
 
         virBufferAsprintf(buf, "<mode>0%o</mode>\n",
                           def->perms->mode);
-        virBufferAsprintf(buf, "<owner>%u</owner>\n",
-                          (unsigned int) def->perms->uid);
-        virBufferAsprintf(buf, "<group>%u</group>\n",
-                          (unsigned int) def->perms->gid);
+        virBufferAsprintf(buf, "<owner>%d</owner>\n",
+                          (int) def->perms->uid);
+        virBufferAsprintf(buf, "<group>%d</group>\n",
+                          (int) def->perms->gid);
 
 
         virBufferEscapeString(buf, "<label>%s</label>\n",
diff --git a/tests/storagevolxml2xmlin/vol-gluster-dir-neg-uid.xml b/tests/storagevolxml2xmlin/vol-gluster-dir-neg-uid.xml
new file mode 100644 (file)
index 0000000..f188ceb
--- /dev/null
@@ -0,0 +1,17 @@
+<volume type='netdir'>
+  <name>dir</name>
+  <key>vol/dir</key>
+  <source>
+  </source>
+  <capacity unit='bytes'>0</capacity>
+  <allocation unit='bytes'>0</allocation>
+  <target>
+    <path>gluster://example.com/vol/dir</path>
+    <format type='dir'/>
+    <permissions>
+      <mode>0600</mode>
+      <owner>4294967295</owner>
+      <group>4294967295</group>
+    </permissions>
+  </target>
+</volume>
diff --git a/tests/storagevolxml2xmlout/vol-gluster-dir-neg-uid.xml b/tests/storagevolxml2xmlout/vol-gluster-dir-neg-uid.xml
new file mode 100644 (file)
index 0000000..538b31d
--- /dev/null
@@ -0,0 +1,17 @@
+<volume type='netdir'>
+  <name>dir</name>
+  <key>vol/dir</key>
+  <source>
+  </source>
+  <capacity unit='bytes'>0</capacity>
+  <allocation unit='bytes'>0</allocation>
+  <target>
+    <path>gluster://example.com/vol/dir</path>
+    <format type='dir'/>
+    <permissions>
+      <mode>0600</mode>
+      <owner>-1</owner>
+      <group>-1</group>
+    </permissions>
+  </target>
+</volume>
index f188cebd85629776af5111ca813c83f0b76f87c3..538b31d08f2d1d15dc98748cbc2a829fb64c4adb 100644 (file)
@@ -10,8 +10,8 @@
     <format type='dir'/>
     <permissions>
       <mode>0600</mode>
-      <owner>4294967295</owner>
-      <group>4294967295</group>
+      <owner>-1</owner>
+      <group>-1</group>
     </permissions>
   </target>
 </volume>
index e08e36c1cac30f41817d55ad3580a88c41931ea6..0a1f32c7877a3bf293e1ebbd63b1e3efad8347e6 100644 (file)
@@ -9,8 +9,8 @@
     <format type='unknown'/>
     <permissions>
       <mode>0600</mode>
-      <owner>4294967295</owner>
-      <group>4294967295</group>
+      <owner>-1</owner>
+      <group>-1</group>
     </permissions>
   </target>
 </volume>
index 234a2f1e8ca24a8c0255938277c26080485c9f73..cf4d401bd32ceec9f27cb6978245aec87b34d0e8 100644 (file)
@@ -122,6 +122,7 @@ mymain(void)
     DO_TEST("pool-logical", "vol-logical-backing");
     DO_TEST("pool-sheepdog", "vol-sheepdog");
     DO_TEST("pool-gluster", "vol-gluster-dir");
+    DO_TEST("pool-gluster", "vol-gluster-dir-neg-uid");
 
     return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
 }