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.
This commit is contained in:
Andrew Ruthven 2024-05-01 00:24:35 +12:00
parent 629789612e
commit c273b38234
2 changed files with 20 additions and 12 deletions

View File

@ -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<

View File

@ -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
<?php
// We want to test using the member field to contain our list of members.
$c->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