From: Jason Dillaman Date: Thu, 14 Apr 2016 17:13:42 +0000 (-0400) Subject: rbd: add support for relaxed image spec validation X-Git-Tag: v10.2.0~31^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e57d7c110eab658cace1885571e4d0295f15ccd8;p=ceph.git 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 --- diff --git a/src/tools/rbd/Utils.cc b/src/tools/rbd/Utils.cc index 1b6df94315c9..36021dc5f9f2 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 0cd8a410b171..10ec2d21ab58 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 3cd90ea271b5..c124f30423ca 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 b930eb90bc97..8e49eabada05 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 0ac991b412ef..f399d58dd83a 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 7ab53aeb6212..e45b008abb8e 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 58919392e365..dc3bb834d336 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 cd0aeb28936a..3db9e3047bd2 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 580192feeed2..e694dd742d99 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 4fe5957b333c..d6866e55dcdd 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 245bbf3ab0b4..13e7346cf3fe 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 12d4dd8cf8cb..d1b6d1fd50d4 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 51225437aec3..4d231fdacaa6 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 2cf1a25a2eba..13d9be7ca0d2 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 e7bf4d16c828..2eee2e8c4131 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 fb69c2e01867..2efdc65833b5 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 beb7b08c792b..8e31e45028da 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 3c552d985eb9..74eb6d9f7685 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 f9f4a22da5ff..f083cafb075d 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 ecb838fe0c8a..f61c628cdf48 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 81ff183ce8ee..478e42ae9648 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 b14bc72d0ddf..17525c896c46 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 6c2d2c3e2cd3..01b36cbe1376 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 c0761118e8e3..925a419e5e04 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 aa7a3904b7b2..990442742860 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 5452ef32c42c..345e747fb9ca 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 da8fe97e2cb5..ab37bc8644c1 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 3e532550d930..65be93d6dea8 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; }