]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/at.c
update for new backend types
[openldap] / servers / slapd / at.c
index 4902043bc41fbe88fe1a90e062726b831da67189..44ec64c2e0499b4ddfea3fa46d0c428e0bb8014e 100644 (file)
@@ -214,7 +214,31 @@ at_destroy( void )
                a = LDAP_STAILQ_FIRST(&attr_list);
                LDAP_STAILQ_REMOVE_HEAD(&attr_list, sat_next);
 
-               if (a->sat_subtypes) ldap_memfree(a->sat_subtypes);
+               if ( a->sat_equality ) {
+                       MatchingRule    *mr;
+
+                       mr = mr_find( a->sat_equality->smr_oid );
+                       assert( mr != NULL );
+                       if ( mr != a->sat_equality ) {
+                               ch_free( a->sat_equality );
+                               a->sat_equality = NULL;
+                       }
+               }
+
+               assert( a->sat_syntax != NULL );
+               if ( a->sat_syntax != NULL ) {
+                       Syntax          *syn;
+
+                       syn = syn_find( a->sat_syntax->ssyn_oid );
+                       assert( syn != NULL );
+                       if ( syn != a->sat_syntax ) {
+                               ch_free( a->sat_syntax );
+                               a->sat_syntax = NULL;
+                       }
+               }
+
+               if ( a->sat_oidmacro ) ldap_memfree( a->sat_oidmacro );
+               if ( a->sat_subtypes ) ldap_memfree( a->sat_subtypes );
                ad_destroy(a->sat_ad);
                ldap_pvt_thread_mutex_destroy(&a->sat_ad_mutex);
                ldap_attributetype_free((LDAPAttributeType *)a);
@@ -228,7 +252,7 @@ at_destroy( void )
 int
 at_start( AttributeType **at )
 {
-       assert( at );
+       assert( at != NULL );
 
        *at = LDAP_STAILQ_FIRST(&attr_list);
 
@@ -238,7 +262,7 @@ at_start( AttributeType **at )
 int
 at_next( AttributeType **at )
 {
-       assert( at );
+       assert( at != NULL );
 
 #if 1  /* pedantic check */
        {
@@ -250,7 +274,7 @@ at_next( AttributeType **at )
                        }
                }
 
-               assert( tmp );
+               assert( tmp != NULL );
        }
 #endif
 
@@ -383,10 +407,10 @@ at_insert(
 
 int
 at_add(
-    LDAPAttributeType  *at,
-       int                             user,
-       AttributeType   **rsat,
-    const char         **err )
+       LDAPAttributeType       *at,
+       int                     user,
+       AttributeType           **rsat,
+       const char              **err )
 {
        AttributeType   *sat;
        MatchingRule    *mr;
@@ -706,6 +730,11 @@ error_return:;
                        ch_free( sat );
                }
 
+               if ( oidm ) {
+                       SLAP_FREE( at->at_oid );
+                       at->at_oid = oidm;
+               }
+
        } else if ( rsat ) {
                *rsat = sat;
        }