diff options
author | Billy Donahue <billy.donahue@mongodb.com> | 2018-04-20 15:58:46 -0400 |
---|---|---|
committer | Billy Donahue <billy.donahue@mongodb.com> | 2018-05-01 10:31:16 -0400 |
commit | 2ed975c6d96dfe0b61bea703ea4f9086b1cee24e (patch) | |
tree | 7992d2faf077b4ba15251d41cc5733f451562f47 /src/mongo/db/commands.cpp | |
parent | bf76453a0dcb0e4309f5b249cfe30cffe101b1b4 (diff) | |
download | mongo-2ed975c6d96dfe0b61bea703ea4f9086b1cee24e.tar.gz |
SERVER-34596 remove Command::parseNs
Diffstat (limited to 'src/mongo/db/commands.cpp')
-rw-r--r-- | src/mongo/db/commands.cpp | 51 |
1 files changed, 22 insertions, 29 deletions
diff --git a/src/mongo/db/commands.cpp b/src/mongo/db/commands.cpp index 2e6f36007b0..74977309411 100644 --- a/src/mongo/db/commands.cpp +++ b/src/mongo/db/commands.cpp @@ -97,28 +97,25 @@ BSONObj CommandHelpers::runCommandDirectly(OperationContext* opCtx, const OpMsgR } void CommandHelpers::logAuthViolation(OperationContext* opCtx, - const Command* command, + const CommandInvocation* invocation, const OpMsgRequest& request, ErrorCodes::Error err) { struct Hook final : public audit::CommandInterface { public: - Hook(const Command* command, const OpMsgRequest& request) - : _command{command}, _request{request} {} + explicit Hook(const CommandInvocation* invocation) : _invocation{invocation} {} void redactForLogging(mutablebson::Document* cmdObj) const override { - _command->redactForLogging(cmdObj); + _invocation->definition()->redactForLogging(cmdObj); } NamespaceString ns() const override { - return NamespaceString( - _command->parseNs(_request.getDatabase().toString(), _request.body)); + return _invocation->ns(); } private: - const Command* _command; - const OpMsgRequest& _request; + const CommandInvocation* _invocation; }; - audit::logCommandAuthzCheck(opCtx->getClient(), request, Hook(command, request), err); + audit::logCommandAuthzCheck(opCtx->getClient(), request, Hook(invocation), err); } void CommandHelpers::uassertNoDocumentSequences(StringData commandName, @@ -170,6 +167,20 @@ NamespaceStringOrUUID CommandHelpers::parseNsOrUUID(StringData dbname, const BSO } } +std::string CommandHelpers::parseNsFromCommand(StringData dbname, const BSONObj& cmdObj) { + BSONElement first = cmdObj.firstElement(); + if (first.type() != mongo::String) + return dbname.toString(); + return str::stream() << dbname << '.' << cmdObj.firstElement().valueStringData(); +} + +ResourcePattern CommandHelpers::resourcePatternForNamespace(const std::string& ns) { + if (!NamespaceString::validCollectionComponent(ns)) { + return ResourcePattern::forDatabaseName(ns); + } + return ResourcePattern::forExactNamespace(NamespaceString(ns)); +} + Command* CommandHelpers::findCommand(StringData name) { return globalCommandRegistry()->findCommand(name); } @@ -349,12 +360,11 @@ CommandInvocation::~CommandInvocation() = default; void CommandInvocation::checkAuthorization(OperationContext* opCtx, const OpMsgRequest& request) const { - const Command* c = definition(); Status status = _checkAuthorizationImpl(opCtx, request); if (!status.isOK()) { log(LogComponent::kAccessControl) << status; } - CommandHelpers::logAuthViolation(opCtx, c, request, status.code()); + CommandHelpers::logAuthViolation(opCtx, this, request, status.code()); uassertStatusOK(status); } @@ -376,7 +386,7 @@ private: bool ok = _command->run(opCtx, _dbName, _request->body, bob); CommandHelpers::appendCommandStatus(bob, ok); } catch (const ExceptionFor<ErrorCodes::Unauthorized>& e) { - CommandHelpers::logAuthViolation(opCtx, _command, *_request, e.code()); + CommandHelpers::logAuthViolation(opCtx, this, *_request, e.code()); throw; } } @@ -425,23 +435,6 @@ std::unique_ptr<CommandInvocation> BasicCommand::parse(OperationContext* opCtx, return stdx::make_unique<Invocation>(opCtx, request, this); } -std::string Command::parseNs(const std::string& dbname, const BSONObj& cmdObj) const { - BSONElement first = cmdObj.firstElement(); - if (first.type() != mongo::String) - return dbname; - - return str::stream() << dbname << '.' << cmdObj.firstElement().valueStringData(); -} - -ResourcePattern Command::parseResourcePattern(const std::string& dbname, - const BSONObj& cmdObj) const { - const std::string ns = parseNs(dbname, cmdObj); - if (!NamespaceString::validCollectionComponent(ns)) { - return ResourcePattern::forDatabaseName(ns); - } - return ResourcePattern::forExactNamespace(NamespaceString(ns)); -} - Command::Command(StringData name, StringData oldName) : _name(name.toString()), _commandsExecutedMetric("commands." + _name + ".total", &_commandsExecuted), |