summaryrefslogtreecommitdiff
path: root/src/mongo
diff options
context:
space:
mode:
authorBenety Goh <benety@mongodb.com>2022-06-03 20:18:45 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-06-04 01:17:22 +0000
commitaca68462e5b703b3cc54e4610604687150706f20 (patch)
treea52475911957e7aae6231f8f02753dc2451ae307 /src/mongo
parentccdab6f1abc1986e6f51d46addcb829a9cdd4489 (diff)
downloadmongo-aca68462e5b703b3cc54e4610604687150706f20.tar.gz
SERVER-64491 Disallow using the system.js collection name as the source or target names in the rename command
Diffstat (limited to 'src/mongo')
-rw-r--r--src/mongo/db/catalog/rename_collection.cpp9
-rw-r--r--src/mongo/db/catalog/rename_collection_test.cpp38
2 files changed, 47 insertions, 0 deletions
diff --git a/src/mongo/db/catalog/rename_collection.cpp b/src/mongo/db/catalog/rename_collection.cpp
index 1cc630d7458..75487199954 100644
--- a/src/mongo/db/catalog/rename_collection.cpp
+++ b/src/mongo/db/catalog/rename_collection.cpp
@@ -853,6 +853,10 @@ void validateNamespacesForRenameCollection(OperationContext* opCtx,
!source.isSystemDotViews() && !target.isSystemDotViews());
uassert(ErrorCodes::IllegalOperation,
+ "renaming system.js collection or renaming to system.js is not allowed",
+ !source.isSystemDotJavascript() && !target.isSystemDotJavascript());
+
+ uassert(ErrorCodes::IllegalOperation,
"Renaming system.buckets collections is not allowed",
!source.isTimeseriesBucketsCollection());
}
@@ -887,6 +891,11 @@ Status renameCollection(OperationContext* opCtx,
"renaming system.views collection or renaming to system.views is not allowed");
}
+ if (source.isSystemDotJavascript() || target.isSystemDotJavascript()) {
+ return Status(ErrorCodes::IllegalOperation,
+ "renaming system.js collection or renaming to system.js is not allowed");
+ }
+
StringData dropTargetMsg = options.dropTarget ? "yes"_sd : "no"_sd;
LOGV2(20400,
"renameCollectionForCommand: rename {source} to {target}{dropTargetMsg}",
diff --git a/src/mongo/db/catalog/rename_collection_test.cpp b/src/mongo/db/catalog/rename_collection_test.cpp
index 576a1b699e1..20c4d4be11b 100644
--- a/src/mongo/db/catalog/rename_collection_test.cpp
+++ b/src/mongo/db/catalog/rename_collection_test.cpp
@@ -1109,4 +1109,42 @@ TEST_F(RenameCollectionTest,
renameCollectionForApplyOps(_opCtx.get(), dbName, boost::none, cmd, {}));
}
+TEST_F(RenameCollectionTest, FailRenameCollectionFromSystemJavascript) {
+ NamespaceString sourceNss("foo", NamespaceString::kSystemDotJavascriptCollectionName);
+ NamespaceString targetNss("foo.bar");
+
+ _createCollection(_opCtx.get(), sourceNss);
+
+ auto status = renameCollection(_opCtx.get(), sourceNss, targetNss, {});
+
+ ASSERT_EQUALS(ErrorCodes::IllegalOperation, status);
+ ASSERT_STRING_SEARCH_REGEX(status.reason(), "renaming system.js.*not allowed");
+
+ // Used for sharded rename.
+ ASSERT_THROWS_CODE_AND_WHAT(
+ validateNamespacesForRenameCollection(_opCtx.get(), sourceNss, targetNss),
+ AssertionException,
+ ErrorCodes::IllegalOperation,
+ status.reason());
+}
+
+TEST_F(RenameCollectionTest, FailRenameCollectionToSystemJavascript) {
+ NamespaceString sourceNss("foo.bar");
+ NamespaceString targetNss("foo", NamespaceString::kSystemDotJavascriptCollectionName);
+
+ _createCollection(_opCtx.get(), sourceNss);
+
+ auto status = renameCollection(_opCtx.get(), sourceNss, targetNss, {});
+
+ ASSERT_EQUALS(ErrorCodes::IllegalOperation, status);
+ ASSERT_STRING_SEARCH_REGEX(status.reason(), "renaming to system.js.*not allowed");
+
+ // Used for sharded rename.
+ ASSERT_THROWS_CODE_AND_WHAT(
+ validateNamespacesForRenameCollection(_opCtx.get(), sourceNss, targetNss),
+ AssertionException,
+ ErrorCodes::IllegalOperation,
+ status.reason());
+}
+
} // namespace