]> git.sur5r.net Git - openldap/commitdiff
ITS#6016 check for static backends and overlays
authorHoward Chu <hyc@openldap.org>
Thu, 2 Apr 2009 23:41:41 +0000 (23:41 +0000)
committerHoward Chu <hyc@openldap.org>
Thu, 2 Apr 2009 23:41:41 +0000 (23:41 +0000)
servers/slapd/module.c

index a09da6a8b6dd530ad28515b9326384a5f1dfe991..3b95c7c4b4d079dfb0be5b66666723222c09ab26 100644 (file)
@@ -136,6 +136,31 @@ int module_load(const char* file_name, int argc, char *argv[])
                return -1;
        }
 
+       /* If loading a backend, see if we already have it */
+       if ( !strncasecmp( file_name, "back_", 5 )) {
+               char *name = (char *)file_name + 5;
+               char *dot = strchr( name, '.');
+               if (dot) *dot = '\0';
+               rc = backend_info( name ) != NULL;
+               if (dot) *dot = '.';
+               if ( rc ) {
+                       Debug( LDAP_DEBUG_CONFIG, "module_load: (%s) already present (static)\n",
+                               file_name, 0, 0 );
+                       return 0;
+               }
+       } else {
+               /* check for overlays too */
+               char *dot = strchr( file_name, '.' );
+               if ( dot ) *dot = '\0';
+               rc = overlay_find( file_name ) != NULL;
+               if ( dot ) *dot = '.';
+               if ( rc ) {
+                       Debug( LDAP_DEBUG_CONFIG, "module_load: (%s) already present (static)\n",
+                               file_name, 0, 0 );
+                       return 0;
+               }
+       }
+
        module = (module_loaded_t *)ch_calloc(1, sizeof(module_loaded_t) +
                strlen(file_name));
        if (module == NULL) {