summaryrefslogtreecommitdiff
path: root/source4/dsdb/schema/schema_inferiors.c
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2009-09-24 15:12:49 -0700
committerMatthias Dieter Wallnöfer <mwallnoefer@yahoo.de>2009-10-03 12:37:55 +0200
commit0e028fcb7d141d68de2baadeb2c0fae262f2bedc (patch)
treeb6bbf3a914615bfcaf53dcfd381720601d32a522 /source4/dsdb/schema/schema_inferiors.c
parentf86beaaad96ac2dd7cf6a3a9d57f42c57c2440c2 (diff)
downloadsamba-0e028fcb7d141d68de2baadeb2c0fae262f2bedc.tar.gz
samba-0e028fcb7d141d68de2baadeb2c0fae262f2bedc.tar.bz2
samba-0e028fcb7d141d68de2baadeb2c0fae262f2bedc.zip
s4:dsdb add systemPossibleInferiors to schema code
This allows us to figure out what the system can add, which will not be in possibleInferiors due to the systemOnly flag. Andrew Bartlett
Diffstat (limited to 'source4/dsdb/schema/schema_inferiors.c')
-rw-r--r--source4/dsdb/schema/schema_inferiors.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/source4/dsdb/schema/schema_inferiors.c b/source4/dsdb/schema/schema_inferiors.c
index b02d557c58..264e471298 100644
--- a/source4/dsdb/schema/schema_inferiors.c
+++ b/source4/dsdb/schema/schema_inferiors.c
@@ -198,6 +198,25 @@ static void schema_fill_possible_inferiors(struct dsdb_schema *schema, struct ds
schema_class->possibleInferiors = str_list_unique(schema_class->possibleInferiors);
}
+static void schema_fill_system_possible_inferiors(struct dsdb_schema *schema, struct dsdb_class *schema_class)
+{
+ struct dsdb_class *c2;
+
+ for (c2=schema->classes; c2; c2=c2->next) {
+ char **superiors = schema_posssuperiors(schema, c2);
+ if (c2->objectClassCategory != 2
+ && c2->objectClassCategory != 3
+ && str_list_check(superiors, schema_class->lDAPDisplayName)) {
+ if (schema_class->possibleInferiors == NULL) {
+ schema_class->systemPossibleInferiors = str_list_make_empty(schema_class);
+ }
+ schema_class->systemPossibleInferiors = str_list_add_const(schema_class->systemPossibleInferiors,
+ c2->lDAPDisplayName);
+ }
+ }
+ schema_class->systemPossibleInferiors = str_list_unique(schema_class->systemPossibleInferiors);
+}
+
/*
fill in a string class name from a governs_ID
*/
@@ -285,6 +304,7 @@ void schema_fill_constructed(struct dsdb_schema *schema)
for (schema_class=schema->classes; schema_class; schema_class=schema_class->next) {
schema_fill_possible_inferiors(schema, schema_class);
+ schema_fill_system_possible_inferiors(schema, schema_class);
}
/* free up our internal cache elements */