From 013c635e8a4a87bc48d5558b46ce48694724f3c0 Mon Sep 17 00:00:00 2001 From: Michael Davis <michael.davis@cern.ch> Date: Fri, 6 Apr 2018 15:50:06 +0200 Subject: [PATCH] [cta-admin] Stricter matching on cta-admin dr ... <drive> Changes drive regex patterns to be '^' + regex + '$', to stop $ cta-admin dr rm DRIVE1 from also matching DRIVE13 --- xroot_plugins/XrdSsiCtaRequestMessage.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/xroot_plugins/XrdSsiCtaRequestMessage.cpp b/xroot_plugins/XrdSsiCtaRequestMessage.cpp index 7e296fd3ed..e85fd614df 100644 --- a/xroot_plugins/XrdSsiCtaRequestMessage.cpp +++ b/xroot_plugins/XrdSsiCtaRequestMessage.cpp @@ -913,7 +913,7 @@ void RequestMessage::processDrive_Up(const cta::admin::AdminCmd &admincmd, cta:: { using namespace cta::admin; - std::string cmdlineOutput = setDriveState(getRequired(OptionString::DRIVE), Up); + std::string cmdlineOutput = setDriveState('^' + getRequired(OptionString::DRIVE) + '$', Up); response.set_message_txt(cmdlineOutput); response.set_type(cta::xrd::Response::RSP_SUCCESS); @@ -925,7 +925,7 @@ void RequestMessage::processDrive_Down(const cta::admin::AdminCmd &admincmd, cta { using namespace cta::admin; - std::string cmdlineOutput = setDriveState(getRequired(OptionString::DRIVE), Down); + std::string cmdlineOutput = setDriveState('^' + getRequired(OptionString::DRIVE) + '$', Down); response.set_message_txt(cmdlineOutput); response.set_type(cta::xrd::Response::RSP_SUCCESS); @@ -944,7 +944,7 @@ void RequestMessage::processDrive_Ls(const cta::admin::AdminCmd &admincmd, cta:: bool driveFound = false; auto driveRegexOpt = getOptional(OptionString::DRIVE, &hasRegex); - std::string driveRegexStr = hasRegex ? driveRegexOpt.value() : "."; + std::string driveRegexStr = hasRegex ? '^' + driveRegexOpt.value() + '$' : "."; utils::Regex driveRegex(driveRegexStr.c_str()); auto driveStates = m_scheduler.getDriveStates(m_cliIdentity, m_lc); @@ -1043,6 +1043,7 @@ void RequestMessage::processDrive_Rm(const cta::admin::AdminCmd &admincmd, cta:: std::stringstream cmdlineOutput; auto regex = getRequired(OptionString::DRIVE); + regex = '^' + regex + '$'; cta::utils::Regex driveNameRegex(regex.c_str()); auto driveStates = m_scheduler.getDriveStates(m_cliIdentity, m_lc); bool drivesFound = false; -- GitLab