diff options
author | Benety Goh <benety@mongodb.com> | 2022-06-03 20:18:45 -0400 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-06-04 01:17:22 +0000 |
commit | aca68462e5b703b3cc54e4610604687150706f20 (patch) | |
tree | a52475911957e7aae6231f8f02753dc2451ae307 /src/mongo | |
parent | ccdab6f1abc1986e6f51d46addcb829a9cdd4489 (diff) | |
download | mongo-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.cpp | 9 | ||||
-rw-r--r-- | src/mongo/db/catalog/rename_collection_test.cpp | 38 |
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 |