diff options
author | Andrew Bartlett <abartlet@samba.org> | 2009-09-21 17:24:43 -0700 |
---|---|---|
committer | Matthias Dieter Wallnöfer <mwallnoefer@yahoo.de> | 2009-10-02 12:44:58 +0200 |
commit | 642dd95d817521f75f193a1e594b4dacf04d7b26 (patch) | |
tree | ca7efa325c257233bf7e213b0e58ba9b705b22fc | |
parent | 61598258450589db4b42e3ef38453c37080c5265 (diff) | |
download | samba-642dd95d817521f75f193a1e594b4dacf04d7b26.tar.gz samba-642dd95d817521f75f193a1e594b4dacf04d7b26.tar.bz2 samba-642dd95d817521f75f193a1e594b4dacf04d7b26.zip |
s4:Ensure the selected RDN is the right one per the schema
The relative DN must be the one that the most specific structural
objectclass specifies.
Andrew Bartlett
-rw-r--r-- | source4/dsdb/samdb/ldb_modules/objectclass.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/source4/dsdb/samdb/ldb_modules/objectclass.c b/source4/dsdb/samdb/ldb_modules/objectclass.c index 3cf252c71a..ad14acbcf8 100644 --- a/source4/dsdb/samdb/ldb_modules/objectclass.c +++ b/source4/dsdb/samdb/ldb_modules/objectclass.c @@ -547,7 +547,13 @@ static int objectclass_do_add(struct oc_context *ac) if (!current->next) { struct ldb_message_element *el; int32_t systemFlags = 0; - DATA_BLOB *sd; + const char *rdn_name = ldb_dn_get_rdn_name(msg->dn); + if (ldb_attr_cmp(rdn_name, current->objectclass->rDNAttID) != 0) { + ldb_asprintf_errstring(ldb, "RDN %s is not correct for most specific structural objectclass %s, should be %s", + rdn_name, current->objectclass->lDAPDisplayName, current->objectclass->rDNAttID); + return LDB_ERR_NAMING_VIOLATION; + } + if (!ldb_msg_find_element(msg, "objectCategory")) { value = talloc_strdup(msg, current->objectclass->defaultObjectCategory); if (value == NULL) { |