From d4a1f6a42b06a5d63a789cad438cfde693df24a7 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 1 Aug 2011 17:47:34 +1000 Subject: s4-dsdb: added dn_format attribute of a dsdb_attribute this is faster than string comparisons during searches at runtime Pair-Programmed-With: Andrew Bartlett Pair-Programmed-With: Amitay Isaacs --- source4/dsdb/common/dsdb_dn.h | 7 ------- source4/dsdb/schema/schema.h | 9 +++++++++ source4/dsdb/schema/schema_inferiors.c | 7 +++++-- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/source4/dsdb/common/dsdb_dn.h b/source4/dsdb/common/dsdb_dn.h index b713bdd27b..b455c7f64e 100644 --- a/source4/dsdb/common/dsdb_dn.h +++ b/source4/dsdb/common/dsdb_dn.h @@ -1,10 +1,3 @@ -enum dsdb_dn_format { - DSDB_NORMAL_DN, - DSDB_BINARY_DN, - DSDB_STRING_DN, - DSDB_INVALID_DN -}; - struct dsdb_dn { struct ldb_dn *dn; DATA_BLOB extra_part; diff --git a/source4/dsdb/schema/schema.h b/source4/dsdb/schema/schema.h index 289fd4276c..13cc31ca87 100644 --- a/source4/dsdb/schema/schema.h +++ b/source4/dsdb/schema/schema.h @@ -24,6 +24,14 @@ #include "prefixmap.h" +enum dsdb_dn_format { + DSDB_NORMAL_DN, + DSDB_BINARY_DN, + DSDB_STRING_DN, + DSDB_INVALID_DN +}; + + struct dsdb_attribute; struct dsdb_class; struct dsdb_schema; @@ -108,6 +116,7 @@ struct dsdb_attribute { bool systemOnly; bool one_way_link; + enum dsdb_dn_format dn_format; /* internal stuff */ const struct dsdb_syntax *syntax; diff --git a/source4/dsdb/schema/schema_inferiors.c b/source4/dsdb/schema/schema_inferiors.c index 7b80c20a60..fe456412d1 100644 --- a/source4/dsdb/schema/schema_inferiors.c +++ b/source4/dsdb/schema/schema_inferiors.c @@ -354,9 +354,11 @@ int schema_fill_constructed(const struct dsdb_schema *schema) schema_class->posssuperiors = NULL; } - /* setup fast access to one_way_link */ + /* setup fast access to one_way_link and DN format */ for (attribute=schema->attributes; attribute; attribute=attribute->next) { - if (dsdb_dn_oid_to_format(attribute->syntax->ldap_oid) == DSDB_INVALID_DN) { + attribute->dn_format = dsdb_dn_oid_to_format(attribute->syntax->ldap_oid); + + if (attribute->dn_format == DSDB_INVALID_DN) { attribute->one_way_link = false; continue; } @@ -381,5 +383,6 @@ int schema_fill_constructed(const struct dsdb_schema *schema) attribute->one_way_link = false; } + return LDB_SUCCESS; } -- cgit