Skip to content

Commit b7d28d3

Browse files
fix(NODE-5609): node driver omits base64 padding in sasl-continue command (#3975)
1 parent aed1cf0 commit b7d28d3

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

src/cmap/auth/scram.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ function parsePayload(payload: Binary) {
212212
const dict: Document = {};
213213
const parts = payloadStr.split(',');
214214
for (let i = 0; i < parts.length; i++) {
215-
const valueParts = parts[i].split('=');
215+
const valueParts = (parts[i].match(/^([^=]*)=(.*)$/) ?? []).slice(1);
216216
dict[valueParts[0]] = valueParts[1];
217217
}
218218
return dict;

test/unit/assorted/scram_iterations.test.ts

+33
Original file line numberDiff line numberDiff line change
@@ -129,4 +129,37 @@ describe('SCRAM Iterations Tests', function () {
129129
.to.have.property('message')
130130
.that.matches(/connection(.+)closed/);
131131
});
132+
133+
it('should preserve trailing "=" from saslStart responses that are passed to saslContinue', async function () {
134+
const credentials = new MongoCredentials({
135+
mechanism: 'DEFAULT',
136+
source: 'db',
137+
username: 'user',
138+
password: 'pencil',
139+
mechanismProperties: {}
140+
});
141+
let payload;
142+
client.s.options.credentials = credentials;
143+
144+
server.setMessageHandler(request => {
145+
const doc = request.document;
146+
if (isHello(doc)) {
147+
return request.reply(Object.assign({}, mock.HELLO));
148+
} else if (doc.saslStart) {
149+
return request.reply({
150+
ok: 1,
151+
done: false,
152+
payload: Buffer.from(
153+
'n=__system,r=r7RuW8nC89hmrlIPSpatiEGnZGkuGcsq,r=r7RuW8nC89hmrlIPSpatiEGnZGkuGcsquPuvfddlU3NavdfJxv/XKg==,s=b7rCae/2BRjlcsn93RoUOfqtiwaf0nrXvSKLdQ==,i=15000'
154+
)
155+
});
156+
} else if (doc.saslContinue) {
157+
payload = doc.payload.toString('utf8');
158+
request.connection.destroy();
159+
}
160+
});
161+
162+
await client.connect().catch(error => error);
163+
expect(payload).to.includes('r=r7RuW8nC89hmrlIPSpatiEGnZGkuGcsquPuvfddlU3NavdfJxv/XKg==');
164+
});
132165
});

0 commit comments

Comments
 (0)