Skip to content
This repository has been archived by the owner on May 14, 2024. It is now read-only.

filter is case sensitive #3

Closed
axkibe opened this issue Mar 14, 2023 · 3 comments
Closed

filter is case sensitive #3

axkibe opened this issue Mar 14, 2023 · 3 comments

Comments

@axkibe
Copy link

axkibe commented Mar 14, 2023

Following minimal testcase:

const ldap = require( 'ldapjs' );
const attr = {};
attr.cn = 'axel';
attr.gidNumber = '1001';
attr.uidNumber = '1001'
attr.uid = 'axel';
attr.displayName = 'axel';
attr.loginShell = '/bin/bash';
attr.homeDirectory = '/home/axel';
attr.objectclass = [ 'posixAccount', 'top' ];
const f = ldap.parseFilter('(objectClass=*)');
console.log( f.matches( attr ) );

The result with node-ldapjs 2.3.3 is true, in node-ldapjs 3.0.1 it is false.

Note the uppercase C, writing it lowercase gives the IMO correct true (or changing the attribute to match the same case)

AFAIK LDAP is supposed to be case insensitive on attributes by default, as 2.3.3 did, no?

@jsumners jsumners transferred this issue from ldapjs/node-ldapjs Mar 14, 2023
@jsumners
Copy link
Member

jsumners commented Mar 14, 2023

LDAP filter strings are defined by https://www.rfc-editor.org/rfc/rfc4515

LDAP attributes (<attributedescription> = <attributevalue>) are defined by https://www.rfc-editor.org/rfc/rfc4512#section-2.5 and https://www.rfc-editor.org/rfc/rfc4512#section-2.5.1. Specific to this issue:

Both <attributetype> and <option>
productions are case insensitive. The order in which s
appear is irrelevant. That is, any two <attributedescription>s that
consist of the same <attributetype> and same set of <option>s are
equivalent.

So it can be correct to say that objectclass === objectClass when comparing two attributes.

Scattered throughout the ldapjs <= 2 code were blocks that looked like:

if (prop.toLowerCase() === 'objectclass') {
  // do some check or something
}

Such blocks would have a comment attached like:

// Comparing case insensitive since most implementations do that for objectClass

To be clear: the ldapjs <= 2 code made an explicit exception for objectClass. For all other attribute types it defaulted to case sensitive comparisons.

In general, the spec is muddy on what to do in regard to attribute type comparisons. The closest we get is the discussion around the compare operation and the ensuing descriptions of various filters -- https://www.rfc-editor.org/rfc/rfc4511#section-4.10.

However, we retained the original case insensitive comparison feature:

const ldap = require( 'ldapjs' );
const attr = {};
attr.cn = 'axel';
attr.gidNumber = '1001';
attr.uidNumber = '1001'
attr.uid = 'axel';
attr.displayName = 'axel';
attr.loginShell = '/bin/bash';
attr.homeDirectory = '/home/axel';
attr.objectclass = [ 'posixAccount', 'top' ];
const f = ldap.parseFilter('(objectClass=*)');
console.log(
  f.matches( attr, false )
);

Note the inclusion of a second parameter being passed to f.matches. See the following declaration in the AND filter as an example:

/**
* Determines if an object represents an equivalent filter instance.
* Both the filter attribute and filter value must match the comparison
* object. All clauses of the `AND` filter, that is all "sub filters", must
* match for the result to be `true`.
*
* @example
* const eqFilter = new EqualityFilter({ attribute: 'foo', value: 'bar' })
* const filter = new AndFilter({ filters: [eqFilter] })
* assert.equal(filter.matches({ foo: 'bar' }), true)
*
* @param {object} obj An object to check for match.
* @param {boolean} [strictAttrCase=true] If `false`, "fOo" will match
* "foo" in the attribute position (left hand side).
*
* @throws When input types are not correct.
*
* @returns {boolean}
*/
matches (obj, strictAttrCase = true) {

@axkibe
Copy link
Author

axkibe commented Mar 14, 2023

Thanks for your detailed explanation.

I searched if I rather should set "objectclass" or "objectClass" and it seems the internet is all over the place. Basically as workaround other than ,false as second parameter I can also set both attributes.

@axkibe axkibe closed this as completed Mar 14, 2023
@jsumners
Copy link
Member

I have updated the v3 release notes with this information.

ddadaal referenced this issue in PKUHPC/OpenSCOW Apr 4, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [ldapjs](http://ldapjs.org)
([source](https://github.com/ldapjs/node-ldapjs)) | [`2.3.3` ->
`3.0.7`](https://renovatebot.com/diffs/npm/ldapjs/2.3.3/3.0.7) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/ldapjs/3.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/ldapjs/3.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/ldapjs/2.3.3/3.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/ldapjs/2.3.3/3.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@types/ldapjs](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/ldapjs)
([source](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/ldapjs))
| [`2.2.5` ->
`3.0.6`](https://renovatebot.com/diffs/npm/@types%2fldapjs/2.2.5/3.0.6)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fldapjs/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fldapjs/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fldapjs/2.2.5/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fldapjs/2.2.5/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>ldapjs/node-ldapjs (ldapjs)</summary>

###
[`v3.0.7`](https://github.com/ldapjs/node-ldapjs/releases/tag/v3.0.7)

[Compare
Source](https://github.com/ldapjs/node-ldapjs/compare/v3.0.6...v3.0.7)

#### What's Changed

- server: prevent crash on blank DN bind by
[@&#8203;pulsejet](https://github.com/pulsejet) in
[https://github.com/ldapjs/node-ldapjs/pull/958](https://github.com/ldapjs/node-ldapjs/pull/958)

#### New Contributors

- [@&#8203;pulsejet](https://github.com/pulsejet) made their first
contribution in
[https://github.com/ldapjs/node-ldapjs/pull/958](https://github.com/ldapjs/node-ldapjs/pull/958)

**Full Changelog**:
ldapjs/node-ldapjs@v3.0.6...v3.0.7

###
[`v3.0.6`](https://github.com/ldapjs/node-ldapjs/releases/tag/v3.0.6)

[Compare
Source](https://github.com/ldapjs/node-ldapjs/compare/v3.0.5...v3.0.6)

#### What's Changed

- Add test for issue 940 by
[@&#8203;jsumners](https://github.com/jsumners) in
[https://github.com/ldapjs/node-ldapjs/pull/941](https://github.com/ldapjs/node-ldapjs/pull/941)
- Add integration test for PasswordPolicyControl by
[@&#8203;its-sami](https://github.com/its-sami) in
[https://github.com/ldapjs/node-ldapjs/pull/949](https://github.com/ldapjs/node-ldapjs/pull/949)

#### New Contributors

- [@&#8203;its-sami](https://github.com/its-sami) made their first
contribution in
[https://github.com/ldapjs/node-ldapjs/pull/949](https://github.com/ldapjs/node-ldapjs/pull/949)

**Full Changelog**:
ldapjs/node-ldapjs@v3.0.5...v3.0.6

###
[`v3.0.5`](https://github.com/ldapjs/node-ldapjs/releases/tag/v3.0.5)

[Compare
Source](https://github.com/ldapjs/node-ldapjs/compare/v3.0.4...v3.0.5)

#### What's Changed

- Add integration test for issue
[#&#8203;923](https://github.com/ldapjs/node-ldapjs/issues/923) by
[@&#8203;jsumners](https://github.com/jsumners) in
[https://github.com/ldapjs/node-ldapjs/pull/926](https://github.com/ldapjs/node-ldapjs/pull/926)
- Resolve issue
[#&#8203;924](https://github.com/ldapjs/node-ldapjs/issues/924) by
[@&#8203;jsumners](https://github.com/jsumners) in
[https://github.com/ldapjs/node-ldapjs/pull/935](https://github.com/ldapjs/node-ldapjs/pull/935)
- Address issue
[#&#8203;860](https://github.com/ldapjs/node-ldapjs/issues/860)
(cannot search with non-ascii in filter) by
[@&#8203;jsumners](https://github.com/jsumners) in
[https://github.com/ldapjs/node-ldapjs/pull/938](https://github.com/ldapjs/node-ldapjs/pull/938)

**Full Changelog**:
ldapjs/node-ldapjs@v3.0.4...v3.0.5

###
[`v3.0.4`](https://github.com/ldapjs/node-ldapjs/releases/tag/v3.0.4)

[Compare
Source](https://github.com/ldapjs/node-ldapjs/compare/v3.0.3...v3.0.4)

#### What's Changed

- Fix ensureDN by [@&#8203;mischnic](https://github.com/mischnic) in
[https://github.com/ldapjs/node-ldapjs/pull/918](https://github.com/ldapjs/node-ldapjs/pull/918)

#### New Contributors

- [@&#8203;mischnic](https://github.com/mischnic) made their first
contribution in
[https://github.com/ldapjs/node-ldapjs/pull/918](https://github.com/ldapjs/node-ldapjs/pull/918)

**Full Changelog**:
ldapjs/node-ldapjs@v3.0.3...v3.0.4

###
[`v3.0.3`](https://github.com/ldapjs/node-ldapjs/releases/tag/v3.0.3)

[Compare
Source](https://github.com/ldapjs/node-ldapjs/compare/v3.0.2...v3.0.3)

#### What's Changed

- build(deps-dev): bump eslint from 8.36.0 to 8.37.0 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/ldapjs/node-ldapjs/pull/866](https://github.com/ldapjs/node-ldapjs/pull/866)
- build(deps-dev): bump eslint from 8.37.0 to 8.38.0 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/ldapjs/node-ldapjs/pull/869](https://github.com/ldapjs/node-ldapjs/pull/869)
- build(deps-dev): bump eslint from 8.38.0 to 8.39.0 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/ldapjs/node-ldapjs/pull/875](https://github.com/ldapjs/node-ldapjs/pull/875)
- build(deps): bump
[@&#8203;ldapjs/messages](https://github.com/ldapjs/messages) from
1.0.2 to 1.1.0 by [@&#8203;dependabot](https://github.com/dependabot)
in
[https://github.com/ldapjs/node-ldapjs/pull/874](https://github.com/ldapjs/node-ldapjs/pull/874)
- build(deps): bump [@&#8203;ldapjs/dn](https://github.com/ldapjs/dn)
from 1.0.0 to 1.1.0 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/ldapjs/node-ldapjs/pull/879](https://github.com/ldapjs/node-ldapjs/pull/879)
- build(deps-dev): bump eslint from 8.39.0 to 8.40.0 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/ldapjs/node-ldapjs/pull/881](https://github.com/ldapjs/node-ldapjs/pull/881)
- Add paged searching test by
[@&#8203;jsumners](https://github.com/jsumners) in
[https://github.com/ldapjs/node-ldapjs/pull/886](https://github.com/ldapjs/node-ldapjs/pull/886)
- Address issue
[#&#8203;883](https://github.com/ldapjs/node-ldapjs/issues/883) by
[@&#8203;jsumners](https://github.com/jsumners) in
[https://github.com/ldapjs/node-ldapjs/pull/884](https://github.com/ldapjs/node-ldapjs/pull/884)
- build(deps-dev): bump eslint-plugin-n from 15.7.0 to 16.0.0 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/ldapjs/node-ldapjs/pull/889](https://github.com/ldapjs/node-ldapjs/pull/889)
- build(deps-dev): bump eslint from 8.40.0 to 8.41.0 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/ldapjs/node-ldapjs/pull/888](https://github.com/ldapjs/node-ldapjs/pull/888)
- build(deps-dev): bump eslint from 8.41.0 to 8.42.0 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/ldapjs/node-ldapjs/pull/896](https://github.com/ldapjs/node-ldapjs/pull/896)
- update modification object in ldap.change by
[@&#8203;mihir254](https://github.com/mihir254) in
[https://github.com/ldapjs/node-ldapjs/pull/910](https://github.com/ldapjs/node-ldapjs/pull/910)
- Address crash for unmatched server responses by
[@&#8203;jsumners](https://github.com/jsumners) in
[https://github.com/ldapjs/node-ldapjs/pull/913](https://github.com/ldapjs/node-ldapjs/pull/913)
(thank you to [@&#8203;benzhuo](https://github.com/benzhuo) and
[@&#8203;michelevince](https://github.com/michelevince) for aiding in
resolving this issue)
- Update minimum dependencies by
[@&#8203;jsumners](https://github.com/jsumners) in
[https://github.com/ldapjs/node-ldapjs/pull/916](https://github.com/ldapjs/node-ldapjs/pull/916)

#### New Contributors

- [@&#8203;mihir254](https://github.com/mihir254) made their first
contribution in
[https://github.com/ldapjs/node-ldapjs/pull/910](https://github.com/ldapjs/node-ldapjs/pull/910)

**Full Changelog**:
ldapjs/node-ldapjs@v3.0.2...v3.0.3

###
[`v3.0.2`](https://github.com/ldapjs/node-ldapjs/releases/tag/v3.0.2)

[Compare
Source](https://github.com/ldapjs/node-ldapjs/compare/v3.0.1...v3.0.2)

#### What's Changed

- build(deps-dev): bump eslint from 8.35.0 to 8.36.0 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/ldapjs/node-ldapjs/pull/851](https://github.com/ldapjs/node-ldapjs/pull/851)
- build(deps): bump
[@&#8203;ldapjs/messages](https://github.com/ldapjs/messages) from
1.0.1 to 1.0.2 by [@&#8203;dependabot](https://github.com/dependabot)
in
[https://github.com/ldapjs/node-ldapjs/pull/852](https://github.com/ldapjs/node-ldapjs/pull/852)
- Add test for issue 860 by
[@&#8203;jsumners](https://github.com/jsumners) in
[https://github.com/ldapjs/node-ldapjs/pull/861](https://github.com/ldapjs/node-ldapjs/pull/861)
- transcontextual safe type checks by
[@&#8203;axkibe](https://github.com/axkibe) in
[https://github.com/ldapjs/node-ldapjs/pull/864](https://github.com/ldapjs/node-ldapjs/pull/864)

#### New Contributors

- [@&#8203;axkibe](https://github.com/axkibe) made their first
contribution in
[https://github.com/ldapjs/node-ldapjs/pull/864](https://github.com/ldapjs/node-ldapjs/pull/864)

**Full Changelog**:
ldapjs/node-ldapjs@v3.0.1...v3.0.2

###
[`v3.0.1`](https://github.com/ldapjs/node-ldapjs/releases/tag/v3.0.1)

[Compare
Source](https://github.com/ldapjs/node-ldapjs/compare/v3.0.0...v3.0.1)

#### What's Changed

- build(deps-dev): bump eslint from 8.34.0 to 8.35.0 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/ldapjs/node-ldapjs/pull/844](https://github.com/ldapjs/node-ldapjs/pull/844)
- Quick fix for outdated client doc still referring to result.object by
[@&#8203;Tethik](https://github.com/Tethik) in
[https://github.com/ldapjs/node-ldapjs/pull/846](https://github.com/ldapjs/node-ldapjs/pull/846)
- Resolve issue
[#&#8203;845](https://github.com/ldapjs/node-ldapjs/issues/845) by
[@&#8203;jsumners](https://github.com/jsumners) in
[https://github.com/ldapjs/node-ldapjs/pull/847](https://github.com/ldapjs/node-ldapjs/pull/847)
- Add Node.js version support to readme by
[@&#8203;jsumners](https://github.com/jsumners) in
[https://github.com/ldapjs/node-ldapjs/pull/848](https://github.com/ldapjs/node-ldapjs/pull/848)

**Full Changelog**:
ldapjs/node-ldapjs@v3.0.0...v3.0.1

###
[`v3.0.0`](https://github.com/ldapjs/node-ldapjs/releases/tag/v3.0.0)

[Compare
Source](https://github.com/ldapjs/node-ldapjs/compare/v2.3.3...v3.0.0)

##### 🎉🎉🎉 Version 3.0.0 Is Here

This release has been in development for many months. The [first
commit](https://github.com/ldapjs/controls/commit/7eb52e42fbae969e38a0f6ebd88b2187d133dbe1)
toward this goal happened on 2019-09-01, but work really started with [a
commit](https://github.com/ldapjs/controls/commit/29b26c6957545fef74cfdd76a74e390f7c1b4662)
on 2022-03-27.

This is *not* a trivial release. There are significant changes under the
hood. They include:

- Common modules have been broken out into separate installable modules:
- [`@ldapjs/attribute`](https://github.com/ldapjs/attribute) -- a
comprehensive implementation of the [LDAP `attribute`
spec](https://www.rfc-editor.org/rfc/rfc4512#section-2.5).
- [`@ldapjs/change`](https://github.com/ldapjs/change) -- a full
implementation of [RFC 4511
§4.6](https://www.rfc-editor.org/rfc/rfc4511.html#section-4.6).
- [`@ldapjs/controls`](https://github.com/ldapjs/controls) -- specific
implementations for all supported controls (with a caveat detailed
below) that inherit from a base identifiable object.
- [`@ldapjs/dn`](https://github.com/ldapjs/dn) -- provides `DN` and
`RDN` objects to represent [LDAP distinguished
names](https://www.rfc-editor.org/rfc/rfc4514).
- [`@ldapjs/messages`](https://github.com/ldapjs/messages) -- all
supported messages as their own objects with methods and properties
matching the specs, including a complete overhaul of the `extension`
(renamed from `extended`) request and response objects (with added
support for several extensions, e.g. "password modify").
- [`@ldapjs/protocol`](https://github.com/ldapjs/protocol) -- now with
a full suite of operation identifiers, result codes, and search tags.
- [`ldap-filter`](https://github.com/pfmooney/node-ldap-filter) has
been forked to [`@ldapjs/filter`](https://github.com/ldapjs/filter).
It includes improvements around value escaping, modern method
signatures, and identifiable "class" objects. The full set of changes
can be reviewed at
ldapjs/filter@daa5a5d...v2.0.0
- [`asn1`](https://github.com/joyent/node-asn1) has been forked to
[`@ldapjs/asn1`](https://github.com/ldapjs/asn1). Methods have been
improved, e.g. `BerReader.readBoolean` now accepts a tag to expect, new
ones added, e.g. `BerWriter.appendBuffer`, unreachable code removed, and
bugs fixed. The full set of changes can be reviewed at
ldapjs/asn1@bf1bb90...v2.0.0

Additionally, all of the above modules now have complete, **100%**, test
coverage (except for `@ldapjs/filter`; PRs are welcome to help out
here). They are also comprehensively documented with
[jsdoc](https://jsdoc.app).

We expect there are going to be issues with this release. We worked hard
to make sure all of the current tests pass without any changes (or at
least none that affect the purpose of the test). But the current test
suite is by no means comprehensive, and such sweeping changes as are
present in this release are almost guaranteed to introduce new bugs.
Please bear with us as we resolve them. Your contributions to fix any
such bugs will help greatly.

Even the simple act of opening an issue describing something you've
found that should be in these release notes would be a big help. For
example, if you have determined that a change in some object API, e.g.
the `SearchRequest` object, should be highlighted, then please open an
issue describing the change so that we can add an it to an addendum on
these release notes.

##### The Biggest Change

We think that the most impactful change is going to be the decoupling of
the underlying byte arrays from all objects. In v2 and earlier, the
client, server, controls, messages, and everything else passed around
single byte arrays during the handling of requests. The benefit of this
is reduced memory consumption and faster handling of requests. The
downside is an *extremely* difficult to understand and maintain
codebase. As part of the work to modularize this codebase, we opted to
make byte array processing idempotent in the majority of cases. This
will have an impact on performance, but we do not know how much of an
impact. We do not have any way to benchmark the before and after of this
change. We suspect (hope) that in the majority of cases it will not be
noticeable.

##### VLV Controls

During the development of v3 we were not clear if the VLV implementation
that was added to v2 was correct. So we opted to cut it for the release.
Shortly after cutting it, we determined that the implementation is very
likely correct. You can read about this decision at [#&#8203;797
(comment)](https://github.com/ldapjs/node-ldapjs/pull/797#issuecomment-1094132289)
and the realization at [#&#8203;797
(comment)](https://github.com/ldapjs/node-ldapjs/pull/797#issuecomment-1146856841).

Ultimately, we decided to postpone adding this feature back so that we
could get v3 shipped.

##### Conclusion

A lot of hard work has gone into this release. We think it lays the
ground work for a much more maintainable codebase. We envision being
able to re-implement the server and client components as
`@ldapjs/server` and `@ldapjs/client` at some point in the future. We
think there is a real opportunity to refactor both components into more
modern interfaces with significant improvements (particularly in the
form of error handling). No promises are made about when such projects
might be undertaken, if ever. But they wouldn't be possible without the
work in this v3 release.

In regard to my (James Sumners) personal contributions to this release,
please consider using my [:heart: GitHub
Sponsor](https://github.com/sponsors/jsumners) link to show your
gratitude. Contributions will be particularly helpful at this time; I
was laid off as part of a significant downsizing event at my previous
employer and am currently unemployed.

Additionally, a big thank you to
[@&#8203;dirmgr](https://github.com/dirmgr) for his willingness to
answer general LDAP protocol questions and the abundance of well written
documentation he has provided at
https://nawilson.com/ldapv3-wire-protocol-reference/ and
https://ldap.com/learn-about-ldap/. The help and articles were
indispensable in crafting this release.

***

#### Known Breaking Changes

##### Client

- `options.strictDN`: removed. All DN parsing is now "strict". It does
not make any sense to try and parse DN strings that are not spec
compliant.
- `.modify`: no longer accepts plain objects as change descriptors. An
instance of `@ldapjs/change` is now required.
- `searchEntry` object: the `searchEntry` object no longe provides a
`.raw` property. The access this property provided is now supplied by
the `searchEntry` object's standard methods and accessors, e.g.
`.attributes` for the set of attributes returned on the entry. Further,
accessing binary field values should be done by specifying the `;binary`
attribute option as per the LDAP spec. See
[https://github.com/ldapjs/node-ldapjs/issues/850](https://github.com/ldapjs/node-ldapjs/issues/850)
and
[https://github.com/ldapjs/node-ldapjs/issues/858](https://github.com/ldapjs/node-ldapjs/issues/858)
for more detail.
- Change objects: generic JavaScript objects are no longer supported as
`change` objects. When creating a new `change` object,
`@ldapjs/attribute` objects must be provided (or a plain object that
conforms to an `attribute` object). See
[https://github.com/ldapjs/node-ldapjs/issues/859](https://github.com/ldapjs/node-ldapjs/issues/859)
for more detail.

##### Server

- `options.strictDN`: removed. All DN parsing is now "strict". It does
not make any sense to try and parse DN strings that are not spec
compliant.
- `.listen`: No longer listens on `0.0.0.0` when no `host` parameter is
provided. It now uses the secure default of `127.0.0.1`.
- `.search`: the results of `SearchRequest.scope` changed to the spec
defined search scope names. With `[email protected]` (and
`@ldapjs/[email protected]`) you must match against `base`, `single`, and
`subtree` instead of `base`, `one`, and `sub`. This has been corrected
in `[email protected]` (with `@ldapjs/[email protected]`) via PR
[#&#8203;847](https://github.com/ldapjs/node-ldapjs/issues/847). See
the unit test included in that release for the recommended approach for
matching search scopes.

##### General

- Message objects no longer have a `.object` accessor. This has been
replaced with the `.pojo` accessor. It didn't make any sense to have a
message object with an accessor that returns an object (it's confusing).
The `.pojo` accessor states what will be returned: a plain JavaScript
object. You may find that the actual message object now has fields you
can directly use. See
[https://github.com/ldapjs/node-ldapjs/issues/841](https://github.com/ldapjs/node-ldapjs/issues/841).
- Filter strings no longer provide a static exception on case sensitive
comparisons for `objectClass`. In `ldapjs@2` and earlier, there were
many explicit checks for `objectClass` being compared. When such a
comparison was found, the code *always* performed that specific
comparison in a case insensitive manner. As of `ldapjs@3`, you must
specify that you want to perform case insensitive comparisons on
property names. See
[https://github.com/ldapjs/filter/issues/3](https://github.com/ldapjs/filter/issues/3)
for more detail.

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "on sunday" in timezone Asia/Shanghai,
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log [here](https://developer.mend.io/github/PKUHPC/SCOW).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC4xNTIuNCIsInVwZGF0ZWRJblZlciI6IjM3LjEwMy4xIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIn0=-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Chen Junda <[email protected]>
OYX-1 referenced this issue in PKUHPC/OpenSCOW Apr 7, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [ldapjs](http://ldapjs.org)
([source](https://github.com/ldapjs/node-ldapjs)) | [`2.3.3` ->
`3.0.7`](https://renovatebot.com/diffs/npm/ldapjs/2.3.3/3.0.7) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/ldapjs/3.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/ldapjs/3.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/ldapjs/2.3.3/3.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/ldapjs/2.3.3/3.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@types/ldapjs](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/ldapjs)
([source](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/ldapjs))
| [`2.2.5` ->
`3.0.6`](https://renovatebot.com/diffs/npm/@types%2fldapjs/2.2.5/3.0.6)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fldapjs/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fldapjs/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fldapjs/2.2.5/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fldapjs/2.2.5/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>ldapjs/node-ldapjs (ldapjs)</summary>

###
[`v3.0.7`](https://github.com/ldapjs/node-ldapjs/releases/tag/v3.0.7)

[Compare
Source](https://github.com/ldapjs/node-ldapjs/compare/v3.0.6...v3.0.7)

#### What's Changed

- server: prevent crash on blank DN bind by
[@&#8203;pulsejet](https://github.com/pulsejet) in
[https://github.com/ldapjs/node-ldapjs/pull/958](https://github.com/ldapjs/node-ldapjs/pull/958)

#### New Contributors

- [@&#8203;pulsejet](https://github.com/pulsejet) made their first
contribution in
[https://github.com/ldapjs/node-ldapjs/pull/958](https://github.com/ldapjs/node-ldapjs/pull/958)

**Full Changelog**:
ldapjs/node-ldapjs@v3.0.6...v3.0.7

###
[`v3.0.6`](https://github.com/ldapjs/node-ldapjs/releases/tag/v3.0.6)

[Compare
Source](https://github.com/ldapjs/node-ldapjs/compare/v3.0.5...v3.0.6)

#### What's Changed

- Add test for issue 940 by
[@&#8203;jsumners](https://github.com/jsumners) in
[https://github.com/ldapjs/node-ldapjs/pull/941](https://github.com/ldapjs/node-ldapjs/pull/941)
- Add integration test for PasswordPolicyControl by
[@&#8203;its-sami](https://github.com/its-sami) in
[https://github.com/ldapjs/node-ldapjs/pull/949](https://github.com/ldapjs/node-ldapjs/pull/949)

#### New Contributors

- [@&#8203;its-sami](https://github.com/its-sami) made their first
contribution in
[https://github.com/ldapjs/node-ldapjs/pull/949](https://github.com/ldapjs/node-ldapjs/pull/949)

**Full Changelog**:
ldapjs/node-ldapjs@v3.0.5...v3.0.6

###
[`v3.0.5`](https://github.com/ldapjs/node-ldapjs/releases/tag/v3.0.5)

[Compare
Source](https://github.com/ldapjs/node-ldapjs/compare/v3.0.4...v3.0.5)

#### What's Changed

- Add integration test for issue
[#&#8203;923](https://github.com/ldapjs/node-ldapjs/issues/923) by
[@&#8203;jsumners](https://github.com/jsumners) in
[https://github.com/ldapjs/node-ldapjs/pull/926](https://github.com/ldapjs/node-ldapjs/pull/926)
- Resolve issue
[#&#8203;924](https://github.com/ldapjs/node-ldapjs/issues/924) by
[@&#8203;jsumners](https://github.com/jsumners) in
[https://github.com/ldapjs/node-ldapjs/pull/935](https://github.com/ldapjs/node-ldapjs/pull/935)
- Address issue
[#&#8203;860](https://github.com/ldapjs/node-ldapjs/issues/860)
(cannot search with non-ascii in filter) by
[@&#8203;jsumners](https://github.com/jsumners) in
[https://github.com/ldapjs/node-ldapjs/pull/938](https://github.com/ldapjs/node-ldapjs/pull/938)

**Full Changelog**:
ldapjs/node-ldapjs@v3.0.4...v3.0.5

###
[`v3.0.4`](https://github.com/ldapjs/node-ldapjs/releases/tag/v3.0.4)

[Compare
Source](https://github.com/ldapjs/node-ldapjs/compare/v3.0.3...v3.0.4)

#### What's Changed

- Fix ensureDN by [@&#8203;mischnic](https://github.com/mischnic) in
[https://github.com/ldapjs/node-ldapjs/pull/918](https://github.com/ldapjs/node-ldapjs/pull/918)

#### New Contributors

- [@&#8203;mischnic](https://github.com/mischnic) made their first
contribution in
[https://github.com/ldapjs/node-ldapjs/pull/918](https://github.com/ldapjs/node-ldapjs/pull/918)

**Full Changelog**:
ldapjs/node-ldapjs@v3.0.3...v3.0.4

###
[`v3.0.3`](https://github.com/ldapjs/node-ldapjs/releases/tag/v3.0.3)

[Compare
Source](https://github.com/ldapjs/node-ldapjs/compare/v3.0.2...v3.0.3)

#### What's Changed

- build(deps-dev): bump eslint from 8.36.0 to 8.37.0 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/ldapjs/node-ldapjs/pull/866](https://github.com/ldapjs/node-ldapjs/pull/866)
- build(deps-dev): bump eslint from 8.37.0 to 8.38.0 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/ldapjs/node-ldapjs/pull/869](https://github.com/ldapjs/node-ldapjs/pull/869)
- build(deps-dev): bump eslint from 8.38.0 to 8.39.0 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/ldapjs/node-ldapjs/pull/875](https://github.com/ldapjs/node-ldapjs/pull/875)
- build(deps): bump
[@&#8203;ldapjs/messages](https://github.com/ldapjs/messages) from
1.0.2 to 1.1.0 by [@&#8203;dependabot](https://github.com/dependabot)
in
[https://github.com/ldapjs/node-ldapjs/pull/874](https://github.com/ldapjs/node-ldapjs/pull/874)
- build(deps): bump [@&#8203;ldapjs/dn](https://github.com/ldapjs/dn)
from 1.0.0 to 1.1.0 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/ldapjs/node-ldapjs/pull/879](https://github.com/ldapjs/node-ldapjs/pull/879)
- build(deps-dev): bump eslint from 8.39.0 to 8.40.0 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/ldapjs/node-ldapjs/pull/881](https://github.com/ldapjs/node-ldapjs/pull/881)
- Add paged searching test by
[@&#8203;jsumners](https://github.com/jsumners) in
[https://github.com/ldapjs/node-ldapjs/pull/886](https://github.com/ldapjs/node-ldapjs/pull/886)
- Address issue
[#&#8203;883](https://github.com/ldapjs/node-ldapjs/issues/883) by
[@&#8203;jsumners](https://github.com/jsumners) in
[https://github.com/ldapjs/node-ldapjs/pull/884](https://github.com/ldapjs/node-ldapjs/pull/884)
- build(deps-dev): bump eslint-plugin-n from 15.7.0 to 16.0.0 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/ldapjs/node-ldapjs/pull/889](https://github.com/ldapjs/node-ldapjs/pull/889)
- build(deps-dev): bump eslint from 8.40.0 to 8.41.0 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/ldapjs/node-ldapjs/pull/888](https://github.com/ldapjs/node-ldapjs/pull/888)
- build(deps-dev): bump eslint from 8.41.0 to 8.42.0 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/ldapjs/node-ldapjs/pull/896](https://github.com/ldapjs/node-ldapjs/pull/896)
- update modification object in ldap.change by
[@&#8203;mihir254](https://github.com/mihir254) in
[https://github.com/ldapjs/node-ldapjs/pull/910](https://github.com/ldapjs/node-ldapjs/pull/910)
- Address crash for unmatched server responses by
[@&#8203;jsumners](https://github.com/jsumners) in
[https://github.com/ldapjs/node-ldapjs/pull/913](https://github.com/ldapjs/node-ldapjs/pull/913)
(thank you to [@&#8203;benzhuo](https://github.com/benzhuo) and
[@&#8203;michelevince](https://github.com/michelevince) for aiding in
resolving this issue)
- Update minimum dependencies by
[@&#8203;jsumners](https://github.com/jsumners) in
[https://github.com/ldapjs/node-ldapjs/pull/916](https://github.com/ldapjs/node-ldapjs/pull/916)

#### New Contributors

- [@&#8203;mihir254](https://github.com/mihir254) made their first
contribution in
[https://github.com/ldapjs/node-ldapjs/pull/910](https://github.com/ldapjs/node-ldapjs/pull/910)

**Full Changelog**:
ldapjs/node-ldapjs@v3.0.2...v3.0.3

###
[`v3.0.2`](https://github.com/ldapjs/node-ldapjs/releases/tag/v3.0.2)

[Compare
Source](https://github.com/ldapjs/node-ldapjs/compare/v3.0.1...v3.0.2)

#### What's Changed

- build(deps-dev): bump eslint from 8.35.0 to 8.36.0 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/ldapjs/node-ldapjs/pull/851](https://github.com/ldapjs/node-ldapjs/pull/851)
- build(deps): bump
[@&#8203;ldapjs/messages](https://github.com/ldapjs/messages) from
1.0.1 to 1.0.2 by [@&#8203;dependabot](https://github.com/dependabot)
in
[https://github.com/ldapjs/node-ldapjs/pull/852](https://github.com/ldapjs/node-ldapjs/pull/852)
- Add test for issue 860 by
[@&#8203;jsumners](https://github.com/jsumners) in
[https://github.com/ldapjs/node-ldapjs/pull/861](https://github.com/ldapjs/node-ldapjs/pull/861)
- transcontextual safe type checks by
[@&#8203;axkibe](https://github.com/axkibe) in
[https://github.com/ldapjs/node-ldapjs/pull/864](https://github.com/ldapjs/node-ldapjs/pull/864)

#### New Contributors

- [@&#8203;axkibe](https://github.com/axkibe) made their first
contribution in
[https://github.com/ldapjs/node-ldapjs/pull/864](https://github.com/ldapjs/node-ldapjs/pull/864)

**Full Changelog**:
ldapjs/node-ldapjs@v3.0.1...v3.0.2

###
[`v3.0.1`](https://github.com/ldapjs/node-ldapjs/releases/tag/v3.0.1)

[Compare
Source](https://github.com/ldapjs/node-ldapjs/compare/v3.0.0...v3.0.1)

#### What's Changed

- build(deps-dev): bump eslint from 8.34.0 to 8.35.0 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/ldapjs/node-ldapjs/pull/844](https://github.com/ldapjs/node-ldapjs/pull/844)
- Quick fix for outdated client doc still referring to result.object by
[@&#8203;Tethik](https://github.com/Tethik) in
[https://github.com/ldapjs/node-ldapjs/pull/846](https://github.com/ldapjs/node-ldapjs/pull/846)
- Resolve issue
[#&#8203;845](https://github.com/ldapjs/node-ldapjs/issues/845) by
[@&#8203;jsumners](https://github.com/jsumners) in
[https://github.com/ldapjs/node-ldapjs/pull/847](https://github.com/ldapjs/node-ldapjs/pull/847)
- Add Node.js version support to readme by
[@&#8203;jsumners](https://github.com/jsumners) in
[https://github.com/ldapjs/node-ldapjs/pull/848](https://github.com/ldapjs/node-ldapjs/pull/848)

**Full Changelog**:
ldapjs/node-ldapjs@v3.0.0...v3.0.1

###
[`v3.0.0`](https://github.com/ldapjs/node-ldapjs/releases/tag/v3.0.0)

[Compare
Source](https://github.com/ldapjs/node-ldapjs/compare/v2.3.3...v3.0.0)

##### 🎉🎉🎉 Version 3.0.0 Is Here

This release has been in development for many months. The [first
commit](https://github.com/ldapjs/controls/commit/7eb52e42fbae969e38a0f6ebd88b2187d133dbe1)
toward this goal happened on 2019-09-01, but work really started with [a
commit](https://github.com/ldapjs/controls/commit/29b26c6957545fef74cfdd76a74e390f7c1b4662)
on 2022-03-27.

This is *not* a trivial release. There are significant changes under the
hood. They include:

- Common modules have been broken out into separate installable modules:
- [`@ldapjs/attribute`](https://github.com/ldapjs/attribute) -- a
comprehensive implementation of the [LDAP `attribute`
spec](https://www.rfc-editor.org/rfc/rfc4512#section-2.5).
- [`@ldapjs/change`](https://github.com/ldapjs/change) -- a full
implementation of [RFC 4511
§4.6](https://www.rfc-editor.org/rfc/rfc4511.html#section-4.6).
- [`@ldapjs/controls`](https://github.com/ldapjs/controls) -- specific
implementations for all supported controls (with a caveat detailed
below) that inherit from a base identifiable object.
- [`@ldapjs/dn`](https://github.com/ldapjs/dn) -- provides `DN` and
`RDN` objects to represent [LDAP distinguished
names](https://www.rfc-editor.org/rfc/rfc4514).
- [`@ldapjs/messages`](https://github.com/ldapjs/messages) -- all
supported messages as their own objects with methods and properties
matching the specs, including a complete overhaul of the `extension`
(renamed from `extended`) request and response objects (with added
support for several extensions, e.g. "password modify").
- [`@ldapjs/protocol`](https://github.com/ldapjs/protocol) -- now with
a full suite of operation identifiers, result codes, and search tags.
- [`ldap-filter`](https://github.com/pfmooney/node-ldap-filter) has
been forked to [`@ldapjs/filter`](https://github.com/ldapjs/filter).
It includes improvements around value escaping, modern method
signatures, and identifiable "class" objects. The full set of changes
can be reviewed at
ldapjs/filter@daa5a5d...v2.0.0
- [`asn1`](https://github.com/joyent/node-asn1) has been forked to
[`@ldapjs/asn1`](https://github.com/ldapjs/asn1). Methods have been
improved, e.g. `BerReader.readBoolean` now accepts a tag to expect, new
ones added, e.g. `BerWriter.appendBuffer`, unreachable code removed, and
bugs fixed. The full set of changes can be reviewed at
ldapjs/asn1@bf1bb90...v2.0.0

Additionally, all of the above modules now have complete, **100%**, test
coverage (except for `@ldapjs/filter`; PRs are welcome to help out
here). They are also comprehensively documented with
[jsdoc](https://jsdoc.app).

We expect there are going to be issues with this release. We worked hard
to make sure all of the current tests pass without any changes (or at
least none that affect the purpose of the test). But the current test
suite is by no means comprehensive, and such sweeping changes as are
present in this release are almost guaranteed to introduce new bugs.
Please bear with us as we resolve them. Your contributions to fix any
such bugs will help greatly.

Even the simple act of opening an issue describing something you've
found that should be in these release notes would be a big help. For
example, if you have determined that a change in some object API, e.g.
the `SearchRequest` object, should be highlighted, then please open an
issue describing the change so that we can add an it to an addendum on
these release notes.

##### The Biggest Change

We think that the most impactful change is going to be the decoupling of
the underlying byte arrays from all objects. In v2 and earlier, the
client, server, controls, messages, and everything else passed around
single byte arrays during the handling of requests. The benefit of this
is reduced memory consumption and faster handling of requests. The
downside is an *extremely* difficult to understand and maintain
codebase. As part of the work to modularize this codebase, we opted to
make byte array processing idempotent in the majority of cases. This
will have an impact on performance, but we do not know how much of an
impact. We do not have any way to benchmark the before and after of this
change. We suspect (hope) that in the majority of cases it will not be
noticeable.

##### VLV Controls

During the development of v3 we were not clear if the VLV implementation
that was added to v2 was correct. So we opted to cut it for the release.
Shortly after cutting it, we determined that the implementation is very
likely correct. You can read about this decision at [#&#8203;797
(comment)](https://github.com/ldapjs/node-ldapjs/pull/797#issuecomment-1094132289)
and the realization at [#&#8203;797
(comment)](https://github.com/ldapjs/node-ldapjs/pull/797#issuecomment-1146856841).

Ultimately, we decided to postpone adding this feature back so that we
could get v3 shipped.

##### Conclusion

A lot of hard work has gone into this release. We think it lays the
ground work for a much more maintainable codebase. We envision being
able to re-implement the server and client components as
`@ldapjs/server` and `@ldapjs/client` at some point in the future. We
think there is a real opportunity to refactor both components into more
modern interfaces with significant improvements (particularly in the
form of error handling). No promises are made about when such projects
might be undertaken, if ever. But they wouldn't be possible without the
work in this v3 release.

In regard to my (James Sumners) personal contributions to this release,
please consider using my [:heart: GitHub
Sponsor](https://github.com/sponsors/jsumners) link to show your
gratitude. Contributions will be particularly helpful at this time; I
was laid off as part of a significant downsizing event at my previous
employer and am currently unemployed.

Additionally, a big thank you to
[@&#8203;dirmgr](https://github.com/dirmgr) for his willingness to
answer general LDAP protocol questions and the abundance of well written
documentation he has provided at
https://nawilson.com/ldapv3-wire-protocol-reference/ and
https://ldap.com/learn-about-ldap/. The help and articles were
indispensable in crafting this release.

***

#### Known Breaking Changes

##### Client

- `options.strictDN`: removed. All DN parsing is now "strict". It does
not make any sense to try and parse DN strings that are not spec
compliant.
- `.modify`: no longer accepts plain objects as change descriptors. An
instance of `@ldapjs/change` is now required.
- `searchEntry` object: the `searchEntry` object no longe provides a
`.raw` property. The access this property provided is now supplied by
the `searchEntry` object's standard methods and accessors, e.g.
`.attributes` for the set of attributes returned on the entry. Further,
accessing binary field values should be done by specifying the `;binary`
attribute option as per the LDAP spec. See
[https://github.com/ldapjs/node-ldapjs/issues/850](https://github.com/ldapjs/node-ldapjs/issues/850)
and
[https://github.com/ldapjs/node-ldapjs/issues/858](https://github.com/ldapjs/node-ldapjs/issues/858)
for more detail.
- Change objects: generic JavaScript objects are no longer supported as
`change` objects. When creating a new `change` object,
`@ldapjs/attribute` objects must be provided (or a plain object that
conforms to an `attribute` object). See
[https://github.com/ldapjs/node-ldapjs/issues/859](https://github.com/ldapjs/node-ldapjs/issues/859)
for more detail.

##### Server

- `options.strictDN`: removed. All DN parsing is now "strict". It does
not make any sense to try and parse DN strings that are not spec
compliant.
- `.listen`: No longer listens on `0.0.0.0` when no `host` parameter is
provided. It now uses the secure default of `127.0.0.1`.
- `.search`: the results of `SearchRequest.scope` changed to the spec
defined search scope names. With `[email protected]` (and
`@ldapjs/[email protected]`) you must match against `base`, `single`, and
`subtree` instead of `base`, `one`, and `sub`. This has been corrected
in `[email protected]` (with `@ldapjs/[email protected]`) via PR
[#&#8203;847](https://github.com/ldapjs/node-ldapjs/issues/847). See
the unit test included in that release for the recommended approach for
matching search scopes.

##### General

- Message objects no longer have a `.object` accessor. This has been
replaced with the `.pojo` accessor. It didn't make any sense to have a
message object with an accessor that returns an object (it's confusing).
The `.pojo` accessor states what will be returned: a plain JavaScript
object. You may find that the actual message object now has fields you
can directly use. See
[https://github.com/ldapjs/node-ldapjs/issues/841](https://github.com/ldapjs/node-ldapjs/issues/841).
- Filter strings no longer provide a static exception on case sensitive
comparisons for `objectClass`. In `ldapjs@2` and earlier, there were
many explicit checks for `objectClass` being compared. When such a
comparison was found, the code *always* performed that specific
comparison in a case insensitive manner. As of `ldapjs@3`, you must
specify that you want to perform case insensitive comparisons on
property names. See
[https://github.com/ldapjs/filter/issues/3](https://github.com/ldapjs/filter/issues/3)
for more detail.

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "on sunday" in timezone Asia/Shanghai,
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log [here](https://developer.mend.io/github/PKUHPC/SCOW).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC4xNTIuNCIsInVwZGF0ZWRJblZlciI6IjM3LjEwMy4xIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIn0=-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Chen Junda <[email protected]>
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants