]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/volumes: check for string values in uid/gid
authorJos Collin <jcollin@redhat.com>
Tue, 3 Dec 2019 09:12:28 +0000 (14:42 +0530)
committerJos Collin <jcollin@redhat.com>
Tue, 10 Dec 2019 05:52:23 +0000 (11:22 +0530)
chown allows strings as per bbbfb44453f204286a8ff312349d42afde5fced6,
which caused this error. Eventhough uid/gid are input as CephInt, the
qa tests can pass in only string values to _fs_cmd. So try converting
the incoming uid/gid to int in create_subvolume and create_group.
It might be a valid string.

Fixes: https://tracker.ceph.com/issues/43038
Signed-off-by: Jos Collin <jcollin@redhat.com>
(cherry picked from commit 4c1029bc083b44d87f01f4e503d3ad64a568df52)

src/pybind/mgr/volumes/fs/subvolume.py

index 9705a2473ae57bbca7a4354a8029eebf61268de6..386452038945510f25b235aed6677ea3d9987f32 100644 (file)
@@ -109,13 +109,23 @@ class SubVolume(object):
             groupstat = self.fs.stat(spec.group_path)
             if uid is None:
                 uid = int(groupstat.st_uid)
-            elif uid < 0:
-                raise VolumeException(-errno.EINVAL, "Provide a valid uid")
+            else:
+                try:
+                    uid = int(uid)
+                    if uid < 0:
+                        raise ValueError
+                except ValueError:
+                    raise VolumeException(-errno.EINVAL, "Invalid uid")
 
             if gid is None:
                 gid = int(groupstat.st_gid)
-            elif gid < 0:
-                raise VolumeException(-errno.EINVAL, "Provide a valid gid")
+            else:
+                try:
+                    gid = int(gid)
+                    if gid < 0:
+                        raise ValueError
+                except ValueError:
+                    raise VolumeException(-errno.EINVAL, "Invalid gid")
 
             try:
                 self.fs.chown(subvolpath, uid, gid)
@@ -257,13 +267,23 @@ class SubVolume(object):
 
             if uid is None:
                 uid = 0
-            elif uid < 0:
-                raise VolumeException(-errno.EINVAL, "Provide a valid uid")
+            else:
+                try:
+                    uid = int(uid)
+                    if uid < 0:
+                        raise ValueError
+                except ValueError:
+                    raise VolumeException(-errno.EINVAL, "Invalid uid")
 
             if gid is None:
                 gid = 0
-            elif gid < 0:
-                raise VolumeException(-errno.EINVAL, "Provide a valid gid")
+            else:
+                try:
+                    gid = int(gid)
+                    if gid < 0:
+                        raise ValueError
+                except ValueError:
+                    raise VolumeException(-errno.EINVAL, "Invalid gid")
 
             try:
                 self.fs.chown(path, uid, gid)