]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-meta/dncache.c
fix response code mapping
[openldap] / servers / slapd / back-meta / dncache.c
index cfe5a80c5f7bfb1ce3a3a70f3ccbd126a16f2e4e..32f427f72d492ace8cad02f8515abf6c7b712b94 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1999-2005 The OpenLDAP Foundation.
+ * Copyright 1999-2007 The OpenLDAP Foundation.
  * Portions Copyright 2001-2003 Pierangelo Masarati.
  * Portions Copyright 1999-2003 Howard Chu.
  * All rights reserved.
@@ -94,11 +94,10 @@ meta_dncache_get_target(
 {
        metadncacheentry_t      tmp_entry,
                                *entry;
-       time_t                  curr_time;
        int                     target = META_TARGET_NONE;
 
-       assert( cache );
-       assert( ndn );
+       assert( cache != NULL );
+       assert( ndn != NULL );
 
        tmp_entry.dn = *ndn;
        ldap_pvt_thread_mutex_lock( &cache->mutex );
@@ -116,13 +115,7 @@ meta_dncache_get_target(
                        target = entry->target;
 
                } else {
-
-                       /*
-                        * Need mutex?
-                        */     
-                       curr_time = time( NULL );
-
-                       if ( entry->lastupdated+cache->ttl > curr_time ) {
+                       if ( entry->lastupdated+cache->ttl > slap_get_time() ) {
                                target = entry->target;
                        }
                }
@@ -149,8 +142,8 @@ meta_dncache_update_entry(
        time_t                  curr_time = 0L;
        int                     err = 0;
 
-       assert( cache );
-       assert( ndn );
+       assert( cache != NULL );
+       assert( ndn != NULL );
 
        /*
         * if cache->ttl < 0, cache never expires;
@@ -158,11 +151,7 @@ meta_dncache_update_entry(
         * else, cache is used with ttl
         */
        if ( cache->ttl > 0 ) {
-
-               /*
-                * Need mutex?
-                */
-               curr_time = time( NULL );
+               curr_time = slap_get_time();
        }
 
        tmp_entry.dn = *ndn;
@@ -178,18 +167,23 @@ meta_dncache_update_entry(
        } else {
                entry = ch_malloc( sizeof( metadncacheentry_t ) + ndn->bv_len + 1 );
                if ( entry == NULL ) {
-                       ldap_pvt_thread_mutex_unlock( &cache->mutex );
-                       return -1;
+                       err = -1;
+                       goto error_return;
                }
 
+               entry->dn.bv_len = ndn->bv_len;
                entry->dn.bv_val = (char *)&entry[ 1 ];
-               AC_MEMCPY( entry->dn.bv_val, ndn->bv_val, ndn->bv_len + 1 );
+               AC_MEMCPY( entry->dn.bv_val, ndn->bv_val, ndn->bv_len );
+               entry->dn.bv_val[ ndn->bv_len ] = '\0';
+
                entry->target = target;
                entry->lastupdated = curr_time;
 
                err = avl_insert( &cache->tree, ( caddr_t )entry,
                                meta_dncache_cmp, meta_dncache_dup );
        }
+
+error_return:;
        ldap_pvt_thread_mutex_unlock( &cache->mutex );
 
        return err;
@@ -209,8 +203,8 @@ meta_dncache_delete_entry(
        metadncacheentry_t      *entry,
                                tmp_entry;
 
-       assert( cache );
-       assert( ndn );
+       assert( cache != NULL );
+       assert( ndn != NULL );
 
        tmp_entry.dn = *ndn;