summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenety Goh <benety@mongodb.com>2016-01-13 16:37:57 -0500
committerBenety Goh <benety@mongodb.com>2016-01-14 10:40:14 -0500
commit761473b023c938d50c8835599514667fbd8b6dd9 (patch)
tree67487ba82c4410e4fb212916ea047f89ceee29b8
parent90a684ad25a86deff16f80e11e257c6ac6611683 (diff)
downloadmongo-761473b023c938d50c8835599514667fbd8b6dd9.tar.gz
SERVER-22109 applyOps should validate database name in index spec when creating indexes
(cherry picked from commit 3fa4cdc79b04639061f0d13b68b60c3e3e5102b6)
-rw-r--r--jstests/core/apply_ops1.js11
-rw-r--r--src/mongo/db/repl/oplog.cpp4
2 files changed, 15 insertions, 0 deletions
diff --git a/jstests/core/apply_ops1.js b/jstests/core/apply_ops1.js
index 430af6b62a3..4bc1171b2e7 100644
--- a/jstests/core/apply_ops1.js
+++ b/jstests/core/apply_ops1.js
@@ -86,6 +86,17 @@
73, // ErrorCodes.InvalidNamespace
'applyOps should fail on system.indexes insert operation with invalid index namespace');
+ // Inconsistent database name in index spec namespace.
+ assert.commandFailedWithCode(
+ db.adminCommand({applyOps: [{op: 'i', ns: db.getName() + '.system.indexes', o: {
+ ns: 'baddbprefix' + t.getFullName(),
+ key: {a: 1},
+ name: 'a_1',
+ }}]}),
+ 73, // ErrorCodes.InvalidNamespace
+ 'applyOps should fail on system.indexes insert operation with index namespace containing ' +
+ 'inconsistent database name');
+
// Valid 'ns' field value in unknown operation type 'x'.
assert.commandFailed(
db.adminCommand({applyOps: [{op: 'x', ns: t.getFullName()}]}),
diff --git a/src/mongo/db/repl/oplog.cpp b/src/mongo/db/repl/oplog.cpp
index 1688a5be578..620e103d4c7 100644
--- a/src/mongo/db/repl/oplog.cpp
+++ b/src/mongo/db/repl/oplog.cpp
@@ -647,6 +647,10 @@ bool applyOperation_inlock(OperationContext* txn,
uassert(ErrorCodes::InvalidNamespace,
str::stream() << "Invalid namespace in index spec: " << op,
indexNss.isValid());
+ uassert(ErrorCodes::InvalidNamespace,
+ str::stream() << "Database name mismatch for database ("
+ << nsToDatabaseSubstring(ns) << ") while creating index: " << op,
+ nsToDatabaseSubstring(ns) == indexNss.db());
if (o["background"].trueValue()) {
Lock::TempRelease release(txn->lockState());