diff options
author | Benety Goh <benety@mongodb.com> | 2016-01-13 16:37:57 -0500 |
---|---|---|
committer | Benety Goh <benety@mongodb.com> | 2016-01-14 10:40:14 -0500 |
commit | 761473b023c938d50c8835599514667fbd8b6dd9 (patch) | |
tree | 67487ba82c4410e4fb212916ea047f89ceee29b8 | |
parent | 90a684ad25a86deff16f80e11e257c6ac6611683 (diff) | |
download | mongo-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.js | 11 | ||||
-rw-r--r-- | src/mongo/db/repl/oplog.cpp | 4 |
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()); |