backend_group selects the correct backend for the group.

This commit is contained in:
Mark Valence 2000-06-05 04:34:59 +00:00
parent 51e619d424
commit 96c61ea465

View File

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