From badf820523730175b27abec7ecb167037e412135 Mon Sep 17 00:00:00 2001 From: John Johnston <john.johnston@aquera.com> Date: Thu, 29 Jul 2021 08:53:40 -0700 Subject: [PATCH 1/2] fix: modifyDn length fix --- lib/messages/moddn_request.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/messages/moddn_request.js b/lib/messages/moddn_request.js index 580e7a0..0f54823 100644 --- a/lib/messages/moddn_request.js +++ b/lib/messages/moddn_request.js @@ -60,7 +60,7 @@ ModifyDNRequest.prototype._toBer = function (ber) { const len = Buffer.byteLength(s) ber.writeByte(0x80) // MODIFY_DN_REQUEST_NEW_SUPERIOR_TAG - ber.writeByte(len) + ber.writeLength(len) ber._ensure(len) ber._buf.write(s, ber._offset) ber._offset += len From 4c75096c80773ed4ffde69a60b949e8e4250226b Mon Sep 17 00:00:00 2001 From: John Johnston <john.johnston@aquera.com> Date: Sat, 31 Jul 2021 11:33:43 -0700 Subject: [PATCH 2/2] chore: add 'modify DN excessive superior length' unit test --- test/client.test.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/test/client.test.js b/test/client.test.js index 7d27a86..04e4b10 100644 --- a/test/client.test.js +++ b/test/client.test.js @@ -694,6 +694,34 @@ tap.test('modify DN excessive length (GH-480)', function (t) { }) }) +tap.test('modify DN excessive superior length', function (t) { + const { BerReader, BerWriter } = require('asn1') + const ModifyDNRequest = require('../lib/messages/moddn_request') + const ber = new BerWriter() + const entry = 'cn=Test User,ou=A Long OU ,ou=Another Long OU ,ou=Another Long OU ,dc=acompany,DC=io' + const newSuperior = 'ou=A New Long OU , ou=Another New Long OU , ou=An OU , dc=acompany, dc=io' + const newRdn = entry.replace(/(.*?),.*/, '$1') + const deleteOldRdn = true + const req = new ModifyDNRequest({ + entry: entry, + deleteOldRdn: deleteOldRdn, + controls: [] + }) + req.newRdn = newRdn + req.newSuperior = newSuperior + req._toBer(ber) + const reader = new BerReader(ber.buffer) + t.equal(reader.readString(), entry) + t.equal(reader.readString(), newRdn) + t.equal(reader.readBoolean(), deleteOldRdn) + t.equal(reader.readByte(), 0x80) + reader.readLength() + t.equal(reader._len, newSuperior.length) + reader._buf[--reader._offset] = 0x4 + t.equal(reader.readString(), newSuperior) + t.end() +}) + tap.test('search basic', function (t) { t.context.client.search('cn=test, ' + SUFFIX, '(objectclass=*)', function (err, res) { t.error(err)