summaryrefslogtreecommitdiff
path: root/tools/dump.cpp
diff options
context:
space:
mode:
authorAntonin Kral <a.kral@bobek.cz>2011-08-23 08:47:18 +0200
committerAntonin Kral <a.kral@bobek.cz>2011-08-23 08:47:18 +0200
commita3bbc293c62e68425bdf6f8e983e2bfaa97ab06e (patch)
tree835c5b2f35a8ad1b46a49680524dfe884cae1d1b /tools/dump.cpp
parentbf8d466302e046d534b67751d012669f43bf672a (diff)
parentcbe2d992e9cd1ea66af9fa91df006106775d3073 (diff)
downloadmongodb-a3bbc293c62e68425bdf6f8e983e2bfaa97ab06e.tar.gz
Merge commit 'upstream/1.8.3'
Diffstat (limited to 'tools/dump.cpp')
-rw-r--r--tools/dump.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/tools/dump.cpp b/tools/dump.cpp
index 155f84b..29553f4 100644
--- a/tools/dump.cpp
+++ b/tools/dump.cpp
@@ -333,13 +333,22 @@ public:
auth( "admin" );
BSONObj res = conn( true ).findOne( "admin.$cmd" , BSON( "listDatabases" << 1 ) );
- BSONObj dbs = res.getField( "databases" ).embeddedObjectUserCheck();
+ if ( ! res["databases"].isABSONObj() ) {
+ error() << "output of listDatabases isn't what we expected, no 'databases' field:\n" << res << endl;
+ return -2;
+ }
+ BSONObj dbs = res["databases"].embeddedObjectUserCheck();
set<string> keys;
dbs.getFieldNames( keys );
for ( set<string>::iterator i = keys.begin() ; i != keys.end() ; i++ ) {
string key = *i;
+
+ if ( ! dbs[key].isABSONObj() ) {
+ error() << "database field not an object key: " << key << " value: " << dbs[key] << endl;
+ return -3;
+ }
- BSONObj dbobj = dbs.getField( key ).embeddedObjectUserCheck();
+ BSONObj dbobj = dbs[key].embeddedObjectUserCheck();
const char * dbName = dbobj.getField( "name" ).valuestr();
if ( (string)dbName == "local" )