From ae7819d715e80cfbd17c4bec1c93685198febe6a Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 7 Aug 2007 05:58:47 +0000 Subject: r24262: Set the objectCategory by default in the objectclass module, rather than using templates. Modify the samba3sam test to be less fussy, and not use the objectclass module (which requires proper schema stuff now). Andrew Bartlett (This used to be commit 53c248c2645e86fbc8720860aed92a479483b528) --- source4/dsdb/samdb/ldb_modules/objectclass.c | 11 ++++++++++- source4/setup/provision_templates.ldif | 5 ----- testprogs/ejs/samba3sam.js | 6 +++--- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/source4/dsdb/samdb/ldb_modules/objectclass.c b/source4/dsdb/samdb/ldb_modules/objectclass.c index ad11442035..259b963ce0 100644 --- a/source4/dsdb/samdb/ldb_modules/objectclass.c +++ b/source4/dsdb/samdb/ldb_modules/objectclass.c @@ -161,7 +161,7 @@ static int objectclass_sort(struct ldb_module *module, /* Save the next pointer, as the DLIST_ macros will change poss_subclass->next */ next = poss_subclass->next; - if (ldb_attr_cmp(class->subClassOf, current->objectclass) == 0) { + if (class && ldb_attr_cmp(class->subClassOf, current->objectclass) == 0) { DLIST_REMOVE(unsorted, poss_subclass); DLIST_ADD(subclass, poss_subclass); @@ -199,6 +199,7 @@ static int objectclass_sort(struct ldb_module *module, static int objectclass_add(struct ldb_module *module, struct ldb_request *req) { struct ldb_message_element *objectclass_element; + const struct dsdb_schema *schema = dsdb_get_schema(module->ldb); struct class_list *sorted, *current; struct ldb_request *down_req; struct ldb_message *msg; @@ -265,6 +266,14 @@ static int objectclass_add(struct ldb_module *module, struct ldb_request *req) talloc_free(mem_ctx); return ret; } + /* Last one */ + if (schema && !current->next && !ldb_msg_find_element(msg, "objectCategory")) { + const struct dsdb_class *objectclass + = dsdb_class_by_lDAPDisplayName(schema, current->objectclass); + if (objectclass) { + ldb_msg_add_string(msg, "objectCategory", objectclass->defaultObjectCategory); + } + } } talloc_free(mem_ctx); diff --git a/source4/setup/provision_templates.ldif b/source4/setup/provision_templates.ldif index 6e264be9d6..914582eaf0 100644 --- a/source4/setup/provision_templates.ldif +++ b/source4/setup/provision_templates.ldif @@ -4,7 +4,6 @@ objectClass: container description: Container for SAM account templates showInAdvancedViewOnly: TRUE systemFlags: 2348810240 -objectCategory: CN=Container,${SCHEMADN} isCriticalSystemObject: TRUE ### @@ -30,7 +29,6 @@ primaryGroupID: 513 accountExpires: -1 logonCount: 0 sAMAccountType: 805306368 -objectCategory: CN=Person,${SCHEMADN} dn: CN=TemplateComputer,CN=Templates objectClass: top @@ -50,7 +48,6 @@ primaryGroupID: 513 accountExpires: -1 logonCount: 0 sAMAccountType: 805306369 -objectCategory: CN=Computer,${SCHEMADN} dn: CN=TemplateTrustingDomain,CN=Templates objectClass: top @@ -74,7 +71,6 @@ objectClass: Template objectClass: groupTemplate groupType: -2147483646 sAMAccountType: 268435456 -objectCategory: CN=Group,${SCHEMADN} # Currently this isn't used, we don't have a way to detect it different from an incoming alias # @@ -92,7 +88,6 @@ objectClass: top objectClass: Template objectClass: foreignSecurityPrincipalTemplate showInAdvancedViewOnly: TRUE -objectCategory: CN=Foreign-Security-Principal,${SCHEMADN} dn: CN=TemplateSecret,CN=Templates objectClass: top diff --git a/testprogs/ejs/samba3sam.js b/testprogs/ejs/samba3sam.js index 5fa527a694..44a1f140b1 100755 --- a/testprogs/ejs/samba3sam.js +++ b/testprogs/ejs/samba3sam.js @@ -46,7 +46,7 @@ dn: @MAP=samba3sam @TO: sambaDomainName=TESTS," + s3.BASEDN + " dn: @MODULES -@LIST: rootdse,paged_results,server_sort,extended_dn,asq,samldb,objectclass,password_hash,operational,objectguid,rdn_name,samba3sam,partition +@LIST: rootdse,paged_results,server_sort,extended_dn,asq,samldb,password_hash,operational,objectguid,rdn_name,samba3sam,partition dn: @PARTITION partition: " + s4.BASEDN + ":" + s4.url + " @@ -482,7 +482,7 @@ description: y assert(res.msgs[0].dnsHostName == "x"); assert(res.msgs[0].lastLogon == "x"); assert(res.msgs[0].objectClass != undefined); - assert(res.msgs[0].objectClass[3] == "user"); + assert(res.msgs[0].objectClass[0] == "user"); assert(res.msgs[1].dn == s4.dn("cn=A")); assert(res.msgs[1].dnsHostName == undefined); assert(res.msgs[1].lastLogon == "x"); @@ -504,7 +504,7 @@ description: y assert(res.msgs[1].dnsHostName == "x"); assert(res.msgs[1].lastLogon == "x"); assert(res.msgs[1].objectClass != undefined); - assert(res.msgs[1].objectClass[3] == "user"); + assert(res.msgs[1].objectClass[0] == "user"); assert(res.msgs[2].dn == s4.dn("cn=A")); assert(res.msgs[2].dnsHostName == undefined); assert(res.msgs[2].lastLogon == "x"); -- cgit