summaryrefslogtreecommitdiff
path: root/src/mongo/s
diff options
context:
space:
mode:
authorSpencer T Brody <spencer@10gen.com>2012-12-11 12:42:05 -0500
committerSpencer T Brody <spencer@10gen.com>2012-12-11 17:33:19 -0500
commit7aff4a70be26ba72eb4b4ba855eac25d4a8e72d9 (patch)
tree4c859c4f93801c5999a1976b23469c0db7b8edfd /src/mongo/s
parent79782656749bd25cb4df50bfbb3df46e22236c24 (diff)
downloadmongo-7aff4a70be26ba72eb4b4ba855eac25d4a8e72d9.tar.gz
SERVER-7122 Add required privileges to more commands
Diffstat (limited to 'src/mongo/s')
-rw-r--r--src/mongo/s/d_split.cpp31
-rw-r--r--src/mongo/s/d_state.cpp36
2 files changed, 65 insertions, 2 deletions
diff --git a/src/mongo/s/d_split.cpp b/src/mongo/s/d_split.cpp
index 0c7a70fdca1..96fab9a0cc8 100644
--- a/src/mongo/s/d_split.cpp
+++ b/src/mongo/s/d_split.cpp
@@ -19,7 +19,11 @@
#include "pch.h"
#include <map>
#include <string>
+#include <vector>
+#include "mongo/db/auth/action_set.h"
+#include "mongo/db/auth/action_type.h"
+#include "mongo/db/auth/privilege.h"
#include "mongo/db/btreecursor.h"
#include "../db/commands.h"
#include "../db/jsobj.h"
@@ -47,6 +51,10 @@ namespace mongo {
virtual void help( stringstream &help ) const {
help << "Deprecated internal command. Use splitVector command instead. \n";
}
+ // No auth required as this command no longer does anything.
+ virtual void addRequiredPrivileges(const std::string& dbname,
+ const BSONObj& cmdObj,
+ std::vector<Privilege>* out) {}
bool run(const string& dbname, BSONObj& jsobj, int, string& errmsg, BSONObjBuilder& result, bool fromRepl ) {
errmsg = "medianKey command no longer supported. Calling this indicates mismatch between mongo versions.";
return false;
@@ -61,7 +69,13 @@ namespace mongo {
virtual void help( stringstream &help ) const {
help << "Internal command.\n";
}
-
+ virtual void addRequiredPrivileges(const std::string& dbname,
+ const BSONObj& cmdObj,
+ std::vector<Privilege>* out) {
+ ActionSet actions;
+ actions.addAction(ActionType::find);
+ out->push_back(Privilege(parseNs(dbname, cmdObj), actions));
+ }
bool run(const string& dbname, BSONObj& jsobj, int, string& errmsg, BSONObjBuilder& result, bool fromRepl ) {
const char* ns = jsobj.getStringField( "checkShardingIndex" );
@@ -183,6 +197,13 @@ namespace mongo {
" 'force' will produce one split point even if data is small; defaults to false\n"
"NOTE: This command may take a while to run";
}
+ virtual void addRequiredPrivileges(const std::string& dbname,
+ const BSONObj& cmdObj,
+ std::vector<Privilege>* out) {
+ ActionSet actions;
+ actions.addAction(ActionType::splitVector);
+ out->push_back(Privilege(AuthorizationManager::CLUSTER_RESOURCE_NAME, actions));
+ }
bool run(const string& dbname, BSONObj& jsobj, int, string& errmsg, BSONObjBuilder& result, bool fromRepl ) {
@@ -460,7 +481,13 @@ namespace mongo {
virtual bool slaveOk() const { return false; }
virtual bool adminOnly() const { return true; }
virtual LockType locktype() const { return NONE; }
-
+ virtual void addRequiredPrivileges(const std::string& dbname,
+ const BSONObj& cmdObj,
+ std::vector<Privilege>* out) {
+ ActionSet actions;
+ actions.addAction(ActionType::splitChunk);
+ out->push_back(Privilege(AuthorizationManager::CLUSTER_RESOURCE_NAME, actions));
+ }
bool run(const string& dbname, BSONObj& cmdObj, int, string& errmsg, BSONObjBuilder& result, bool fromRepl ) {
//
diff --git a/src/mongo/s/d_state.cpp b/src/mongo/s/d_state.cpp
index ab81e74cb1d..dccbc5fda84 100644
--- a/src/mongo/s/d_state.cpp
+++ b/src/mongo/s/d_state.cpp
@@ -25,7 +25,11 @@
#include "pch.h"
#include <map>
#include <string>
+#include <vector>
+#include "mongo/db/auth/action_set.h"
+#include "mongo/db/auth/action_type.h"
+#include "mongo/db/auth/privilege.h"
#include "../db/commands.h"
#include "../db/jsobj.h"
#include "../db/db.h"
@@ -415,6 +419,14 @@ namespace mongo {
virtual bool slaveOk() const { return true; }
+ virtual void addRequiredPrivileges(const std::string& dbname,
+ const BSONObj& cmdObj,
+ std::vector<Privilege>* out) {
+ ActionSet actions;
+ actions.addAction(ActionType::unsetSharding);
+ out->push_back(Privilege(AuthorizationManager::CLUSTER_RESOURCE_NAME, actions));
+ }
+
bool run(const string& , BSONObj& cmdObj, int, string& errmsg, BSONObjBuilder& result, bool) {
ShardedConnectionInfo::reset();
return true;
@@ -433,6 +445,14 @@ namespace mongo {
virtual bool slaveOk() const { return true; }
virtual LockType locktype() const { return NONE; }
+ virtual void addRequiredPrivileges(const std::string& dbname,
+ const BSONObj& cmdObj,
+ std::vector<Privilege>* out) {
+ ActionSet actions;
+ actions.addAction(ActionType::setShardVersion);
+ out->push_back(Privilege(AuthorizationManager::CLUSTER_RESOURCE_NAME, actions));
+ }
+
bool checkConfigOrInit( const string& configdb , bool authoritative , string& errmsg , BSONObjBuilder& result , bool locked=false ) const {
if ( configdb.size() == 0 ) {
errmsg = "no configdb";
@@ -704,6 +724,14 @@ namespace mongo {
virtual LockType locktype() const { return NONE; }
+ virtual void addRequiredPrivileges(const std::string& dbname,
+ const BSONObj& cmdObj,
+ std::vector<Privilege>* out) {
+ ActionSet actions;
+ actions.addAction(ActionType::getShardVersion);
+ out->push_back(Privilege(AuthorizationManager::CLUSTER_RESOURCE_NAME, actions));
+ }
+
bool run(const string& , BSONObj& cmdObj, int, string& errmsg, BSONObjBuilder& result, bool) {
string ns = cmdObj["getShardVersion"].valuestrsafe();
if ( ns.size() == 0 ) {
@@ -733,6 +761,14 @@ namespace mongo {
virtual LockType locktype() const { return WRITE; } // TODO: figure out how to make this not need to lock
+ virtual void addRequiredPrivileges(const std::string& dbname,
+ const BSONObj& cmdObj,
+ std::vector<Privilege>* out) {
+ ActionSet actions;
+ actions.addAction(ActionType::shardingState);
+ out->push_back(Privilege(AuthorizationManager::CLUSTER_RESOURCE_NAME, actions));
+ }
+
bool run(const string& , BSONObj& cmdObj, int, string& errmsg, BSONObjBuilder& result, bool) {
shardingState.appendInfo( result );
return true;