summaryrefslogtreecommitdiff
path: root/src/mongo/db/auth
diff options
context:
space:
mode:
authorTess Avitabile <tess.avitabile@mongodb.com>2016-04-28 16:36:11 -0400
committerTess Avitabile <tess.avitabile@mongodb.com>2016-05-05 10:29:06 -0400
commitf7a46a118288ba0ce45c7664777ea0e89c2eb845 (patch)
treed9ba6c6981072ce4b836617ebb1889ac17e4fcc2 /src/mongo/db/auth
parentf49018bca41048d8a4f729ccc0489ea6be073a20 (diff)
downloadmongo-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.cpp15
-rw-r--r--src/mongo/db/auth/authz_manager_external_state_mock.cpp2
-rw-r--r--src/mongo/db/auth/role_graph.h5
-rw-r--r--src/mongo/db/auth/role_graph_update.cpp10
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':