diff options
author | Antonin Kral <a.kral@bobek.cz> | 2011-08-23 08:47:17 +0200 |
---|---|---|
committer | Antonin Kral <a.kral@bobek.cz> | 2011-08-23 08:47:17 +0200 |
commit | cbe2d992e9cd1ea66af9fa91df006106775d3073 (patch) | |
tree | fca8e11a8ab7f063ae26802016068f9c814f6176 /tools/dump.cpp | |
parent | 64b33ee522375a8dc15be2875dfb7db4502259b0 (diff) | |
download | mongodb-cbe2d992e9cd1ea66af9fa91df006106775d3073.tar.gz |
Imported Upstream version 1.8.3
Diffstat (limited to 'tools/dump.cpp')
-rw-r--r-- | tools/dump.cpp | 13 |
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" ) |