diff options
author | Sara Golemon <sara.golemon@mongodb.com> | 2022-06-16 14:15:24 -0500 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-07-07 16:06:08 +0000 |
commit | 51e8972dca292dbc6f80d13252b8555c8ce633c9 (patch) | |
tree | 9c48e9a142ba48faf17dc0fd9e8ddd8e444a0b69 /src/mongo/db/namespace_string.cpp | |
parent | a7ce4c0c9b3abf5bc27675a4b5edde401371a2fd (diff) | |
download | mongo-51e8972dca292dbc6f80d13252b8555c8ce633c9.tar.gz |
SERVER-66586 Add multitenancy support to UMC commands
Diffstat (limited to 'src/mongo/db/namespace_string.cpp')
-rw-r--r-- | src/mongo/db/namespace_string.cpp | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/mongo/db/namespace_string.cpp b/src/mongo/db/namespace_string.cpp index 399bebab90d..6ad3b027165 100644 --- a/src/mongo/db/namespace_string.cpp +++ b/src/mongo/db/namespace_string.cpp @@ -203,7 +203,23 @@ bool NamespaceString::isCollectionlessAggregateNS() const { bool NamespaceString::isLegalClientSystemNS( const ServerGlobalParams::FeatureCompatibility& currentFCV) const { - if (db() == kAdminDb) { + auto dbname = dbName().db(); + + NamespaceString parsedNSS; + if (gMultitenancySupport && !tenantId()) { + // TODO (SERVER-67423) Remove support for mangled dbname in isLegalClientSystemNS check + // Transitional support for accepting tenantId as a mangled database name. + try { + parsedNSS = parseFromStringExpectTenantIdInMultitenancyMode(ns()); + if (parsedNSS.tenantId()) { + dbname = parsedNSS.dbName().db(); + } + } catch (const DBException&) { + // Swallow exception. + } + } + + if (dbname == kAdminDb) { if (coll() == "system.roles") return true; if (coll() == kServerConfigurationNamespace.coll()) @@ -212,7 +228,7 @@ bool NamespaceString::isLegalClientSystemNS( return true; if (coll() == "system.backup_users") return true; - } else if (db() == kConfigDb) { + } else if (dbname == kConfigDb) { if (coll() == "system.sessions") return true; if (coll() == kIndexBuildEntryNamespace.coll()) @@ -223,7 +239,7 @@ bool NamespaceString::isLegalClientSystemNS( return true; if (coll() == kConfigsvrCoordinatorsNamespace.coll()) return true; - } else if (db() == kLocalDb) { + } else if (dbname == kLocalDb) { if (coll() == kSystemReplSetNamespace.coll()) return true; if (coll() == "system.healthlog") |