From c273b38234fc5eaf3a2927e48b361a4183e2f76b Mon Sep 17 00:00:00 2001 From: Andrew Ruthven Date: Wed, 1 May 2024 00:24:35 +1200 Subject: [PATCH] Test adding non-existant LDAP user to a group This is to tickle my suspicion of the bug as reported by Thorsten Marquardt in https://sourceforge.net/p/davical/mailman/message/58766531/ with this error message reported: Exception [0] ldap_get_attributes(): Argument #2 ($entry) must be of type LDAP\ResultEntry, false given At line 718 of /usr/share/davical-master/inc/drivers_ldap.php You need to look in 3da860e5d5e732c2dedb62a73c76608a2b7098a4 for that line number as I've just made some improvements to the code. I have also improved the SQL to check if the users have been added, and discovered that the result file *did not* have them. This test was failing due to the test config file looking for memberUid, not member. Also, fix that. --- .../tests/ldap/0006-test-DN-in-Groups.result | 8 +++---- .../tests/ldap/0006-test-DN-in-Groups.test | 24 ++++++++++++------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/testing/tests/ldap/0006-test-DN-in-Groups.result b/testing/tests/ldap/0006-test-DN-in-Groups.result index a2e3379f..35ec207f 100644 --- a/testing/tests/ldap/0006-test-DN-in-Groups.result +++ b/testing/tests/ldap/0006-test-DN-in-Groups.result @@ -116,14 +116,14 @@ SQL Query 1 Result: SQL Query 2 Result: group_name: >gON_ldap_group1< - user_name: >NULL< + users: >gON_ldap1< group_name: >gON_ldap_group2< - user_name: >NULL< + users: >gON_ldap1, gON_ldap2, gON_ldap4< group_name: >gON_ldap_group3< - user_name: >NULL< + users: >gON_ldap1, gON_ldap3< group_name: >gON_ldap_group4< - user_name: >NULL< + users: >NULL< diff --git a/testing/tests/ldap/0006-test-DN-in-Groups.test b/testing/tests/ldap/0006-test-DN-in-Groups.test index 0312e521..f9c3f8c2 100644 --- a/testing/tests/ldap/0006-test-DN-in-Groups.test +++ b/testing/tests/ldap/0006-test-DN-in-Groups.test @@ -78,7 +78,7 @@ for my $username (qw/gON_ldap3 gON_ldap4/) { make_group($ldap, 'gON_ldap_group1', $users{gON_ldap1}); make_group($ldap, 'gON_ldap_group2', $users{gON_ldap1}, $users{gON_ldap2}, - $users{gON_ldap4}); + $users{gON_ldap4}, "cn=non_existant1,$users"); make_group($ldap, 'gON_ldap_group3', $users{gON_ldap1}, $users{gON_ldap3}); make_group($ldap, 'gON_ldap_group4'); @@ -106,7 +106,14 @@ sub make_group { ENDPERL -SCRIPT=../scripts/cron-sync-ldap.php regression_ldap.host +BEGINAPPCONF +authenticate_hook['config']['group_mapping_field']['members'] = 'member'; +ENDAPPCONF + +SCRIPT=php -d include_path=$(pwd) ../scripts/cron-sync-ldap.php regression_ldap.host # Testing logging in as one of the users - should work. TYPE=PROPFIND @@ -136,12 +143,13 @@ ENDQUERY # Check group membership matches above. QUERY -SELECT grp_u.username AS group_name, usr_u.username AS user_name +SELECT grp_u.username AS group_name, string_agg(usr_u.username, ', ' ORDER BY usr_u.username) AS users FROM principal AS grp_p - left join group_member ON (grp_p.principal_id = group_member.group_id) - left join principal AS usr_p ON (group_member.member_id = usr_p.principal_id) - left join usr AS usr_u ON (usr_p.user_no = usr_u.user_no) - left join usr AS grp_u ON (grp_p.user_no = grp_u.user_no) + LEFT JOIN group_member ON (grp_p.principal_id = group_member.group_id) + LEFT JOIN usr AS grp_u ON (grp_p.user_no = grp_u.user_no) + LEFT JOIN principal AS usr_p ON (group_member.member_id = usr_p.principal_id) + LEFT JOIN usr AS usr_u ON (usr_p.user_no = usr_u.user_no) WHERE grp_u.username LIKE 'gON_ldap_group%' -ORDER BY group_name, user_name; +GROUP BY group_name +ORDER BY group_name; ENDQUERY