Status handlePreValidationMongoShellOptions(const moe::Environment& params, const std::vector<std::string>& args) { if (params.count("help")) { std::cout << getMongoShellHelp(args[0], moe::startupOptions) << std::endl; ::_exit(EXIT_CLEAN); } if (params.count("version")) { cout << "MongoDB shell version: " << mongo::versionString << endl; ::_exit(EXIT_CLEAN); } if (params.count("quiet")) { mongo::serverGlobalParams.quiet = true; } #ifdef MONGO_SSL Status ret = storeSSLClientOptions(params); if (!ret.isOK()) { return ret; } #endif if (params.count("ipv6")) { mongo::enableIPv6(); } if (params.count("verbose")) { logger::globalLogDomain()->setMinimumLoggedSeverity(logger::LogSeverity::Debug(1)); } return Status::OK(); }
Status storeMongoShellOptions(const moe::Environment& params, const std::vector<std::string>& args) { if (params.count("quiet")) { mongo::serverGlobalParams.quiet = true; } #ifdef MONGO_SSL Status ret = storeSSLClientOptions(params); if (!ret.isOK()) { return ret; } #endif if (params.count("ipv6")) { mongo::enableIPv6(); } if (params.count("verbose")) { logger::globalLogDomain()->setMinimumLoggedSeverity(logger::LogSeverity::Debug(1)); } if (params.count("port")) { shellGlobalParams.port = params["port"].as<string>(); } if (params.count("host")) { shellGlobalParams.dbhost = params["host"].as<string>(); } if (params.count("eval")) { shellGlobalParams.script = params["eval"].as<string>(); } if (params.count("username")) { shellGlobalParams.username = params["username"].as<string>(); } if (params.count("password")) { shellGlobalParams.usingPassword = true; shellGlobalParams.password = params["password"].as<string>(); } if (params.count("authenticationDatabase")) { shellGlobalParams.authenticationDatabase = params["authenticationDatabase"].as<string>(); } if (params.count("authenticationMechanism")) { shellGlobalParams.authenticationMechanism = params["authenticationMechanism"].as<string>(); } if (params.count("shell")) { shellGlobalParams.runShell = true; } if (params.count("nodb")) { shellGlobalParams.nodb = true; } if (params.count("norc")) { shellGlobalParams.norc = true; } if (params.count("files")) { shellGlobalParams.files = params["files"].as< vector<string> >(); } if (params.count("nokillop")) { mongo::shell_utils::_nokillop = true; } if (params.count("autokillop")) { shellGlobalParams.autoKillOp = true; } if (params.count("useLegacyWriteOps")) { shellGlobalParams.writeMode = "legacy"; } if (params.count("writeMode")) { std::string mode = params["writeMode"].as<string>(); if (mode != "commands" && mode != "legacy" && mode != "compatibility") { throw MsgAssertionException(17396, mongoutils::str::stream() << "Unknown writeMode option: " << mode); } shellGlobalParams.writeMode = mode; } /* This is a bit confusing, here are the rules: * * if nodb is set then all positional parameters are files * otherwise the first positional parameter might be a dbaddress, but * only if one of these conditions is met: * - it contains no '.' after the last appearance of '\' or '/' * - it doesn't end in '.js' and it doesn't specify a path to an existing file */ if (params.count("dbaddress")) { string dbaddress = params["dbaddress"].as<string>(); if (shellGlobalParams.nodb) { shellGlobalParams.files.insert( shellGlobalParams.files.begin(), dbaddress ); } else { string basename = dbaddress.substr( dbaddress.find_last_of( "/\\" ) + 1 ); if (basename.find_first_of( '.' ) == string::npos || (basename.find(".js", basename.size() - 3) == string::npos && !::mongo::shell_utils::fileExists(dbaddress))) { shellGlobalParams.url = dbaddress; } else { shellGlobalParams.files.insert( shellGlobalParams.files.begin(), dbaddress ); } } } if ( shellGlobalParams.url == "*" ) { StringBuilder sb; sb << "ERROR: " << "\"*\" is an invalid db address"; sb << getMongoShellHelp(args[0], moe::startupOptions); return Status(ErrorCodes::BadValue, sb.str()); } return Status::OK(); }
Status storeGeneralToolOptions(const moe::Environment& params, const std::vector<std::string>& args) { toolGlobalParams.name = args[0]; storageGlobalParams.prealloc = false; // The default value may vary depending on compile options, but for tools // we want durability to be disabled. storageGlobalParams.dur = false; // Set authentication parameters if (params.count("authenticationDatabase")) { toolGlobalParams.authenticationDatabase = params["authenticationDatabase"].as<string>(); } if (params.count("authenticationMechanism")) { toolGlobalParams.authenticationMechanism = params["authenticationMechanism"].as<string>(); } if (params.count("verbose")) { logger::globalLogDomain()->setMinimumLoggedSeverity(logger::LogSeverity::Debug(1)); } for (string s = "vv"; s.length() <= 12; s.append("v")) { if (params.count(s)) { logger::globalLogDomain()->setMinimumLoggedSeverity( logger::LogSeverity::Debug(s.length())); } } toolGlobalParams.quiet = params.count("quiet"); #ifdef MONGO_SSL Status ret = storeSSLClientOptions(params); if (!ret.isOK()) { return ret; } #endif if (args.empty()) { return Status(ErrorCodes::InternalError, "Cannot get binary name: argv array is empty"); } // setup binary name toolGlobalParams.name = args[0]; size_t i = toolGlobalParams.name.rfind('/'); if (i != string::npos) { toolGlobalParams.name = toolGlobalParams.name.substr(i + 1); } toolGlobalParams.db = "test"; toolGlobalParams.coll = ""; toolGlobalParams.noconnection = false; if (params.count("db")) toolGlobalParams.db = params["db"].as<string>(); if (params.count("collection")) toolGlobalParams.coll = params["collection"].as<string>(); if (params.count("username")) toolGlobalParams.username = params["username"].as<string>(); if (params.count("password")) { toolGlobalParams.password = params["password"].as<string>(); if (toolGlobalParams.password.empty()) { toolGlobalParams.password = askPassword(); } } if (params.count("ipv6")) { enableIPv6(); } toolGlobalParams.dbpath = getParam("dbpath"); toolGlobalParams.useDirectClient = hasParam("dbpath"); if (toolGlobalParams.useDirectClient && params.count("journal")) { storageGlobalParams.dur = true; } if (!toolGlobalParams.useDirectClient) { toolGlobalParams.connectionString = "127.0.0.1"; if (params.count("host")) { toolGlobalParams.hostSet = true; toolGlobalParams.host = params["host"].as<string>(); toolGlobalParams.connectionString = params["host"].as<string>(); } if (params.count("port")) { toolGlobalParams.portSet = true; toolGlobalParams.port = params["port"].as<string>(); toolGlobalParams.connectionString += ':' + params["port"].as<string>(); } } else { if (params.count("directoryperdb")) { storageGlobalParams.directoryperdb = true; } toolGlobalParams.connectionString = "DIRECT"; } return Status::OK(); }