Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug] Wrong handling of orWhere in emulator #606

Open
acharseth opened this issue Oct 18, 2023 · 1 comment
Open

[Bug] Wrong handling of orWhere in emulator #606

acharseth opened this issue Oct 18, 2023 · 1 comment
Labels
bug Something isn't working

Comments

@acharseth
Copy link

Environment:

  • LDAP Server Type: Development: Built in emulator. Test and prod: ActiveDirectory
  • PHP Version: 8.1

Describe the bug:
I wanted a scope requiring to be member of one or more groups.
I therefore created a scope with an initial where for one group and two more orWhere for 2 other groups. Something like this:

$builder->where('memberof', '=', 'cn=Group1');
$builder->orWhere('memberof', '=', 'cn=Group2');
$builder->orWhere('memberof', '=', 'cn=Group3');

With experience from SQL this makes sense but does not in LDAP.
This creates the following LDAP filter (as decoded from the log):

(&...
(memberof=CN=Group1)
(|(memberof=CN=Group2)(memberof=CN=Group3)))

This means that you have to be member of both Group1 and (Group2 or Groups 3), which is not what I intended. Still using the built in LDAP emulator I could be member of eg. Group3 only and still get included. In the test environment, however, I did not get included. The correct implementation for the scope is to use orWhere on all 3 groups like this:

$builder->orWhere('memberof', '=', 'cn=Group1');
$builder->orWhere('memberof', '=', 'cn=Group2');
$builder->orWhere('memberof', '=', 'cn=Group3');

This will create a correct LDAP-filter:

(&...
(|(memberof=CN=Group1)(memberof=CN=Group2)(memberof=CN=Group3)))

To my understanding ActiveDirectoy has a correct implementation of the filter and the built in emulator does not.
Agree?

@acharseth acharseth added the bug Something isn't working label Oct 18, 2023
@stevebauman stevebauman transferred this issue from DirectoryTree/LdapRecord Nov 10, 2023
@stevebauman
Copy link
Member

stevebauman commented Feb 4, 2024

Thanks @acharseth, apologies for the long reply here. Yes I agree, the emulator is the one not working properly. The query builder is working as expected. I'm able to reproduce this locally. Working on a patch -- haven't found a solution yet. Will report here once I do 👍

@stevebauman stevebauman changed the title [Bug]Wrong handling of where in emulator [Bug] Wrong handling of orWhere in emulator Feb 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants