UNPKG

1.53 kBJavaScriptView Raw
1// Copyright 2011 Mark Cavage, Inc. All rights reserved.
2
3var assert = require('assert-plus');
4var util = require('util');
5
6var ASN1 = require('asn1').Ber;
7var parents = require('ldap-filter');
8
9var Filter = require('./filter');
10
11
12
13///--- API
14
15function EqualityFilter(options) {
16 parents.EqualityFilter.call(this, options);
17}
18util.inherits(EqualityFilter, parents.EqualityFilter);
19Filter.mixin(EqualityFilter);
20module.exports = EqualityFilter;
21
22
23EqualityFilter.prototype.matches = function (target, strictAttrCase) {
24 assert.object(target, 'target');
25
26 var tv = parents.getAttrValue(target, this.attribute, strictAttrCase);
27 var value = this.value;
28
29 if (this.attribute.toLowerCase() === 'objectclass') {
30 /*
31 * Perform case-insensitive match for objectClass since nearly every LDAP
32 * implementation behaves in this manner.
33 */
34 value = value.toLowerCase();
35 return parents.testValues(function (v) {
36 return value === v.toLowerCase();
37 }, tv);
38 } else {
39 return parents.testValues(function (v) {
40 return value === v;
41 }, tv);
42 }
43};
44
45
46EqualityFilter.prototype.parse = function (ber) {
47 assert.ok(ber);
48
49 this.attribute = ber.readString().toLowerCase();
50 this.value = ber.readString(ASN1.OctetString, true);
51
52 if (this.attribute === 'objectclass')
53 this.value = this.value.toLowerCase();
54
55 return true;
56};
57
58
59EqualityFilter.prototype._toBer = function (ber) {
60 assert.ok(ber);
61
62 ber.writeString(this.attribute);
63 ber.writeBuffer(this.raw, ASN1.OctetString);
64
65 return ber;
66};