mirror of
https://github.com/mongodb/mongo.git
synced 2024-12-01 09:32:32 +01:00
75 lines
2.6 KiB
JavaScript
75 lines
2.6 KiB
JavaScript
// Test that sessions can not be resumed by deleted and recreated user.
|
|
|
|
(function() {
|
|
'use strict';
|
|
|
|
const kInvalidationIntervalSecs = 5;
|
|
|
|
function runTest(s0, s1) {
|
|
assert(s0);
|
|
assert(s1);
|
|
const admin = s0.getDB('admin');
|
|
|
|
function checkIdType(username) {
|
|
const user = admin.system.users.find({user: username, db: 'admin'}).toArray()[0];
|
|
const id = user._id;
|
|
const userId = user.userId;
|
|
assert.eq(typeof(id), 'string');
|
|
assert.eq(id, 'admin.' + username);
|
|
assert.eq(typeof(userId), 'object');
|
|
assert.eq(tojson(userId).substring(0, 5), 'UUID(');
|
|
}
|
|
|
|
admin.createUser({user: 'admin', pwd: 'pass', roles: jsTest.adminUserRoles});
|
|
assert(admin.auth('admin', 'pass'));
|
|
checkIdType('admin');
|
|
|
|
admin.createUser({user: 'user', pwd: 'pass', roles: jsTest.basicUserRoles});
|
|
checkIdType('user');
|
|
admin.logout();
|
|
|
|
// Connect as basic user and create a session.
|
|
assert(admin.auth('user', 'pass'));
|
|
assert.writeOK(admin.mycoll.insert({_id: "foo", data: "bar"}));
|
|
|
|
// Perform administrative commands via separate shell.
|
|
function evalCmd(cmd) {
|
|
const uri = 'mongodb://admin:pass@localhost:' + s1.port + '/admin';
|
|
const result = runMongoProgram('./mongo', uri, '--eval', cmd);
|
|
assert.eq(result, 0, "Command failed");
|
|
}
|
|
evalCmd('db.dropUser("user"); ');
|
|
evalCmd('db.createUser({user: "user", pwd: "secret", roles: ["root"]});');
|
|
|
|
if (s0 !== s1) {
|
|
// Wait for twice the invalidation interval when sharding.
|
|
sleep(2 * kInvalidationIntervalSecs * 1000);
|
|
}
|
|
|
|
// This should fail due to invalid user session.
|
|
const thrown =
|
|
assert.throws(() => admin.mycoll.find({}).toArray(), [], "Able to find after recreate");
|
|
assert.eq(thrown.code, ErrorCodes.Unauthorized, "Threw something other than unauthorized");
|
|
}
|
|
|
|
const mongod = MongoRunner.runMongod({auth: ''});
|
|
runTest(mongod, mongod);
|
|
MongoRunner.stopMongod(mongod);
|
|
|
|
// TODO: Remove 'shardAsReplicaSet: false' when SERVER-32672 is fixed.
|
|
const st = new ShardingTest({
|
|
shards: 1,
|
|
mongos: 2,
|
|
config: 1,
|
|
other: {
|
|
keyFile: 'jstests/libs/key1',
|
|
shardAsReplicaSet: false,
|
|
mongosOptions: {
|
|
setParameter: 'userCacheInvalidationIntervalSecs=' + kInvalidationIntervalSecs,
|
|
},
|
|
},
|
|
});
|
|
runTest(st.s0, st.s1);
|
|
st.stop();
|
|
})();
|