diff options
author | Jonathan Reams <jbreams@mongodb.com> | 2016-06-28 15:39:08 -0400 |
---|---|---|
committer | Jonathan Reams <jbreams@mongodb.com> | 2016-06-30 10:50:39 -0400 |
commit | 85e60b54d73f185113575bdcb82f691471e12478 (patch) | |
tree | 8080b9ba26a8bd579af02549382c42732ae400d3 /src | |
parent | 515b33fed131084cbef6da9be499642715bc12f1 (diff) | |
download | mongo-85e60b54d73f185113575bdcb82f691471e12478.tar.gz |
SERVER-23126 Check result of connect when constructing DBClient from MongoURI
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/client/SConscript | 2 | ||||
-rw-r--r-- | src/mongo/client/mongo_uri_connect.cpp | 4 | ||||
-rw-r--r-- | src/mongo/client/mongo_uri_test.cpp | 13 |
3 files changed, 18 insertions, 1 deletions
diff --git a/src/mongo/client/SConscript b/src/mongo/client/SConscript index a01d60ffe87..78601d0b1b6 100644 --- a/src/mongo/client/SConscript +++ b/src/mongo/client/SConscript @@ -22,7 +22,7 @@ env.CppUnitTest( 'mongo_uri_test.cpp', ], LIBDEPS=[ - 'connection_string', + 'clientdriver', ] ) diff --git a/src/mongo/client/mongo_uri_connect.cpp b/src/mongo/client/mongo_uri_connect.cpp index 7918cacb93f..d5b1bb0d0df 100644 --- a/src/mongo/client/mongo_uri_connect.cpp +++ b/src/mongo/client/mongo_uri_connect.cpp @@ -178,6 +178,10 @@ DBClientBase* MongoURI::connect(std::string& errmsg) const { } auto ret = _connectString.connect(errmsg, socketTimeout); + if (!ret) { + return ret; + } + if (!_user.empty()) { ret->auth(_makeAuthObjFromOptions(ret->getMaxWireVersion())); } diff --git a/src/mongo/client/mongo_uri_test.cpp b/src/mongo/client/mongo_uri_test.cpp index f67aad7b60f..71e43989a3f 100644 --- a/src/mongo/client/mongo_uri_test.cpp +++ b/src/mongo/client/mongo_uri_test.cpp @@ -308,4 +308,17 @@ TEST(MongoURI, InvalidURIs) { } } +TEST(MongoURI, ValidButBadURIsFailToConnect) { + // "invalid" is a TLD that cannot exit on the public internet (see rfc2606). It should always + // parse as a valid URI, but connecting should always fail. + auto sw_uri = MongoURI::parse("mongodb://user:pass@hostname.invalid:12345"); + ASSERT_OK(sw_uri.getStatus()); + auto uri = sw_uri.getValue(); + ASSERT_TRUE(uri.isValid()); + + std::string errmsg; + auto dbclient = uri.connect(errmsg); + ASSERT_EQ(dbclient, static_cast<decltype(dbclient)>(nullptr)); +} + } // namespace |