Author: jelmer
Date: 2004-10-10 23:52:06 +0000 (Sun, 10 Oct 2004)
New Revision: 2897

WebSVN: 
http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/branches/SAMBA_4_0/source/lib/registry/common&rev=2897&nolog=1

Log:
Fix double registration (of the registry subsystem) bug

Modified:
   branches/SAMBA_4_0/source/lib/registry/common/reg_interface.c


Changeset:
Modified: branches/SAMBA_4_0/source/lib/registry/common/reg_interface.c
===================================================================
--- branches/SAMBA_4_0/source/lib/registry/common/reg_interface.c       2004-10-10 
23:03:12 UTC (rev 2896)
+++ branches/SAMBA_4_0/source/lib/registry/common/reg_interface.c       2004-10-10 
23:52:06 UTC (rev 2897)
@@ -37,6 +37,7 @@
        struct reg_init_function_entry *entry = backends;
 
        if (!functions || !functions->name) {
+               DEBUG(0, ("Invalid arguments while registering registry backend\n"));
                return NT_STATUS_INVALID_PARAMETER;
        }
 
@@ -56,30 +57,37 @@
        return NT_STATUS_OK;
 }
 
+static BOOL registry_init(void)
+{
+       static BOOL initialised;
+       NTSTATUS status;
+       
+       if(initialised) {
+               return True;
+       }
+       
+       status = register_subsystem("registry", registry_register);
+       if (NT_STATUS_IS_ERR(status)) {
+               DEBUG(0, ("Error registering registry subsystem: %s\n", 
nt_errstr(status)));
+               return False;
+       }
+
+       initialised = True;
+       static_init_registry;
+       return True;
+}
+
 /* Find a backend in the list of available backends */
 static struct reg_init_function_entry *reg_find_backend_entry(const char *name)
 {
        struct reg_init_function_entry *entry;
-       static BOOL reg_first_init = True;
-       NTSTATUS status;
 
-       if(reg_first_init) {
-               status = register_subsystem("registry", registry_register);
-               if (NT_STATUS_IS_ERR(status)) {
-                       DEBUG(0, ("Error registering registry subsystem: %s\n", 
nt_errstr(status)));
-                       /* Don't try the initialisation again */
-                       reg_first_init = False;
-                       return NULL;
-               }
+       if(registry_init() == False) return NULL;
 
-               static_init_registry;
-               reg_first_init = False;
-       }
-
        entry = backends;
 
        while(entry) {
-               if (strcmp(entry->functions->name, name)==0) return entry;
+               if (strcmp(entry->functions->name, name) == 0) return entry;
                entry = entry->next;
        }
 
@@ -186,7 +194,7 @@
 
        ret->root->hive = ret;
        ret->root->name = NULL;
-       ret->root->path = "";
+       ret->root->path = talloc_strdup(mem_ctx, "");
 
        /* Add hive to context */
        h->num_hives++;

Reply via email to