Match objectClass case-insensitively in EqualityFilter
Fix mcavage/node-ldapjs#277
This commit is contained in:
parent
000959d888
commit
acc1ca8f43
|
@ -1,6 +1,6 @@
|
|||
// Copyright 2011 Mark Cavage, Inc. All rights reserved.
|
||||
|
||||
var assert = require('assert');
|
||||
var assert = require('assert-plus');
|
||||
var util = require('util');
|
||||
|
||||
var ASN1 = require('asn1').Ber;
|
||||
|
@ -20,6 +20,29 @@ Filter.mixin(EqualityFilter);
|
|||
module.exports = EqualityFilter;
|
||||
|
||||
|
||||
EqualityFilter.prototype.matches = function (target, strictAttrCase) {
|
||||
assert.object(target, 'target');
|
||||
|
||||
var tv = parents.getAttrValue(target, this.attribute, strictAttrCase);
|
||||
var value = this.value;
|
||||
|
||||
if (this.attribute.toLowerCase() === 'objectclass') {
|
||||
/*
|
||||
* Perform case-insensitive match for objectClass since nearly every LDAP
|
||||
* implementation behaves in this manner.
|
||||
*/
|
||||
value = value.toLowerCase();
|
||||
return parents.testValues(function (v) {
|
||||
return value === v.toLowerCase();
|
||||
}, tv);
|
||||
} else {
|
||||
return parents.testValues(function (v) {
|
||||
return value === v;
|
||||
}, tv);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
EqualityFilter.prototype.parse = function (ber) {
|
||||
assert.ok(ber);
|
||||
|
||||
|
|
|
@ -182,3 +182,17 @@ test('handle values passed via buffer', function (t) {
|
|||
}
|
||||
t.end();
|
||||
});
|
||||
|
||||
|
||||
test('GH-277 objectClass should be case-insensitive', function (t) {
|
||||
var f = new EqualityFilter({
|
||||
attribute: 'objectClass',
|
||||
value: 'CaseInsensitiveObj'
|
||||
});
|
||||
t.ok(f);
|
||||
t.ok(f.matches({ objectClass: 'CaseInsensitiveObj' }));
|
||||
t.ok(f.matches({ OBJECTCLASS: 'CASEINSENSITIVEOBJ' }));
|
||||
t.ok(f.matches({ objectclass: 'caseinsensitiveobj' }));
|
||||
t.ok(!f.matches({ objectclass: 'matchless' }));
|
||||
t.end();
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue