]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/at.c
use asynchronous StartTLS
[openldap] / servers / slapd / at.c
index 58c40006bd468bfde683978ad7f2e59499618359..7958a1ec3987b154c4916f71742ddcd80ab56656 100644 (file)
@@ -57,9 +57,12 @@ struct aindexrec {
 };
 
 static Avlnode *attr_index = NULL;
+static Avlnode *attr_cache = NULL;
 static LDAP_SLIST_HEAD(ATList, slap_attribute_type) attr_list
        = LDAP_SLIST_HEAD_INITIALIZER(&attr_list);
 
+int at_oc_cache;
+
 static int
 attr_index_cmp(
     const void *v_air1,
@@ -100,8 +103,18 @@ at_bvfind( struct berval *name )
 {
        struct aindexrec *air;
 
+       if ( attr_cache ) {
+               air = avl_find( attr_cache, name, attr_index_name_cmp );
+               if ( air ) return air->air_at;
+       }
+
        air = avl_find( attr_index, name, attr_index_name_cmp );
 
+       if ( air && ( slapMode & SLAP_TOOL_MODE ) && at_oc_cache ) {
+               avl_insert( &attr_cache, (caddr_t) air,
+                       attr_index_cmp, avl_dup_error );
+       }
+
        return air != NULL ? air->air_at : NULL;
 }