]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/backend.c
include portable.h
[openldap] / servers / slapd / backend.c
index 998bfa8c6acc215d0e6a1240cb494210580d55a1..93675af31b8221df1832056bd9485914f64658b4 100644 (file)
@@ -1,6 +1,8 @@
 /* backend.c - routines for dealing with back-end databases */
 
 
+#include "portable.h"
+
 #include <stdio.h>
 #include <string.h>
 #include <sys/types.h>
@@ -21,6 +23,7 @@ extern int    ldbm_back_abandon();
 extern int     ldbm_back_config();
 extern int     ldbm_back_init();
 extern int     ldbm_back_close();
+extern int      ldbm_back_group();
 #endif
 
 #ifdef LDAP_PASSWD
@@ -86,6 +89,9 @@ new_backend(
                be->be_config = ldbm_back_config;
                be->be_init = ldbm_back_init;
                be->be_close = ldbm_back_close;
+#ifdef ACLGROUP
+               be->be_group = ldbm_back_group;
+#endif
                be->be_type = "ldbm";
                foundit = 1;
        }
@@ -105,6 +111,9 @@ new_backend(
                be->be_config = passwd_back_config;
                be->be_init = NULL;
                be->be_close = NULL;
+#ifdef ACLGROUP
+               be->be_group = NULL;
+#endif
                be->be_type = "passwd";
                foundit = 1;
        }
@@ -124,6 +133,9 @@ new_backend(
                be->be_config = shell_back_config;
                be->be_init = shell_back_init;
                be->be_close = NULL;
+#ifdef ACLGROUP
+               be->be_group = NULL;
+#endif
                be->be_type = "shell";
                foundit = 1;
        }
@@ -149,7 +161,20 @@ select_backend( char * dn )
        dnlen = strlen( dn );
        for ( i = 0; i < nbackends; i++ ) {
                for ( j = 0; backends[i].be_suffix != NULL &&
-                   backends[i].be_suffix[j] != NULL; j++ ) {
+                   backends[i].be_suffix[j] != NULL; j++ )
+               {
+#ifdef LDAP_ALLOW_NULL_SEARCH_BASE
+                       /* Add greg@greg.rim.or.jp
+                        * It's quick hack for cheap client
+                        * Some browser offer a NULL base at ldap_search
+                        */
+                       if(dnlen == 0) {
+                               Debug( LDAP_DEBUG_TRACE,
+                                       "select_backend: use default backend\n", 0, 0, 0 );
+                               return (&backends[i]);
+                       }
+#endif /* LDAP_ALLOW_NULL_SEARCH_BASE */
+
                        len = strlen( backends[i].be_suffix[j] );
 
                        if ( len > dnlen ) {
@@ -231,3 +256,14 @@ be_unbind(
                }
        }
 }
+
+#ifdef ACLGROUP
+int 
+be_group(Backend *be, char *bdn, char *edn)
+{
+        if (be->be_group)
+                return(be->be_group(be, bdn, edn));
+        else
+                return(1);
+}
+#endif