mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
Extend objectClassMatch to return true if asserted class is a
subclass of stored value.
This commit is contained in:
parent
8ce2589505
commit
11ac0330bb
@ -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 }
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user