Status AuthzManagerExternalStateMongos::getAllDatabaseNames( std::vector<std::string>* dbnames) const { std::vector<BSONObj> dbDocs; scoped_ptr<ScopedDbConnection> conn(getConnectionForUsersCollection("config.databases")); conn->get()->findN(dbDocs, DatabaseType::ConfigNS, Query(), 0); conn->done(); for (std::vector<BSONObj>::const_iterator it = dbDocs.begin(); it != dbDocs.end(); ++it) { DatabaseType dbInfo; std::string errmsg; if (!dbInfo.parseBSON( *it, &errmsg) || !dbInfo.isValid( &errmsg )) { return Status(ErrorCodes::FailedToParse, errmsg); } dbnames->push_back(dbInfo.getName()); } dbnames->push_back("config"); // config db isn't listed in config.databases return Status::OK(); }
Status AuthzManagerExternalStateMongos::getAllDatabaseNames( std::vector<std::string>* dbnames) { try { scoped_ptr<ScopedDbConnection> conn( getConnectionForUsersCollection(DatabaseType::ConfigNS)); auto_ptr<DBClientCursor> c = conn->get()->query(DatabaseType::ConfigNS, Query()); while (c->more()) { DatabaseType dbInfo; std::string errmsg; if (!dbInfo.parseBSON( c->nextSafe(), &errmsg) || !dbInfo.isValid( &errmsg )) { return Status(ErrorCodes::FailedToParse, errmsg); } dbnames->push_back(dbInfo.getName()); } conn->done(); dbnames->push_back("config"); // config db isn't listed in config.databases return Status::OK(); } catch (const DBException& e) { return e.toStatus(); } }