summaryrefslogtreecommitdiff
path: root/jstests/rename8.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/rename8.js')
-rw-r--r--jstests/rename8.js25
1 files changed, 25 insertions, 0 deletions
diff --git a/jstests/rename8.js b/jstests/rename8.js
new file mode 100644
index 00000000000..8b955824ea8
--- /dev/null
+++ b/jstests/rename8.js
@@ -0,0 +1,25 @@
+// SERVER-12591: prevent renaming to arbitrary system collections.
+
+var testdb = db.getSiblingDB("rename8"); // to avoid breaking other tests when we touch system.users
+var coll = testdb.rename8;
+var systemNamespaces = testdb.system.namespaces;
+var systemFoo = testdb.system.foo;
+var systemUsers = testdb.system.users;
+
+systemFoo.drop();
+systemUsers.drop();
+coll.drop();
+coll.insert({});
+
+// system.foo isn't in the whitelist so it can't be renamed to or from
+assert.commandFailed(coll.renameCollection(systemFoo.getName()));
+assert.commandFailed(systemFoo.renameCollection(coll.getName()));
+
+// same with system.namespaces, even though it does exist
+assert.commandFailed(coll.renameCollection(systemNamespaces.getName()));
+assert.commandFailed(coll.renameCollection(systemNamespaces.getName(), /*dropTarget*/true));
+assert.commandFailed(systemNamespaces.renameCollection(coll.getName()));
+
+// system.users is whitelisted so these should work
+assert.commandWorked(coll.renameCollection(systemUsers.getName()));
+assert.commandWorked(systemUsers.renameCollection(coll.getName()));