diff --git a/jstests/core/pseudocommand_db.js b/jstests/core/pseudocommand_db.js new file mode 100644 index 0000000000000..e28fa75a64d42 --- /dev/null +++ b/jstests/core/pseudocommand_db.js @@ -0,0 +1,7 @@ +(function() { + "use strict"; + var testDB = db.getSiblingDB("blah"); + // test that we can run the 'inprog' pseudocommand on any database. + assert.commandWorked(testDB.$cmd.sys.inprog.findOne()); + +})(); diff --git a/src/mongo/s/strategy.cpp b/src/mongo/s/strategy.cpp index c3475ad36f7f5..49ae3f8637372 100644 --- a/src/mongo/s/strategy.cpp +++ b/src/mongo/s/strategy.cpp @@ -404,13 +404,13 @@ bool Strategy::handleSpecialNamespaces(OperationContext* txn, Request& r, QueryM BSONObjBuilder reply; - const auto upgradeToRealCommand = [txn, &r, &q, &reply](StringData commandName) { + const auto upgradeToRealCommand = [txn, &q, &reply](StringData commandName) { BSONObjBuilder cmdBob; cmdBob.append(commandName, 1); cmdBob.appendElements(q.query); // fields are validated by Commands auto interposedCmd = cmdBob.done(); - NamespaceString nss(r.getns()); - NamespaceString interposedNss(nss.db(), "$cmd"); + // Rewrite upgraded pseudoCommands to run on the 'admin' database. + NamespaceString interposedNss("admin", "$cmd"); Command::runAgainstRegistered( txn, interposedNss.ns().c_str(), interposedCmd, reply, q.queryOptions); };