]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/snap_schedule: validate fs name argument
authorMilind Changire <mchangir@redhat.com>
Tue, 26 Apr 2022 03:49:51 +0000 (09:19 +0530)
committerMilind Changire <mchangir@redhat.com>
Tue, 21 Feb 2023 02:05:22 +0000 (07:35 +0530)
Validate fs name argument for all commands.

Fixes: https://tracker.ceph.com/issues/54560
Signed-off-by: Milind Changire <mchangir@redhat.com>
(cherry picked from commit 483a97830bd918a2be83021edeedf9f8a2fc54f8)

src/pybind/mgr/snap_schedule/module.py

index a068b4ac31d8c9b6906ac19d6fe04deba4ed0d7e..bb9f6c974ab211177b8740c9e34adaba4c700180 100644 (file)
@@ -58,6 +58,9 @@ class Module(MgrModule):
             raise CephfsConnectionException(
                 -errno.ENOENT, "no filesystem found")
 
+    def has_fs(self, fs_name: str) -> bool:
+        return fs_name in self.client.get_all_filesystems()
+
     def serve(self) -> None:
         self._initialized.set()
 
@@ -75,6 +78,8 @@ class Module(MgrModule):
         List current snapshot schedules
         '''
         use_fs = fs if fs else self.default_fs
+        if not self.has_fs(use_fs):
+            return -errno.EINVAL, '', f"no such filesystem: {use_fs}"
         try:
             ret_scheds = self.client.get_snap_schedules(use_fs, path)
         except CephfsConnectionException as e:
@@ -95,6 +100,8 @@ class Module(MgrModule):
         '''
         try:
             use_fs = fs if fs else self.default_fs
+            if not self.has_fs(use_fs):
+                return -errno.EINVAL, '', f"no such filesystem: {use_fs}"
             scheds = self.client.list_snap_schedules(use_fs, path, recursive)
             self.log.debug(f'recursive is {recursive}')
         except CephfsConnectionException as e:
@@ -124,6 +131,8 @@ class Module(MgrModule):
         '''
         try:
             use_fs = fs if fs else self.default_fs
+            if not self.has_fs(use_fs):
+                return -errno.EINVAL, '', f"no such filesystem: {use_fs}"
             abs_path = self.resolve_subvolume_path(use_fs, subvol, path)
             self.client.store_snap_schedule(use_fs,
                                             abs_path,
@@ -154,6 +163,8 @@ class Module(MgrModule):
         '''
         try:
             use_fs = fs if fs else self.default_fs
+            if not self.has_fs(use_fs):
+                return -errno.EINVAL, '', f"no such filesystem: {use_fs}"
             abs_path = self.resolve_subvolume_path(use_fs, subvol, path)
             self.client.rm_snap_schedule(use_fs, abs_path, repeat, start)
         except CephfsConnectionException as e:
@@ -174,6 +185,8 @@ class Module(MgrModule):
         '''
         try:
             use_fs = fs if fs else self.default_fs
+            if not self.has_fs(use_fs):
+                return -errno.EINVAL, '', f"no such filesystem: {use_fs}"
             abs_path = self.resolve_subvolume_path(use_fs, subvol, path)
             self.client.add_retention_spec(use_fs, abs_path,
                                           retention_spec_or_period,
@@ -196,6 +209,8 @@ class Module(MgrModule):
         '''
         try:
             use_fs = fs if fs else self.default_fs
+            if not self.has_fs(use_fs):
+                return -errno.EINVAL, '', f"no such filesystem: {use_fs}"
             abs_path = self.resolve_subvolume_path(use_fs, subvol, path)
             self.client.rm_retention_spec(use_fs, abs_path,
                                           retention_spec_or_period,
@@ -218,6 +233,8 @@ class Module(MgrModule):
         '''
         try:
             use_fs = fs if fs else self.default_fs
+            if not self.has_fs(use_fs):
+                return -errno.EINVAL, '', f"no such filesystem: {use_fs}"
             abs_path = self.resolve_subvolume_path(use_fs, subvol, path)
             self.client.activate_snap_schedule(use_fs, abs_path, repeat, start)
         except CephfsConnectionException as e:
@@ -238,6 +255,8 @@ class Module(MgrModule):
         '''
         try:
             use_fs = fs if fs else self.default_fs
+            if not self.has_fs(use_fs):
+                return -errno.EINVAL, '', f"no such filesystem: {use_fs}"
             abs_path = self.resolve_subvolume_path(use_fs, subvol, path)
             self.client.deactivate_snap_schedule(use_fs, abs_path, repeat, start)
         except CephfsConnectionException as e: