]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd: add support for relaxed image spec validation
authorJason Dillaman <dillaman@redhat.com>
Thu, 14 Apr 2016 17:13:42 +0000 (13:13 -0400)
committerJason Dillaman <dillaman@redhat.com>
Thu, 14 Apr 2016 21:59:26 +0000 (17:59 -0400)
Operations which create images or snapshots still fully enforce
the spec validation.  All other operations use a relaxed validation
format.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>
28 files changed:
src/tools/rbd/Utils.cc
src/tools/rbd/Utils.h
src/tools/rbd/action/BenchWrite.cc
src/tools/rbd/action/Children.cc
src/tools/rbd/action/Clone.cc
src/tools/rbd/action/Copy.cc
src/tools/rbd/action/Create.cc
src/tools/rbd/action/Diff.cc
src/tools/rbd/action/DiskUsage.cc
src/tools/rbd/action/Export.cc
src/tools/rbd/action/ExportDiff.cc
src/tools/rbd/action/Feature.cc
src/tools/rbd/action/Flatten.cc
src/tools/rbd/action/ImageMeta.cc
src/tools/rbd/action/Import.cc
src/tools/rbd/action/ImportDiff.cc
src/tools/rbd/action/Info.cc
src/tools/rbd/action/Kernel.cc
src/tools/rbd/action/Lock.cc
src/tools/rbd/action/MirrorImage.cc
src/tools/rbd/action/Nbd.cc
src/tools/rbd/action/ObjectMap.cc
src/tools/rbd/action/Remove.cc
src/tools/rbd/action/Rename.cc
src/tools/rbd/action/Resize.cc
src/tools/rbd/action/Snap.cc
src/tools/rbd/action/Status.cc
src/tools/rbd/action/Watch.cc

index 1b6df94315c964e6c50e670ae9e815194570f7c3..36021dc5f9f2c1f790ae182e4be820dcd2f750ab 100644 (file)
@@ -80,8 +80,28 @@ int read_string(int fd, unsigned max, std::string *out) {
 }
 
 int extract_spec(const std::string &spec, std::string *pool_name,
-                 std::string *image_name, std::string *snap_name) {
-  boost::regex pattern("^(?:([^/@]+)/)?([^/@]+)(?:@([^/@]+))?$");
+                 std::string *image_name, std::string *snap_name,
+                 SpecValidation spec_validation) {
+  boost::regex pattern;
+  switch (spec_validation) {
+  case SPEC_VALIDATION_FULL:
+    // disallow "/" and "@" in image and snap name
+    pattern = "^(?:([^/@]+)/)?([^/@]+)(?:@([^/@]+))?$";
+    break;
+  case SPEC_VALIDATION_SNAP:
+    // disallow "/" and "@" in snap name
+    pattern = "^(?:([^/]+)/)?([^@]+)(?:@([^/@]+))?$";
+    break;
+  case SPEC_VALIDATION_NONE:
+    // relaxed pattern assumes pool is before first "/" and snap
+    // name is after first "@"
+    pattern = "^(?:([^/]+)/)?([^@]+)(?:@(.+))?$";
+    break;
+  default:
+    assert(false);
+    break;
+  }
+
   boost::smatch match;
   if (!boost::regex_match(spec, match, pattern)) {
     std::cerr << "rbd: invalid spec '" << spec << "'" << std::endl;
@@ -139,6 +159,7 @@ int get_pool_image_snapshot_names(const po::variables_map &vm,
                                   std::string *image_name,
                                   std::string *snap_name,
                                   SnapshotPresence snapshot_presence,
+                                  SpecValidation spec_validation,
                                   bool image_required) {
   std::string pool_key = (mod == at::ARGUMENT_MODIFIER_DEST ?
     at::DEST_POOL_NAME : at::POOL_NAME);
@@ -156,12 +177,13 @@ int get_pool_image_snapshot_names(const po::variables_map &vm,
   if (vm.count(snap_key) && snap_name != nullptr) {
      *snap_name = vm[snap_key].as<std::string>();
    }
-  
+
   if (image_name != nullptr && !image_name->empty()) {
     // despite the separate pool and snapshot name options,
     // we can also specify them via the image option
     std::string image_name_copy(*image_name);
-    extract_spec(image_name_copy, pool_name, image_name, snap_name);
+    extract_spec(image_name_copy, pool_name, image_name, snap_name,
+                 spec_validation);
   }
 
   int r;
@@ -169,7 +191,7 @@ int get_pool_image_snapshot_names(const po::variables_map &vm,
       image_name->empty()) {
     std::string spec = get_positional_argument(vm, (*spec_arg_index)++);
     if (!spec.empty()) {
-      r = extract_spec(spec, pool_name, image_name, snap_name);
+      r = extract_spec(spec, pool_name, image_name, snap_name, spec_validation);
       if (r < 0) {
         return r;
       }
@@ -225,14 +247,16 @@ int get_pool_journal_names(const po::variables_map &vm,
     // despite the separate pool option,
     // we can also specify them via the journal option
     std::string journal_name_copy(*journal_name);
-    extract_spec(journal_name_copy, pool_name, journal_name, nullptr);
+    extract_spec(journal_name_copy, pool_name, journal_name, nullptr,
+                 SPEC_VALIDATION_FULL);
   }
 
   if (!image_name.empty()) {
     // despite the separate pool option,
     // we can also specify them via the image option
     std::string image_name_copy(image_name);
-    extract_spec(image_name_copy, pool_name, &image_name, nullptr);
+    extract_spec(image_name_copy, pool_name, &image_name, nullptr,
+                 SPEC_VALIDATION_NONE);
   }
 
   int r;
@@ -240,7 +264,8 @@ int get_pool_journal_names(const po::variables_map &vm,
       journal_name->empty()) {
     std::string spec = get_positional_argument(vm, (*spec_arg_index)++);
     if (!spec.empty()) {
-      r = extract_spec(spec, pool_name, journal_name, nullptr);
+      r = extract_spec(spec, pool_name, journal_name, nullptr,
+                       SPEC_VALIDATION_FULL);
       if (r < 0) {
         return r;
       }
index 0cd8a410b171ffe52dc093afe514c21ae48fed3e..10ec2d21ab58d4353481dcd521db2c0e4ecfc83b 100644 (file)
@@ -22,6 +22,12 @@ enum SnapshotPresence {
   SNAPSHOT_PRESENCE_REQUIRED
 };
 
+enum SpecValidation {
+  SPEC_VALIDATION_FULL,
+  SPEC_VALIDATION_SNAP,
+  SPEC_VALIDATION_NONE
+};
+
 struct ProgressContext : public librbd::ProgressContext {
   const char *operation;
   bool progress;
@@ -41,7 +47,8 @@ void aio_context_callback(librbd::completion_t completion, void *arg);
 int read_string(int fd, unsigned max, std::string *out);
 
 int extract_spec(const std::string &spec, std::string *pool_name,
-                 std::string *image_name, std::string *snap_name);
+                 std::string *image_name, std::string *snap_name,
+                 SpecValidation spec_validation);
 
 std::string get_positional_argument(
     const boost::program_options::variables_map &vm, size_t index);
@@ -53,7 +60,8 @@ int get_pool_image_snapshot_names(
     const boost::program_options::variables_map &vm,
     argument_types::ArgumentModifier mod, size_t *spec_arg_index,
     std::string *pool_name, std::string *image_name, std::string *snap_name,
-    SnapshotPresence snapshot_presence, bool image_required = true);
+    SnapshotPresence snapshot_presence, SpecValidation spec_validation,
+    bool image_required = true);
 
 int get_pool_journal_names(
     const boost::program_options::variables_map &vm,
index 3cd90ea271b5afe8169255a19e3c771e195d7460..c124f30423cadb4f822790315a8c7c2f23a274c7 100644 (file)
@@ -251,7 +251,7 @@ int execute(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
index b930eb90bc97b05b74481413e18f61aa7edd1f2e..8e49eabada05ace1552fcd900e1ddbb79055e347 100644 (file)
@@ -60,7 +60,7 @@ int execute(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_REQUIRED);
+    &snap_name, utils::SNAPSHOT_PRESENCE_REQUIRED, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
index 0ac991b412ef2a67de44e652f592404a605f6f64..f399d58dd83a34218f6e598d99fff6ce35dd5b10 100644 (file)
@@ -44,7 +44,7 @@ int execute(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_SOURCE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_REQUIRED);
+    &snap_name, utils::SNAPSHOT_PRESENCE_REQUIRED, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
@@ -54,7 +54,7 @@ int execute(const po::variables_map &vm) {
   std::string dst_snap_name;
   r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_DEST, &arg_index, &dst_pool_name, &dst_image_name,
-    &dst_snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+    &dst_snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_FULL);
   if (r < 0) {
     return r;
   }
index 7ab53aeb621298ba0ca2204dab74f7057921ffda..e45b008abb8e4edc28cecc4e71edc05f7237ffeb 100644 (file)
@@ -45,7 +45,8 @@ int execute(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_SOURCE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_PERMITTED);
+    &snap_name, utils::SNAPSHOT_PRESENCE_PERMITTED,
+    utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
@@ -55,7 +56,7 @@ int execute(const po::variables_map &vm) {
   std::string dst_snap_name;
   r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_DEST, &arg_index, &dst_pool_name, &dst_image_name,
-    &dst_snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+    &dst_snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_FULL);
   if (r < 0) {
     return r;
   }
index 58919392e365ae7c1f84552f9a3f9b33dd4c3979..dc3bb834d3363f574b63f6ae8c1a08f16b4bd096 100644 (file)
@@ -51,7 +51,7 @@ int execute(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_FULL);
   if (r < 0) {
     return r;
   }
index cd0aeb28936ab2a8c03e6817ccf50a989b7b68ad..3db9e3047bd230f4321ac2c1dab677589647599f 100644 (file)
@@ -93,7 +93,8 @@ int execute(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_PERMITTED);
+    &snap_name, utils::SNAPSHOT_PRESENCE_PERMITTED,
+    utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
index 580192feeed2d986fd517f1ee65d80465e0c35a1..e694dd742d99c9a39fec47180198bc404f551c9f 100644 (file)
@@ -231,7 +231,7 @@ int execute(const po::variables_map &vm) {
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
     &snap_name, utils::SNAPSHOT_PRESENCE_PERMITTED,
-    false);
+    utils::SPEC_VALIDATION_NONE, false);
   if (r < 0) {
     return r;
   }
index 4fe5957b333c3ac739c392c1d9addffd6a30bc43..d6866e55dcdd990b998759412ecd64dbfee18b71 100644 (file)
@@ -161,7 +161,8 @@ int execute(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_SOURCE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_PERMITTED);
+    &snap_name, utils::SNAPSHOT_PRESENCE_PERMITTED,
+    utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
index 245bbf3ab0b4e12ea1a7b9f38fd554ff7ac61996..13e7346cf3fe3d6f2c20c4032ce290a3a0f4974c 100644 (file)
@@ -213,7 +213,8 @@ int execute(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_SOURCE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_PERMITTED);
+    &snap_name, utils::SNAPSHOT_PRESENCE_PERMITTED,
+    utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
index 12d4dd8cf8cb3b6f8c214f45d323b7c3b12101b8..d1b6d1fd50d4d6e352fcd0d748ec0dccb469b834 100644 (file)
@@ -45,7 +45,7 @@ int execute(const po::variables_map &vm, bool enabled) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
index 51225437aec387e4513e1ee8dc30b5daaef18dc5..4d231fdacaa67ebb10ab5c9fedee8a034351527d 100644 (file)
@@ -40,7 +40,7 @@ int execute(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
index 2cf1a25a2ebaa7d95e14933000ad5c73865b79d8..13d9be7ca0d221d111cccc6ec2621da042d9a973 100644 (file)
@@ -130,7 +130,7 @@ int execute_list(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
@@ -172,7 +172,7 @@ int execute_get(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
@@ -216,7 +216,7 @@ int execute_set(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
@@ -264,7 +264,7 @@ int execute_remove(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
index e7bf4d16c828ece5ee7e899333cc3a65e294d639..2eee2e8c4131d327fd3320ef4a0f10c690fb368e 100644 (file)
@@ -265,7 +265,8 @@ int execute(const po::variables_map &vm) {
   std::string deprecated_image_name;
   if (vm.count(at::IMAGE_NAME)) {
     utils::extract_spec(vm[at::IMAGE_NAME].as<std::string>(),
-                        &deprecated_pool_name, &deprecated_image_name, nullptr);
+                        &deprecated_pool_name, &deprecated_image_name, nullptr,
+                        utils::SPEC_VALIDATION_FULL);
     std::cerr << "rbd: --image is deprecated for import, use --dest"
               << std::endl;
   } else {
@@ -278,7 +279,8 @@ int execute(const po::variables_map &vm) {
   std::string snap_name;
   r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_DEST, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, false);
+    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_FULL,
+    false);
   if (r < 0) {
     return r;
   }
index fb69c2e01867b30d1ba523779ca575f815cad54e..2efdc65833b5044eb76c50e21d8d1ae4965296e8 100644 (file)
@@ -203,7 +203,7 @@ int execute(const po::variables_map &vm) {
   std::string snap_name;
   r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
index beb7b08c792b3a90947a674280d975e14db0a9f7..8e31e45028da0a23c7dc3bb91bf7f6050c62277a 100644 (file)
@@ -231,7 +231,8 @@ int execute(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_PERMITTED);
+    &snap_name, utils::SNAPSHOT_PRESENCE_PERMITTED,
+    utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
index 3c552d985eb9b1f61e85e325fc285ffc64248a6c..74eb6d9f7685b2c70a56108db2819f2a7134e56e 100644 (file)
@@ -249,7 +249,8 @@ int execute_map(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_PERMITTED);
+    &snap_name, utils::SNAPSHOT_PRESENCE_PERMITTED,
+    utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
@@ -318,7 +319,7 @@ int execute_unmap(const po::variables_map &vm) {
     r = utils::get_pool_image_snapshot_names(
       vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
       &snap_name, utils::SNAPSHOT_PRESENCE_PERMITTED,
-      false);
+      utils::SPEC_VALIDATION_NONE, false);
     if (r < 0) {
       return r;
     }
index f9f4a22da5ff8b690eb8f9cf2270a22fabcc12f0..f083cafb075d1d97960f503bbcbc4e1bec53634e 100644 (file)
@@ -116,7 +116,7 @@ int execute_list(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
@@ -159,7 +159,7 @@ int execute_add(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
@@ -217,7 +217,7 @@ int execute_remove(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
index ecb838fe0c8a4af82a545f0d5ce80f047c50a7d5..f61c628cdf4856bee9339340558f5553fbed7ec4 100644 (file)
@@ -52,7 +52,7 @@ int execute_enable_disable(const po::variables_map &vm, bool enable,
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
       vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-      &snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+      &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
@@ -99,7 +99,7 @@ int execute_promote(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
       vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-      &snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+      &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
@@ -132,7 +132,7 @@ int execute_demote(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
       vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-      &snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+      &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
@@ -163,7 +163,7 @@ int execute_resync(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
       vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-      &snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+      &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
index 81ff183ce8eeafddd2c5419480c932412a0b1d92..478e42ae9648996f4f2d6158b1c5c9cf74632f72 100644 (file)
@@ -111,7 +111,8 @@ int execute_map(const po::variables_map &vm)
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_PERMITTED);
+    &snap_name, utils::SNAPSHOT_PRESENCE_PERMITTED,
+    utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
index b14bc72d0ddf89d2f1fe820bd2bcd06004b35368..17525c896c4640d36cb8bec7adcec8dc31b15935 100644 (file)
@@ -41,7 +41,8 @@ int execute(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_PERMITTED);
+    &snap_name, utils::SNAPSHOT_PRESENCE_PERMITTED,
+    utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
index 6c2d2c3e2cd317eb5823b24b38ad812abe0a220f..01b36cbe1376eee28ae70114e5bc2280b75d2c21 100644 (file)
@@ -41,7 +41,7 @@ int execute(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
index c0761118e8e36123a3b341407c471916c5e6423b..925a419e5e041366729485d1da86950933d46d91 100644 (file)
@@ -37,7 +37,7 @@ int execute(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_SOURCE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
@@ -47,7 +47,7 @@ int execute(const po::variables_map &vm) {
   std::string dst_snap_name;
   r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_DEST, &arg_index, &dst_pool_name, &dst_image_name,
-    &dst_snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+    &dst_snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_FULL);
   if (r < 0) {
     return r;
   }
index aa7a3904b7b27477eddc333a4953185cb899d8e2..99044274286018b9984b0111ea728dbd95a0ddcf 100644 (file)
@@ -43,7 +43,7 @@ int execute(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
index 5452ef32c42cb64732409184dc9059c05f14eeac..345e747fb9ca11d28cd82da1bc84331a041db1e5 100644 (file)
@@ -161,7 +161,7 @@ int execute_list(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
@@ -202,7 +202,7 @@ int execute_create(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_REQUIRED);
+    &snap_name, utils::SNAPSHOT_PRESENCE_REQUIRED, utils::SPEC_VALIDATION_SNAP);
   if (r < 0) {
     return r;
   }
@@ -237,7 +237,7 @@ int execute_remove(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_REQUIRED);
+    &snap_name, utils::SNAPSHOT_PRESENCE_REQUIRED, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
@@ -278,7 +278,7 @@ int execute_purge(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
@@ -316,7 +316,7 @@ int execute_rollback(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_REQUIRED);
+    &snap_name, utils::SNAPSHOT_PRESENCE_REQUIRED, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
@@ -351,7 +351,7 @@ int execute_protect(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_REQUIRED);
+    &snap_name, utils::SNAPSHOT_PRESENCE_REQUIRED, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
@@ -386,7 +386,7 @@ int execute_unprotect(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_REQUIRED);
+    &snap_name, utils::SNAPSHOT_PRESENCE_REQUIRED, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
@@ -422,7 +422,8 @@ int execute_rename(const po::variables_map &vm) {
   std::string src_snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_SOURCE, &arg_index, &pool_name, &image_name,
-    &src_snap_name, utils::SNAPSHOT_PRESENCE_REQUIRED);
+    &src_snap_name, utils::SNAPSHOT_PRESENCE_REQUIRED,
+    utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return -r;
   }
@@ -432,7 +433,8 @@ int execute_rename(const po::variables_map &vm) {
   std::string dest_snap_name;
   r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_DEST, &arg_index, &dest_pool_name,
-    &dest_image_name, &dest_snap_name, utils::SNAPSHOT_PRESENCE_REQUIRED);
+    &dest_image_name, &dest_snap_name, utils::SNAPSHOT_PRESENCE_REQUIRED,
+    utils::SPEC_VALIDATION_SNAP);
   if (r < 0) {
     return -r;
   }
index da8fe97e2cb57707f868b715b9a783e042fd4605..ab37bc8644c1b077b5f3d52b81a0c1aede8d8627 100644 (file)
@@ -96,7 +96,7 @@ int execute(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
index 3e532550d93099b32819f6213b4b538eccb57c83..65be93d6dea884766a281a37220ccb27491caae2 100644 (file)
@@ -107,7 +107,7 @@ int execute(const po::variables_map &vm) {
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
     vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE);
+    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }