mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-15 03:01:09 +08:00
backend_group selects the correct backend for the group.
This commit is contained in:
parent
51e619d424
commit
96c61ea465
@ -644,8 +644,41 @@ backend_group(
|
||||
#endif
|
||||
)
|
||||
{
|
||||
if (be->be_group)
|
||||
return( be->be_group(be, target, gr_ndn, op_ndn,
|
||||
int dnlen, i;
|
||||
Backend *gr_be = NULL;
|
||||
|
||||
dnlen = strlen( gr_ndn );
|
||||
if (be != NULL && be->be_nsuffix != NULL) {
|
||||
/* search through all the backend suffixes
|
||||
* to see if the group dn belongs to this
|
||||
* backend.
|
||||
*/
|
||||
for ( i = 0;
|
||||
be->be_nsuffix[i] != NULL;
|
||||
i++ )
|
||||
{
|
||||
int len = strlen( be->be_nsuffix[i] );
|
||||
if ( len > dnlen )
|
||||
continue;
|
||||
|
||||
if (strcmp(be->be_nsuffix[i], gr_ndn + (dnlen - len)) == 0) {
|
||||
gr_be = be;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (gr_be == NULL) {
|
||||
/* if the gr_ndn does not belong to
|
||||
* the given backend, then find the
|
||||
* backend that it does belong to.
|
||||
*/
|
||||
gr_be = select_backend(gr_ndn);
|
||||
if (gr_be == NULL)
|
||||
return(1);
|
||||
}
|
||||
if (gr_be->be_group)
|
||||
return( gr_be->be_group(gr_be, target, gr_ndn, op_ndn,
|
||||
group_oc, group_at) );
|
||||
else
|
||||
return LDAP_UNWILLING_TO_PERFORM;
|
||||
|
Loading…
Reference in New Issue
Block a user