Skip to content

Commit

Permalink
Wire up _sendOldAuth
Browse files Browse the repository at this point in the history
  • Loading branch information
felixge committed Sep 2, 2010
1 parent 246d1f1 commit d4c6970
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 75 deletions.
2 changes: 1 addition & 1 deletion lib/mysql/auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ exports.myRnd = function(r){

exports.scramble323 = function(message, password) {

if (!password) return new Buffer();
if (!password) return new Buffer(); // @todo, this fails, needs fixing
var to = new Buffer(8);

var hash_pass = this.hashPassword(password);
Expand Down
36 changes: 17 additions & 19 deletions lib/mysql/client.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ function Client(config) {
this.charsetNumber = 8;
this.debug = false;

this._greeting = null;
this._queue = [];
this._connection = null;
this._parser = null;
Expand Down Expand Up @@ -195,7 +196,7 @@ Client.prototype._handlePacket = function(packet) {
}

if (packet.type == Parser.USE_OLD_PASSWORD_PROTOCOL_PACKET) {
this._sendOldAuth(packet);
this._sendOldAuth(this._greeting);
return;
}

Expand Down Expand Up @@ -244,6 +245,11 @@ Client.prototype._sendAuth = function(greeting) {
packet.writeNullTerminated(this.database);

this.write(packet);

// Keep a reference to the greeting packet. We might receive a
// USE_OLD_PASSWORD_PROTOCOL_PACKET as a response, in which case we will need
// the greeting packet again. See _sendOldAuth()
this._greeting = greeting;
};

Client._packetToUserObject = function(packet) {
Expand Down Expand Up @@ -290,24 +296,16 @@ Client.prototype._debugPacket = function(packet) {
};

Client.prototype._sendOldAuth = function(greeting) {
//var token = auth.token(this.password, greeting.scrambleBuffer),
//packetSize = (
//4 + 4 + 1 + 23 +
//this.user.length + 1 +
//token.length + 1 +
//this.database.length + 1
//),
//packet = new OutgoingPacket(packetSize, greeting.number+1);

//packet.writeNumber(4, this.flags);
//packet.writeNumber(4, this.maxPacketSize);
//packet.writeNumber(1, this.charsetNumber);
//packet.writeFiller(23);
//packet.writeNullTerminated(this.user);
//packet.writeLengthCoded(token);
//packet.writeNullTerminated(this.database);

//this.write(packet);
var token = auth.scramble323(greeting.scrambleBuffer, this.password),
packetSize = (
token.length + 1
),
packet = new OutgoingPacket(packetSize, greeting.number+3);

packet.write(token);
packet.writeFiller(1);

this.write(packet);
};

// Client Flags
Expand Down
85 changes: 30 additions & 55 deletions test/simple/test-client.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ test(function constructor() {
assert.strictEqual(client.maxPacketSize, 0x01000000);
assert.strictEqual(client.charsetNumber, 8);

assert.strictEqual(client._greeting, null);
assert.deepEqual(client._queue, []);
assert.strictEqual(client._connection, null);
assert.strictEqual(client._parser, null);
Expand Down Expand Up @@ -364,10 +365,11 @@ test(function _handlePacket() {
})();

(function testUseOldPasswordProtocol() {
client._greeting = {};
var PACKET = {type: Parser.USE_OLD_PASSWORD_PROTOCOL_PACKET};

gently.expect(client, '_sendOldAuth', function (packet) {
assert.strictEqual(packet, PACKET);
gently.expect(client, '_sendOldAuth', function (greeting) {
assert.strictEqual(greeting, client._greeting);
});

client._handlePacket(PACKET);
Expand Down Expand Up @@ -510,6 +512,7 @@ test(function _sendAuth() {
});

client._sendAuth(GREETING);
assert.strictEqual(client._greeting, GREETING);
});

test(function _packetToUserObject() {
Expand Down Expand Up @@ -553,65 +556,37 @@ test(function _packetToUserObject() {
});

test(function _sendOldAuth() {
var GREETING = {scrambleBuffer: new Buffer(20), number: 1},
var GREETING = {scrambleBuffer: new Buffer(8), number: 1},
TOKEN = new Buffer(8),
PACKET;

client.user = 'root';
client.password = 'hello world';

//gently.expect(HIJACKED['./auth'], 'token', function(password, scramble) {
//assert.strictEqual(password, client.password);
//assert.strictEqual(scramble, GREETING.scrambleBuffer);
//return TOKEN;
//});

//gently.expect(OutgoingPacketStub, 'new', function(size, number) {
//assert.equal(size, (
//4 + 4 + 1 + 23 +
//client.user.length + 1 +
//TOKEN.length + 1 +
//client.database.length + 1
//));

//assert.equal(number, GREETING.number + 1);
//PACKET = this;

//gently.expect(PACKET, 'writeNumber', function(bytes, number) {
//assert.strictEqual(bytes, 4);
//assert.strictEqual(client.flags, number);
//});

//gently.expect(PACKET, 'writeNumber', function(bytes, number) {
//assert.strictEqual(bytes, 4);
//assert.strictEqual(client.maxPacketSize, number);
//});

//gently.expect(PACKET, 'writeNumber', function(bytes, number) {
//assert.strictEqual(bytes, 1);
//assert.strictEqual(client.charsetNumber, number);
//});

//gently.expect(PACKET, 'writeFiller', function(bytes) {
//assert.strictEqual(bytes, 23);
//});

//gently.expect(PACKET, 'writeNullTerminated', function(user) {
//assert.strictEqual(user, client.user);
//});

//gently.expect(PACKET, 'writeLengthCoded', function(token) {
//assert.strictEqual(token, TOKEN);
//});

//gently.expect(PACKET, 'writeNullTerminated', function(database) {
//assert.strictEqual(database, client.database);
//});

//gently.expect(client, 'write', function(packet) {
//assert.strictEqual(packet, PACKET);
//});
//});
gently.expect(HIJACKED['./auth'], 'scramble323', function(scramble, password) {
assert.strictEqual(scramble, GREETING.scrambleBuffer);
assert.strictEqual(password, client.password);
return TOKEN;
});

gently.expect(OutgoingPacketStub, 'new', function(size, number) {
assert.equal(size, TOKEN.length + 1);

assert.equal(number, GREETING.number + 3);
PACKET = this;

gently.expect(PACKET, 'write', function(token) {
assert.strictEqual(token, TOKEN);
});

gently.expect(PACKET, 'writeFiller', function(bytes) {
assert.strictEqual(bytes, 1);
});

gently.expect(client, 'write', function(packet) {
assert.strictEqual(packet, PACKET);
});
});

client._sendOldAuth(GREETING);
});

0 comments on commit d4c6970

Please sign in to comment.