s4-ldb: ensure ldb_register_samba_handlers() is not done twice
authorAndrew Tridgell <tridge@samba.org>
Tue, 7 Dec 2010 21:22:07 +0000 (08:22 +1100)
committerAndrew Tridgell <tridge@samba.org>
Wed, 8 Dec 2010 04:26:05 +0000 (05:26 +0100)
Pair-Programmed-With: Andrew Bartlett <abartlet@samba.org>

source4/lib/ldb-samba/ldif_handlers.c

index 5581cb19319ee4a6062202a32c1d946cfd761461..3fbb3fb5129f623f64e2a9be856b5619451bbc30 100644 (file)
@@ -1374,9 +1374,13 @@ const struct ldb_schema_syntax *ldb_samba_syntax_by_lDAPDisplayName(struct ldb_c
 int ldb_register_samba_handlers(struct ldb_context *ldb)
 {
        unsigned int i;
+       int ret;
+
+       if (ldb_get_opaque(ldb, "SAMBA_HANDLERS_REGISTERED") != NULL) {
+               return LDB_SUCCESS;
+       }
 
        for (i=0; i < ARRAY_SIZE(samba_attributes); i++) {
-               int ret;
                const struct ldb_schema_syntax *s = NULL;
 
                s = ldb_samba_syntax_by_name(ldb, samba_attributes[i].syntax);
@@ -1396,7 +1400,6 @@ int ldb_register_samba_handlers(struct ldb_context *ldb)
        }
 
        for (i=0; i < ARRAY_SIZE(samba_dn_syntax); i++) {
-               int ret;
                ret = ldb_dn_extended_add_syntax(ldb, LDB_ATTR_FLAG_FIXED, &samba_dn_syntax[i]);
                if (ret != LDB_SUCCESS) {
                        return ret;
@@ -1404,5 +1407,10 @@ int ldb_register_samba_handlers(struct ldb_context *ldb)
 
        }
 
+       ret = ldb_set_opaque(ldb, "SAMBA_HANDLERS_REGISTERED", (void*)1);
+       if (ret != LDB_SUCCESS) {
+               return ret;
+       }
+
        return LDB_SUCCESS;
 }