]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/backend.c
Update slapd.conf to match quick start guide example
[openldap] / servers / slapd / backend.c
index 39fdd279d4363bcd6a4d74739254f708f1ab2ddf..3593be516892709314aabc483d24ffedb3920188 100644 (file)
 
 #include "slap.h"
 
-#ifdef SLAPD_LDBM
-extern int     ldbm_back_bind();
-extern int     ldbm_back_unbind();
-extern int     ldbm_back_search();
-extern int     ldbm_back_compare();
-extern int     ldbm_back_modify();
-extern int     ldbm_back_modrdn();
-extern int     ldbm_back_add();
-extern int     ldbm_back_delete();
-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 SLAPD_PASSWD
-extern int     passwd_back_search();
-extern int     passwd_back_config();
-#endif
-
-#ifdef SLAPD_SHELL
-extern int     shell_back_bind();
-extern int     shell_back_unbind();
-extern int     shell_back_search();
-extern int     shell_back_compare();
-extern int     shell_back_modify();
-extern int     shell_back_modrdn();
-extern int     shell_back_add();
-extern int     shell_back_delete();
-extern int     shell_back_abandon();
-extern int     shell_back_config();
-extern int     shell_back_init();
-#endif
-
-extern int     defsize;
-extern int     deftime;
 
 #define BACKEND_GRAB_SIZE      10
 
@@ -165,25 +128,13 @@ select_backend( char * dn )
                for ( j = 0; backends[i].be_suffix != NULL &&
                    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 ) {
                                continue;
                        }
 
-                       if ( strcasecmp( backends[i].be_suffix[j],
+                       if ( strcmp( backends[i].be_suffix[j],
                            dn + (dnlen - len) ) == 0 ) {
                                return( &backends[i] );
                        }
@@ -203,13 +154,26 @@ select_backend( char * dn )
                                 continue;
                         }
 
-                        if ( strcasecmp( backends[i].be_suffixAlias[j],
+                        if ( strcmp( backends[i].be_suffixAlias[j],
                             dn + (dnlen - len) ) == 0 ) {
                                 return( &backends[i] );
                         }
                 }
         }
 
+#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
+        *
+        * Should only be used as a last resort. -Kdz
+        */
+       if(dnlen == 0) {
+               Debug( LDAP_DEBUG_TRACE,
+                       "select_backend: use default backend\n", 0, 0, 0 );
+               return( &backends[0] );
+       }
+#endif /* LDAP_ALLOW_NULL_SEARCH_BASE */
 
        return( NULL );
 }
@@ -223,7 +187,7 @@ be_issuffix(
        int     i;
 
        for ( i = 0; be->be_suffix != NULL && be->be_suffix[i] != NULL; i++ ) {
-               if ( strcasecmp( be->be_suffix[i], suffix ) == 0 ) {
+               if ( strcmp( be->be_suffix[i], suffix ) == 0 ) {
                        return( 1 );
                }
        }
@@ -232,28 +196,55 @@ be_issuffix(
 }
 
 int
-be_isroot( Backend *be, char *dn )
+be_isroot( Backend *be, char *ndn )
 {
-       if ( dn == NULL ) {
+       int rc;
+
+       if ( ndn == NULL || be->be_root_ndn == NULL ) {
                return( 0 );
        }
 
-       return( be->be_rootdn ? strcasecmp( be->be_rootdn, dn ) == 0
-           : 0 );
+       rc = strcmp( be->be_root_ndn, ndn ) ? 0 : 1;
+
+       return(rc);
+}
+
+char *
+be_root_dn( Backend *be )
+{
+       int rc;
+
+       if ( be->be_root_dn == NULL ) {
+               return( "" );
+       }
+
+       return be->be_root_dn;
 }
 
 int
-be_isroot_pw( Backend *be, char *dn, struct berval *cred )
+be_isroot_pw( Backend *be, char *ndn, struct berval *cred )
 {
-       if ( ! be_isroot( be, dn ) || be->be_rootpw == NULL ) {
+       int result;
+
+       if ( ! be_isroot( be, ndn ) ) {
                return( 0 );
        }
 
-       return( strcmp( be->be_rootpw, cred->bv_val ) == 0 );
+#ifdef SLAPD_CRYPT
+       ldap_pvt_thread_mutex_lock( &crypt_mutex );
+#endif
+
+       result = lutil_passwd( cred->bv_val, be->be_root_pw );
+
+#ifdef SLAPD_CRYPT
+       ldap_pvt_thread_mutex_unlock( &crypt_mutex );
+#endif
+
+       return result == 0;
 }
 
 void
-be_close()
+be_close( void )
 {
        int     i;
 
@@ -282,11 +273,19 @@ be_unbind(
 
 #ifdef SLAPD_ACLGROUPS
 int 
-be_group(Backend *be, char *bdn, char *edn, char *objectclassValue, char *groupattrName)
+be_group(
+       Backend *be,
+       Entry   *target,
+       char    *gr_ndn,
+       char    *op_ndn,
+       char    *objectclassValue,
+       char    *groupattrName
+)
 {
-        if (be->be_group)
-                return(be->be_group(be, bdn, edn, objectclassValue, groupattrName));
-        else
-                return(1);
+       if (be->be_group)
+               return( be->be_group(be, target, gr_ndn, op_ndn,
+                       objectclassValue, groupattrName) );
+       else
+               return(1);
 }
 #endif