diff options
author | Tess Avitabile <tess.avitabile@mongodb.com> | 2016-04-28 16:36:11 -0400 |
---|---|---|
committer | Tess Avitabile <tess.avitabile@mongodb.com> | 2016-05-05 10:29:06 -0400 |
commit | f7a46a118288ba0ce45c7664777ea0e89c2eb845 (patch) | |
tree | d9ba6c6981072ce4b836617ebb1889ac17e4fcc2 /src/mongo/db/auth | |
parent | f49018bca41048d8a4f729ccc0489ea6be073a20 (diff) | |
download | mongo-f7a46a118288ba0ce45c7664777ea0e89c2eb845.tar.gz |
SERVER-23610 CanonicalQuery should own a CollatorInterface
Diffstat (limited to 'src/mongo/db/auth')
-rw-r--r-- | src/mongo/db/auth/authz_manager_external_state_local.cpp | 15 | ||||
-rw-r--r-- | src/mongo/db/auth/authz_manager_external_state_mock.cpp | 2 | ||||
-rw-r--r-- | src/mongo/db/auth/role_graph.h | 5 | ||||
-rw-r--r-- | src/mongo/db/auth/role_graph_update.cpp | 10 |
4 files changed, 20 insertions, 12 deletions
diff --git a/src/mongo/db/auth/authz_manager_external_state_local.cpp b/src/mongo/db/auth/authz_manager_external_state_local.cpp index 7525464f6bb..5d76027fc22 100644 --- a/src/mongo/db/auth/authz_manager_external_state_local.cpp +++ b/src/mongo/db/auth/authz_manager_external_state_local.cpp @@ -370,14 +370,16 @@ Status AuthzManagerExternalStateLocal::_initializeRoleGraph(OperationContext* tx class AuthzManagerExternalStateLocal::AuthzManagerLogOpHandler : public RecoveryUnit::Change { public: - // None of the parameters below (except externalState) need to live longer than - // the instantiations of this class - AuthzManagerLogOpHandler(AuthzManagerExternalStateLocal* externalState, + // None of the parameters below (except txn and externalState) need to live longer than the + // instantiations of this class + AuthzManagerLogOpHandler(OperationContext* txn, + AuthzManagerExternalStateLocal* externalState, const char* op, const char* ns, const BSONObj& o, const BSONObj* o2) - : _externalState(externalState), + : _txn(txn), + _externalState(externalState), _op(op), _ns(ns), _o(o.getOwned()), @@ -388,7 +390,7 @@ public: virtual void commit() { stdx::lock_guard<stdx::mutex> lk(_externalState->_roleGraphMutex); Status status = _externalState->_roleGraph.handleLogOp( - _op.c_str(), NamespaceString(_ns.c_str()), _o, _isO2Set ? &_o2 : NULL); + _txn, _op.c_str(), NamespaceString(_ns.c_str()), _o, _isO2Set ? &_o2 : NULL); if (status == ErrorCodes::OplogOperationUnsupported) { _externalState->_roleGraph = RoleGraph(); @@ -419,6 +421,7 @@ public: virtual void rollback() {} private: + OperationContext* _txn; AuthzManagerExternalStateLocal* _externalState; const std::string _op; const std::string _ns; @@ -432,7 +435,7 @@ void AuthzManagerExternalStateLocal::logOp( OperationContext* txn, const char* op, const char* ns, const BSONObj& o, const BSONObj* o2) { if (ns == AuthorizationManager::rolesCollectionNamespace.ns() || ns == AuthorizationManager::adminCommandNamespace.ns()) { - txn->recoveryUnit()->registerChange(new AuthzManagerLogOpHandler(this, op, ns, o, o2)); + txn->recoveryUnit()->registerChange(new AuthzManagerLogOpHandler(txn, this, op, ns, o, o2)); } } diff --git a/src/mongo/db/auth/authz_manager_external_state_mock.cpp b/src/mongo/db/auth/authz_manager_external_state_mock.cpp index 47f65d888c4..6bab48f91e9 100644 --- a/src/mongo/db/auth/authz_manager_external_state_mock.cpp +++ b/src/mongo/db/auth/authz_manager_external_state_mock.cpp @@ -204,7 +204,7 @@ Status AuthzManagerExternalStateMock::updateOne(OperationContext* txn, if (query.hasField("_id")) { document.root().appendElement(query["_id"]); } - status = driver.populateDocumentWithQueryFields(query, NULL, document); + status = driver.populateDocumentWithQueryFields(txn, query, NULL, document); if (!status.isOK()) { return status; } diff --git a/src/mongo/db/auth/role_graph.h b/src/mongo/db/auth/role_graph.h index 50a0c47a857..42512312b64 100644 --- a/src/mongo/db/auth/role_graph.h +++ b/src/mongo/db/auth/role_graph.h @@ -41,6 +41,8 @@ namespace mongo { +class OperationContext; + /** * A graph of role and privilege relationships. * @@ -240,7 +242,8 @@ public: * operation is not supported, and other codes (typically BadValue) if the oplog operation * is ill-described. */ - Status handleLogOp(const char* op, + Status handleLogOp(OperationContext* txn, + const char* op, const NamespaceString& ns, const BSONObj& o, const BSONObj* o2); diff --git a/src/mongo/db/auth/role_graph_update.cpp b/src/mongo/db/auth/role_graph_update.cpp index 62df4a33a4b..6d44385b8f8 100644 --- a/src/mongo/db/auth/role_graph_update.cpp +++ b/src/mongo/db/auth/role_graph_update.cpp @@ -160,7 +160,8 @@ Status handleOplogInsert(RoleGraph* roleGraph, const BSONObj& insertedObj) { * * Treats all updates as upserts. */ -Status handleOplogUpdate(RoleGraph* roleGraph, +Status handleOplogUpdate(OperationContext* txn, + RoleGraph* roleGraph, const BSONObj& updatePattern, const BSONObj& queryPattern) { RoleName roleToUpdate; @@ -178,7 +179,7 @@ Status handleOplogUpdate(RoleGraph* roleGraph, status = AuthorizationManager::getBSONForRole(roleGraph, roleToUpdate, roleDocument.root()); if (status == ErrorCodes::RoleNotFound) { // The query pattern will only contain _id, no other immutable fields are present - status = driver.populateDocumentWithQueryFields(queryPattern, NULL, roleDocument); + status = driver.populateDocumentWithQueryFields(txn, queryPattern, NULL, roleDocument); } if (!status.isOK()) return status; @@ -273,7 +274,8 @@ Status RoleGraph::addRoleFromDocument(const BSONObj& doc) { return status; } -Status RoleGraph::handleLogOp(const char* op, +Status RoleGraph::handleLogOp(OperationContext* txn, + const char* op, const NamespaceString& ns, const BSONObj& o, const BSONObj* o2) { @@ -307,7 +309,7 @@ Status RoleGraph::handleLogOp(const char* op, return Status(ErrorCodes::InternalError, "Missing query pattern in update oplog entry."); } - return handleOplogUpdate(this, o, *o2); + return handleOplogUpdate(txn, this, o, *o2); case 'd': return handleOplogDelete(this, o); case 'n': |