From bfe9bbe6096c97a2a40bf16c36ee45c6b1f84b70 Mon Sep 17 00:00:00 2001 From: Quanah Gibson-Mount <quanah@openldap.org> Date: Wed, 3 Sep 2008 01:51:47 +0000 Subject: [PATCH] ITS#5642 --- CHANGES | 1 + servers/slapd/at.c | 18 ++++++++++++++++-- servers/slapd/schema_prep.c | 1 - 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index 61cfa664ee..08835ee6aa 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,7 @@ OpenLDAP 2.4 Change Log OpenLDAP 2.4.12 Engineering Fixed liblutil executables on Windows (ITS#5604) + Fixed slapd custom attribute inheritance (ITS#5642) Fixed slapd firstComponentMatch normalization (ITS#5634) Fixed slapd socket closing on Windows (ITS#5606) Fixed slapd-ldap,slapd-meta invalid filter behavior (ITS#5614) diff --git a/servers/slapd/at.c b/servers/slapd/at.c index de44c27561..54d197c495 100644 --- a/servers/slapd/at.c +++ b/servers/slapd/at.c @@ -722,8 +722,22 @@ at_add( * its own superiorss */ if ( sat->sat_sup ) { - sat->sat_syntax = sat->sat_sup->sat_syntax; - sat->sat_equality = sat->sat_sup->sat_equality; + Syntax *syn = syn_find(sat->sat_sup->sat_syntax->ssyn_oid); + if ( syn != sat->sat_sup->sat_syntax ) { + sat->sat_syntax = ch_malloc( sizeof( Syntax )); + *sat->sat_syntax = *sat->sat_sup->sat_syntax; + } else { + sat->sat_syntax = sat->sat_sup->sat_syntax; + } + if ( sat->sat_sup->sat_equality ) { + MatchingRule *mr = mr_find( sat->sat_sup->sat_equality->smr_oid ); + if ( mr != sat->sat_sup->sat_equality ) { + sat->sat_equality = ch_malloc( sizeof( MatchingRule )); + *sat->sat_equality = *sat->sat_sup->sat_equality; + } else { + sat->sat_equality = sat->sat_sup->sat_equality; + } + } sat->sat_approx = sat->sat_sup->sat_approx; sat->sat_ordering = sat->sat_sup->sat_ordering; sat->sat_substr = sat->sat_sup->sat_substr; diff --git a/servers/slapd/schema_prep.c b/servers/slapd/schema_prep.c index 5bab4a2d0a..42f9a5e943 100644 --- a/servers/slapd/schema_prep.c +++ b/servers/slapd/schema_prep.c @@ -1266,7 +1266,6 @@ slap_schema_load( void ) mr->smr_filter = ad_map[i].ssam_mr_filter; } - /* FIXME: no-one will free this at exit */ (*adp)->ad_type->sat_equality = mr; } } -- GitLab