From 0d12eef3ff94246a269a00347729aba07845e6bf Mon Sep 17 00:00:00 2001 From: Patrick Mooney Date: Thu, 24 Oct 2013 18:27:42 -0500 Subject: [PATCH] Improve DN formatting flexibility - Add 'spaced' function to DN objects allowing toggle of inter-RDN when rendering to a string. ('dc=test,dc=tld' vs 'dc=test, dc=tld') - Detect RDN spacing when parsing DN. --- lib/dn.js | 20 ++++++++++++++++---- test/dn.test.js | 12 ++++++++++++ test/messages/add_request.test.js | 2 +- test/messages/compare_request.test.js | 2 +- test/messages/moddn_request.test.js | 2 +- test/messages/modify_request.test.js | 2 +- test/messages/search_request.test.js | 2 +- 7 files changed, 33 insertions(+), 9 deletions(-) diff --git a/lib/dn.js b/lib/dn.js index bee7199..55549c2 100644 --- a/lib/dn.js +++ b/lib/dn.js @@ -53,11 +53,13 @@ function parse(name) { var cur = 0; var len = name.length; + var rdnSpaced = false; function parseRdn() { var rdn = new RDN(); while (cur < len) { - trim(); + var leading = trim(); + rdnSpaced = rdnSpaced || (leading > 0); var attr = parseAttrType(); trim(); if (cur >= len || name[cur++] !== '=') @@ -77,8 +79,12 @@ function parse(name) { function trim() { - while ((cur < len) && isWhitespace(name[cur])) + var count = 0; + while ((cur < len) && isWhitespace(name[cur])) { ++cur; + count++; + } + return count; } function parseAttrType() { @@ -179,7 +185,7 @@ function parse(name) { } } - return new DN(rdns); + return new DN(rdns).spaced(rdnSpaced); } @@ -196,6 +202,7 @@ function DN(rdns) { }); this.rdns = rdns.slice(); + this.rdnSpaced = true; this.__defineGetter__('length', function () { return this.rdns.length; @@ -208,7 +215,12 @@ DN.prototype.toString = function () { this.rdns.forEach(function (rdn) { _dn.push(rdn.toString()); }); - return _dn.join(', '); + return _dn.join(this.rdnSpaced ? ', ' : ','); +}; + +DN.prototype.spaced = function (spaces) { + this.rdnSpaced = (spaces === false) ? false : true; + return this; }; diff --git a/test/dn.test.js b/test/dn.test.js index aa3b243..6b8b470 100644 --- a/test/dn.test.js +++ b/test/dn.test.js @@ -131,3 +131,15 @@ test('case insensitive attribute names GH-20', function (t) { t.ok(dn1.equals(dn.parse('cn=foo, DC=bar'))); t.end(); }); + + +test('rdn spacing', function (t) { + var dn1 = dn.parse('cn=foo,dc=bar'); + var dn2 = dn.parse('cn=foo, dc=bar'); + t.ok(dn1.equals(dn2)); + t.equals(dn1.toString(), 'cn=foo,dc=bar'); + t.equals(dn2.toString(), 'cn=foo, dc=bar'); + t.equals(dn1.spaced().toString(), 'cn=foo, dc=bar'); + t.equals(dn2.spaced(false).toString(), 'cn=foo,dc=bar'); + t.end(); +}); diff --git a/test/messages/add_request.test.js b/test/messages/add_request.test.js index fe68e68..37043f9 100644 --- a/test/messages/add_request.test.js +++ b/test/messages/add_request.test.js @@ -51,7 +51,7 @@ test('new with args', function (t) { test('parse', function (t) { var ber = new BerWriter(); - ber.writeString('cn=foo,o=test'); + ber.writeString('cn=foo, o=test'); ber.startSequence(); diff --git a/test/messages/compare_request.test.js b/test/messages/compare_request.test.js index 716d008..e5efc9c 100644 --- a/test/messages/compare_request.test.js +++ b/test/messages/compare_request.test.js @@ -45,7 +45,7 @@ test('new with args', function (t) { test('parse', function (t) { var ber = new BerWriter(); - ber.writeString('cn=foo,o=test'); + ber.writeString('cn=foo, o=test'); ber.startSequence(); ber.writeString('sn'); diff --git a/test/messages/moddn_request.test.js b/test/messages/moddn_request.test.js index 375acff..6b55ea7 100644 --- a/test/messages/moddn_request.test.js +++ b/test/messages/moddn_request.test.js @@ -45,7 +45,7 @@ test('new with args', function (t) { test('parse', function (t) { var ber = new BerWriter(); - ber.writeString('cn=foo,o=test'); + ber.writeString('cn=foo, o=test'); ber.writeString('cn=foo2'); ber.writeBoolean(true); diff --git a/test/messages/modify_request.test.js b/test/messages/modify_request.test.js index 8b62727..046e216 100644 --- a/test/messages/modify_request.test.js +++ b/test/messages/modify_request.test.js @@ -55,7 +55,7 @@ test('new with args', function (t) { test('parse', function (t) { var ber = new BerWriter(); - ber.writeString('cn=foo,o=test'); + ber.writeString('cn=foo, o=test'); ber.startSequence(); ber.startSequence(); diff --git a/test/messages/search_request.test.js b/test/messages/search_request.test.js index 6975731..30ec9c4 100644 --- a/test/messages/search_request.test.js +++ b/test/messages/search_request.test.js @@ -58,7 +58,7 @@ test('parse', function (t) { }); var ber = new BerWriter(); - ber.writeString('cn=foo,o=test'); + ber.writeString('cn=foo, o=test'); ber.writeEnumeration(0); ber.writeEnumeration(0); ber.writeInt(1);