diff options
author | Andrew Tridgell <tridge@samba.org> | 2011-08-01 17:47:34 +1000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2011-08-04 16:17:25 +1000 |
commit | d4a1f6a42b06a5d63a789cad438cfde693df24a7 (patch) | |
tree | 2d9cd75e891e0e038097d20ef535b3ca6970be97 /source4/dsdb/schema | |
parent | d669e83857600ec59afc5b11c0286f28fceb0d0a (diff) | |
download | samba-d4a1f6a42b06a5d63a789cad438cfde693df24a7.tar.gz samba-d4a1f6a42b06a5d63a789cad438cfde693df24a7.tar.bz2 samba-d4a1f6a42b06a5d63a789cad438cfde693df24a7.zip |
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 <abartlet@samba.org>
Pair-Programmed-With: Amitay Isaacs <amitay@gmail.com>
Diffstat (limited to 'source4/dsdb/schema')
-rw-r--r-- | source4/dsdb/schema/schema.h | 9 | ||||
-rw-r--r-- | source4/dsdb/schema/schema_inferiors.c | 7 |
2 files changed, 14 insertions, 2 deletions
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; } |