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