summaryrefslogtreecommitdiff
path: root/db/dbeval.cpp
diff options
context:
space:
mode:
authorEliot Horowitz <eliot@10gen.com>2010-05-11 10:05:34 -0400
committerEliot Horowitz <eliot@10gen.com>2010-05-11 10:05:34 -0400
commita5e1865e2802a1a3abc078d5f3715aff111d95a1 (patch)
tree182807ad398cfb328ade921bee0c8e74f21a1624 /db/dbeval.cpp
parent9b9be9a4ee365f3c56f319daae20985e3b841d10 (diff)
downloadmongo-a5e1865e2802a1a3abc078d5f3715aff111d95a1.tar.gz
SERVER-778 don't allow running write command with read lock
Diffstat (limited to 'db/dbeval.cpp')
-rw-r--r--db/dbeval.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/db/dbeval.cpp b/db/dbeval.cpp
index f063cf17822..e8a42b25561 100644
--- a/db/dbeval.cpp
+++ b/db/dbeval.cpp
@@ -119,11 +119,18 @@ namespace mongo {
virtual bool requiresAuth() {
return false;
}
- virtual LockType locktype() const { return WRITE; }
+ virtual LockType locktype() const { return NONE; }
CmdEval() : Command("eval", false, "$eval") { }
bool run(const string& dbname , BSONObj& cmdObj, string& errmsg, BSONObjBuilder& result, bool fromRepl) {
+
AuthenticationInfo *ai = cc().getAuthenticationInfo();
uassert( 12598 , "$eval reads unauthorized", ai->isAuthorizedReads(dbname.c_str()) );
+
+ // write security will be enforced in DBDirectClient
+ mongolock lk( ai->isAuthorized( dbname.c_str() ) );
+ Client::Context ctx( dbname );
+
+
return dbEval(dbname.c_str(), cmdObj, result, errmsg);
}
} cmdeval;