]> git.sur5r.net Git - openldap/commitdiff
ITS#5642
authorQuanah Gibson-Mount <quanah@openldap.org>
Wed, 3 Sep 2008 01:51:47 +0000 (01:51 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Wed, 3 Sep 2008 01:51:47 +0000 (01:51 +0000)
CHANGES
servers/slapd/at.c
servers/slapd/schema_prep.c

diff --git a/CHANGES b/CHANGES
index 61cfa664eee2c6054610e8b0d1ef5af397fa9a97..08835ee6aae4e314ed3502205a6accb5237b1d1f 100644 (file)
--- 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)
index de44c27561bc293977be91d68e80f48d01e5b03c..54d197c495de09ecf28d556adf0b6aa446d10b01 100644 (file)
@@ -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;
index 5bab4a2d0a927475540304ea6ef414d01e79b099..42f9a5e94334f93f43fcb644e54276678982c7b5 100644 (file)
@@ -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;
                        }
                }