Commit 11ac0330 authored by Kurt Zeilenga's avatar Kurt Zeilenga
Browse files

Extend objectClassMatch to return true if asserted class is a

subclass of stored value.
parent 8ce25895
......@@ -20,19 +20,36 @@ int schema_init_done = 0;
struct slap_internal_schema slap_schema;
#define objectClassIndexer NULL
#define objectClassFilter NULL
static int
objectClassMatch(
int *match,
int *matchp,
unsigned use,
Syntax *syntax,
MatchingRule *mr,
struct berval *value,
void *assertedValue )
{
struct berval *a = (struct berval *) assertedValue;
ObjectClass *oc = oc_find( value->bv_val );
ObjectClass *asserted = oc_find( ((struct berval *) assertedValue)->bv_val );
ObjectClass *asserted = oc_find( a->bv_val );
if( asserted == NULL || oc == NULL ) {
return LDAP_CONSTRAINT_VIOLATION;
}
#if 0
Debug( LDAP_DEBUG_TRACE, "objectClassMatch(%s,%s)\n",
value->bv_val, a->bv_val, NULL );
#endif
*matchp = !is_object_subclass( asserted, oc );
Debug( LDAP_DEBUG_TRACE, "\treturns %d\n",
*matchp, NULL, NULL );
*match = ( oc == NULL || oc != asserted );
return LDAP_SUCCESS;
}
......@@ -53,71 +70,74 @@ struct slap_schema_oc_map {
struct slap_schema_ad_map {
char *ssam_name;
slap_mr_match_func *ssam_match;
slap_mr_indexer_func *ssam_indexer;
slap_mr_filter_func *ssam_filter;
size_t ssam_offset;
} ad_map[] = {
{ "objectClass", objectClassMatch,
{ "objectClass",
objectClassMatch, objectClassIndexer, objectClassFilter,
offsetof(struct slap_internal_schema, si_ad_objectClass) },
/* user entry operational attributes */
{ "creatorsName", NULL,
{ "creatorsName", NULL, NULL, NULL,
offsetof(struct slap_internal_schema, si_ad_creatorsName) },
{ "createTimestamp", NULL,
{ "createTimestamp", NULL, NULL, NULL,
offsetof(struct slap_internal_schema, si_ad_createTimestamp) },
{ "modifiersName", NULL,
{ "modifiersName", NULL, NULL, NULL,
offsetof(struct slap_internal_schema, si_ad_modifiersName) },
{ "modifyTimestamp", NULL,
{ "modifyTimestamp", NULL, NULL, NULL,
offsetof(struct slap_internal_schema, si_ad_modifyTimestamp) },
{ "subschemaSubentry", NULL,
{ "subschemaSubentry", NULL, NULL, NULL,
offsetof(struct slap_internal_schema, si_ad_subschemaSubentry) },
/* root DSE attributes */
{ "namingContexts", NULL,
{ "namingContexts", NULL, NULL, NULL,
offsetof(struct slap_internal_schema, si_ad_namingContexts) },
{ "supportedControl", NULL,
{ "supportedControl", NULL, NULL, NULL,
offsetof(struct slap_internal_schema, si_ad_supportedControl) },
{ "supportedExtension", NULL,
{ "supportedExtension", NULL, NULL, NULL,
offsetof(struct slap_internal_schema, si_ad_supportedExtension) },
{ "supportedLDAPVersion", NULL,
{ "supportedLDAPVersion", NULL, NULL, NULL,
offsetof(struct slap_internal_schema, si_ad_supportedLDAPVersion) },
{ "supportedSASLMechanisms", NULL,
{ "supportedSASLMechanisms", NULL, NULL, NULL,
offsetof(struct slap_internal_schema, si_ad_supportedSASLMechanisms) },
/* subschema subentry attributes */
{ "attributeTypes", NULL,
{ "attributeTypes", NULL, NULL, NULL,
offsetof(struct slap_internal_schema, si_ad_attributeTypes) },
{ "ldapSyntaxes", NULL,
{ "ldapSyntaxes", NULL, NULL, NULL,
offsetof(struct slap_internal_schema, si_ad_ldapSyntaxes) },
{ "matchingRules", NULL,
{ "matchingRules", NULL, NULL, NULL,
offsetof(struct slap_internal_schema, si_ad_matchingRules) },
{ "objectClasses", NULL,
{ "objectClasses", NULL, NULL, NULL,
offsetof(struct slap_internal_schema, si_ad_objectClasses) },
/* knowledge information */
{ "aliasedObjectName", NULL,
{ "aliasedObjectName", NULL, NULL, NULL,
offsetof(struct slap_internal_schema, si_ad_aliasedObjectName) },
{ "ref", NULL,
{ "ref", NULL, NULL, NULL,
offsetof(struct slap_internal_schema, si_ad_ref) },
/* access control internals */
{ "entry", NULL,
{ "entry", NULL, NULL, NULL,
offsetof(struct slap_internal_schema, si_ad_entry) },
{ "children", NULL,
{ "children", NULL, NULL, NULL,
offsetof(struct slap_internal_schema, si_ad_children) },
#ifdef SLAPD_ACI_ENABLED
{ "OpenLDAPaci", NULL,
{ "OpenLDAPaci", NULL, NULL, NULL,
offsetof(struct slap_internal_schema, si_ad_aci) },
#endif
{ "userPassword", NULL,
{ "userPassword", NULL, NULL, NULL,
offsetof(struct slap_internal_schema, si_ad_userPassword) },
{ "authPassword", NULL,
{ "authPassword", NULL, NULL, NULL,
offsetof(struct slap_internal_schema, si_ad_authPassword) },
#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_KBIND
{ "krbName", NULL,
{ "krbName", NULL, NULL, NULL,
offsetof(struct slap_internal_schema, si_ad_krbName) },
#endif
{ NULL, NULL, 0 }
{ NULL, NULL, NULL, NULL, 0 }
};
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment