示例#1
0
    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();
    }
示例#2
0
    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();
    }
示例#3
0
    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();
    }