From e57d7c110eab658cace1885571e4d0295f15ccd8 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Thu, 14 Apr 2016 13:13:42 -0400 Subject: [PATCH] rbd: add support for relaxed image spec validation 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 --- src/tools/rbd/Utils.cc | 41 +++++++++++++++++++++++------ src/tools/rbd/Utils.h | 12 +++++++-- src/tools/rbd/action/BenchWrite.cc | 2 +- src/tools/rbd/action/Children.cc | 2 +- src/tools/rbd/action/Clone.cc | 4 +-- src/tools/rbd/action/Copy.cc | 5 ++-- src/tools/rbd/action/Create.cc | 2 +- src/tools/rbd/action/Diff.cc | 3 ++- src/tools/rbd/action/DiskUsage.cc | 2 +- src/tools/rbd/action/Export.cc | 3 ++- src/tools/rbd/action/ExportDiff.cc | 3 ++- src/tools/rbd/action/Feature.cc | 2 +- src/tools/rbd/action/Flatten.cc | 2 +- src/tools/rbd/action/ImageMeta.cc | 8 +++--- src/tools/rbd/action/Import.cc | 6 +++-- src/tools/rbd/action/ImportDiff.cc | 2 +- src/tools/rbd/action/Info.cc | 3 ++- src/tools/rbd/action/Kernel.cc | 5 ++-- src/tools/rbd/action/Lock.cc | 6 ++--- src/tools/rbd/action/MirrorImage.cc | 8 +++--- src/tools/rbd/action/Nbd.cc | 3 ++- src/tools/rbd/action/ObjectMap.cc | 3 ++- src/tools/rbd/action/Remove.cc | 2 +- src/tools/rbd/action/Rename.cc | 4 +-- src/tools/rbd/action/Resize.cc | 2 +- src/tools/rbd/action/Snap.cc | 20 +++++++------- src/tools/rbd/action/Status.cc | 2 +- src/tools/rbd/action/Watch.cc | 2 +- 28 files changed, 102 insertions(+), 57 deletions(-) diff --git a/src/tools/rbd/Utils.cc b/src/tools/rbd/Utils.cc index 1b6df94315c..36021dc5f9f 100644 --- a/src/tools/rbd/Utils.cc +++ b/src/tools/rbd/Utils.cc @@ -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(); } - + 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; } diff --git a/src/tools/rbd/Utils.h b/src/tools/rbd/Utils.h index 0cd8a410b17..10ec2d21ab5 100644 --- a/src/tools/rbd/Utils.h +++ b/src/tools/rbd/Utils.h @@ -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, diff --git a/src/tools/rbd/action/BenchWrite.cc b/src/tools/rbd/action/BenchWrite.cc index 3cd90ea271b..c124f30423c 100644 --- a/src/tools/rbd/action/BenchWrite.cc +++ b/src/tools/rbd/action/BenchWrite.cc @@ -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; } diff --git a/src/tools/rbd/action/Children.cc b/src/tools/rbd/action/Children.cc index b930eb90bc9..8e49eabada0 100644 --- a/src/tools/rbd/action/Children.cc +++ b/src/tools/rbd/action/Children.cc @@ -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; } diff --git a/src/tools/rbd/action/Clone.cc b/src/tools/rbd/action/Clone.cc index 0ac991b412e..f399d58dd83 100644 --- a/src/tools/rbd/action/Clone.cc +++ b/src/tools/rbd/action/Clone.cc @@ -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; } diff --git a/src/tools/rbd/action/Copy.cc b/src/tools/rbd/action/Copy.cc index 7ab53aeb621..e45b008abb8 100644 --- a/src/tools/rbd/action/Copy.cc +++ b/src/tools/rbd/action/Copy.cc @@ -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; } diff --git a/src/tools/rbd/action/Create.cc b/src/tools/rbd/action/Create.cc index 58919392e36..dc3bb834d33 100644 --- a/src/tools/rbd/action/Create.cc +++ b/src/tools/rbd/action/Create.cc @@ -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; } diff --git a/src/tools/rbd/action/Diff.cc b/src/tools/rbd/action/Diff.cc index cd0aeb28936..3db9e3047bd 100644 --- a/src/tools/rbd/action/Diff.cc +++ b/src/tools/rbd/action/Diff.cc @@ -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; } diff --git a/src/tools/rbd/action/DiskUsage.cc b/src/tools/rbd/action/DiskUsage.cc index 580192feeed..e694dd742d9 100644 --- a/src/tools/rbd/action/DiskUsage.cc +++ b/src/tools/rbd/action/DiskUsage.cc @@ -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; } diff --git a/src/tools/rbd/action/Export.cc b/src/tools/rbd/action/Export.cc index 4fe5957b333..d6866e55dcd 100644 --- a/src/tools/rbd/action/Export.cc +++ b/src/tools/rbd/action/Export.cc @@ -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; } diff --git a/src/tools/rbd/action/ExportDiff.cc b/src/tools/rbd/action/ExportDiff.cc index 245bbf3ab0b..13e7346cf3f 100644 --- a/src/tools/rbd/action/ExportDiff.cc +++ b/src/tools/rbd/action/ExportDiff.cc @@ -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; } diff --git a/src/tools/rbd/action/Feature.cc b/src/tools/rbd/action/Feature.cc index 12d4dd8cf8c..d1b6d1fd50d 100644 --- a/src/tools/rbd/action/Feature.cc +++ b/src/tools/rbd/action/Feature.cc @@ -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; } diff --git a/src/tools/rbd/action/Flatten.cc b/src/tools/rbd/action/Flatten.cc index 51225437aec..4d231fdacaa 100644 --- a/src/tools/rbd/action/Flatten.cc +++ b/src/tools/rbd/action/Flatten.cc @@ -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; } diff --git a/src/tools/rbd/action/ImageMeta.cc b/src/tools/rbd/action/ImageMeta.cc index 2cf1a25a2eb..13d9be7ca0d 100644 --- a/src/tools/rbd/action/ImageMeta.cc +++ b/src/tools/rbd/action/ImageMeta.cc @@ -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; } diff --git a/src/tools/rbd/action/Import.cc b/src/tools/rbd/action/Import.cc index e7bf4d16c82..2eee2e8c413 100644 --- a/src/tools/rbd/action/Import.cc +++ b/src/tools/rbd/action/Import.cc @@ -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(), - &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; } diff --git a/src/tools/rbd/action/ImportDiff.cc b/src/tools/rbd/action/ImportDiff.cc index fb69c2e0186..2efdc65833b 100644 --- a/src/tools/rbd/action/ImportDiff.cc +++ b/src/tools/rbd/action/ImportDiff.cc @@ -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; } diff --git a/src/tools/rbd/action/Info.cc b/src/tools/rbd/action/Info.cc index beb7b08c792..8e31e45028d 100644 --- a/src/tools/rbd/action/Info.cc +++ b/src/tools/rbd/action/Info.cc @@ -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; } diff --git a/src/tools/rbd/action/Kernel.cc b/src/tools/rbd/action/Kernel.cc index 3c552d985eb..74eb6d9f768 100644 --- a/src/tools/rbd/action/Kernel.cc +++ b/src/tools/rbd/action/Kernel.cc @@ -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; } diff --git a/src/tools/rbd/action/Lock.cc b/src/tools/rbd/action/Lock.cc index f9f4a22da5f..f083cafb075 100644 --- a/src/tools/rbd/action/Lock.cc +++ b/src/tools/rbd/action/Lock.cc @@ -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; } diff --git a/src/tools/rbd/action/MirrorImage.cc b/src/tools/rbd/action/MirrorImage.cc index ecb838fe0c8..f61c628cdf4 100644 --- a/src/tools/rbd/action/MirrorImage.cc +++ b/src/tools/rbd/action/MirrorImage.cc @@ -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; } diff --git a/src/tools/rbd/action/Nbd.cc b/src/tools/rbd/action/Nbd.cc index 81ff183ce8e..478e42ae964 100644 --- a/src/tools/rbd/action/Nbd.cc +++ b/src/tools/rbd/action/Nbd.cc @@ -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; } diff --git a/src/tools/rbd/action/ObjectMap.cc b/src/tools/rbd/action/ObjectMap.cc index b14bc72d0dd..17525c896c4 100644 --- a/src/tools/rbd/action/ObjectMap.cc +++ b/src/tools/rbd/action/ObjectMap.cc @@ -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; } diff --git a/src/tools/rbd/action/Remove.cc b/src/tools/rbd/action/Remove.cc index 6c2d2c3e2cd..01b36cbe137 100644 --- a/src/tools/rbd/action/Remove.cc +++ b/src/tools/rbd/action/Remove.cc @@ -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; } diff --git a/src/tools/rbd/action/Rename.cc b/src/tools/rbd/action/Rename.cc index c0761118e8e..925a419e5e0 100644 --- a/src/tools/rbd/action/Rename.cc +++ b/src/tools/rbd/action/Rename.cc @@ -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; } diff --git a/src/tools/rbd/action/Resize.cc b/src/tools/rbd/action/Resize.cc index aa7a3904b7b..99044274286 100644 --- a/src/tools/rbd/action/Resize.cc +++ b/src/tools/rbd/action/Resize.cc @@ -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; } diff --git a/src/tools/rbd/action/Snap.cc b/src/tools/rbd/action/Snap.cc index 5452ef32c42..345e747fb9c 100644 --- a/src/tools/rbd/action/Snap.cc +++ b/src/tools/rbd/action/Snap.cc @@ -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; } diff --git a/src/tools/rbd/action/Status.cc b/src/tools/rbd/action/Status.cc index da8fe97e2cb..ab37bc8644c 100644 --- a/src/tools/rbd/action/Status.cc +++ b/src/tools/rbd/action/Status.cc @@ -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; } diff --git a/src/tools/rbd/action/Watch.cc b/src/tools/rbd/action/Watch.cc index 3e532550d93..65be93d6dea 100644 --- a/src/tools/rbd/action/Watch.cc +++ b/src/tools/rbd/action/Watch.cc @@ -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; } -- 2.47.3