summaryrefslogtreecommitdiff
path: root/src/mongo/db/commands.cpp
diff options
context:
space:
mode:
authorBilly Donahue <billy.donahue@mongodb.com>2018-04-20 15:58:46 -0400
committerBilly Donahue <billy.donahue@mongodb.com>2018-05-01 10:31:16 -0400
commit2ed975c6d96dfe0b61bea703ea4f9086b1cee24e (patch)
tree7992d2faf077b4ba15251d41cc5733f451562f47 /src/mongo/db/commands.cpp
parentbf76453a0dcb0e4309f5b249cfe30cffe101b1b4 (diff)
downloadmongo-2ed975c6d96dfe0b61bea703ea4f9086b1cee24e.tar.gz
SERVER-34596 remove Command::parseNs
Diffstat (limited to 'src/mongo/db/commands.cpp')
-rw-r--r--src/mongo/db/commands.cpp51
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),