]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/OSDMonitor: Restrict pool names beggining with a dot 44911/head
authorMatan Breizman <mbreizma@redhat.com>
Sat, 5 Feb 2022 16:50:17 +0000 (16:50 +0000)
committerMatan Breizman <mbreizma@redhat.com>
Sun, 13 Feb 2022 08:45:09 +0000 (08:45 +0000)
Signed-off-by: Matan Breizman <mbreizma@redhat.com>
src/mon/MonCommands.h
src/mon/OSDMonitor.cc
src/pybind/mgr/mgr_module.py
src/pybind/mgr/nfs/cluster.py

index 31a2d11aa49baa4e86319dbe151a2ccd3cdfa8fe..67d67b6e37756abd364c349e46b06731ff0c2f3f 100644 (file)
@@ -1061,7 +1061,8 @@ COMMAND("osd pool create "
        "name=autoscale_mode,type=CephChoices,strings=on|off|warn,req=false "
        "name=bulk,type=CephBool,req=false "
        "name=target_size_bytes,type=CephInt,range=0,req=false "
-       "name=target_size_ratio,type=CephFloat,range=0|1,req=false",\
+       "name=target_size_ratio,type=CephFloat,range=0|1,req=false "\
+       "name=yes_i_really_mean_it,type=CephBool,req=false",
        "create pool", "osd", "rw")
 COMMAND_WITH_FLAG("osd pool delete "
        "name=pool,type=CephPoolname "
@@ -1080,7 +1081,8 @@ COMMAND("osd pool rm "
        "osd", "rw")
 COMMAND("osd pool rename "
        "name=srcpool,type=CephPoolname "
-       "name=destpool,type=CephPoolname",
+       "name=destpool,type=CephPoolname "
+       "name=yes_i_really_mean_it,type=CephBool,req=false",
        "rename <srcpool> to <destpool>", "osd", "rw")
 COMMAND("osd pool get "
        "name=pool,type=CephPoolname "
index 3e59384a389018d2c576aff1fbefff1aec94648e..7a62573897d6c5549bbb05e01f2a0917df385614 100644 (file)
@@ -12829,6 +12829,14 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
 
     string poolstr;
     cmd_getval(cmdmap, "pool", poolstr);
+    bool confirm = false;
+    //confirmation may be set to true only by internal operations.
+    cmd_getval(cmdmap, "yes_i_really_mean_it", confirm);
+    if (poolstr[0] == '.' && !confirm) {
+      ss << "pool names beginning with . are not allowed";
+      err = 0;
+      goto reply;
+    }
     int64_t pool_id = osdmap.lookup_pg_pool_name(poolstr);
     if (pool_id >= 0) {
       const pg_pool_t *p = osdmap.get_pg_pool(pool_id);
@@ -13056,7 +13064,14 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     cmd_getval(cmdmap, "destpool", destpoolstr);
     int64_t pool_src = osdmap.lookup_pg_pool_name(srcpoolstr.c_str());
     int64_t pool_dst = osdmap.lookup_pg_pool_name(destpoolstr.c_str());
-
+    bool confirm = false;
+    //confirmation may be set to true only by internal operations.
+    cmd_getval(cmdmap, "yes_i_really_mean_it", confirm);
+    if (destpoolstr[0] == '.' && !confirm) {
+      ss << "pool names beginning with . are not allowed";
+      err = 0;
+      goto reply;
+    }
     if (pool_src < 0) {
       if (pool_dst >= 0) {
         // src pool doesn't exist, dst pool does exist: to ensure idempotency
index 30cd1fc5e4b575d6e35d70c17c6d7688a8376a45..68ee4a57d03ab113470a8203bb6f92ac83c322f8 100644 (file)
@@ -1044,6 +1044,7 @@ class MgrModule(ceph_module.BaseMgrModule, MgrModuleLoggingMixin):
             'format': 'json',
             'srcpool': srcpool,
             'destpool': destpool,
+            'yes_i_really_mean_it': True
         }
         self.check_mon_command(c)
 
@@ -1057,6 +1058,7 @@ class MgrModule(ceph_module.BaseMgrModule, MgrModuleLoggingMixin):
             'pg_num': 1,
             'pg_num_min': 1,
             'pg_num_max': 32,
+            'yes_i_really_mean_it': True
         }
         self.check_mon_command(c)
 
index 721eda2bdfe721d223ad2d6d9aa7bd9dca21ccf1..b7700df375fd9b3e56cb1aa4fb1de3323e067518 100644 (file)
@@ -37,7 +37,9 @@ def resolve_ip(hostname: str) -> str:
 def create_ganesha_pool(mgr: 'MgrModule') -> None:
     pool_list = [p['pool_name'] for p in mgr.get_osdmap().dump().get('pools', [])]
     if POOL_NAME not in pool_list:
-        mgr.check_mon_command({'prefix': 'osd pool create', 'pool': POOL_NAME})
+        mgr.check_mon_command({'prefix': 'osd pool create',
+                               'pool': POOL_NAME,
+                               'yes_i_really_mean_it': True})
         mgr.check_mon_command({'prefix': 'osd pool application enable',
                                'pool': POOL_NAME,
                                'app': 'nfs'})