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