]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/overlays/dds.c
ITS#4225 added proxyCacheQueries parameter for configuring max_queries
[openldap] / servers / slapd / overlays / dds.c
index 7e0dabf83e8073257bc40aa154bceb03a0c2a3ad..918bda554a90f30f6cef30bc5801f28a5ef7fe7b 100644 (file)
@@ -389,16 +389,18 @@ dds_op_add( Operation *op, SlapReply *rs )
                char            ttlbuf[] = "31557600";
                char            tsbuf[ LDAP_LUTIL_GENTIME_BUFSIZE ];
                struct berval   bv;
-       
-               ldap_pvt_thread_mutex_lock( &di->di_mutex );
-               rs->sr_err = ( di->di_max_dynamicObjects && 
-                       di->di_num_dynamicObjects >= di->di_max_dynamicObjects );
-               ldap_pvt_thread_mutex_unlock( &di->di_mutex );
-               if ( rs->sr_err ) {
-                       op->o_bd->bd_info = (BackendInfo *)on->on_info;
-                       send_ldap_error( op, rs, LDAP_UNWILLING_TO_PERFORM,
-                               "too many dynamicObjects in context" );
-                       return rs->sr_err;
+
+               if ( !be_isroot_dn( op->o_bd, &op->o_req_ndn ) ) {
+                       ldap_pvt_thread_mutex_lock( &di->di_mutex );
+                       rs->sr_err = ( di->di_max_dynamicObjects && 
+                               di->di_num_dynamicObjects >= di->di_max_dynamicObjects );
+                       ldap_pvt_thread_mutex_unlock( &di->di_mutex );
+                       if ( rs->sr_err ) {
+                               op->o_bd->bd_info = (BackendInfo *)on->on_info;
+                               send_ldap_error( op, rs, LDAP_UNWILLING_TO_PERFORM,
+                                       "too many dynamicObjects in context" );
+                               return rs->sr_err;
+                       }
                }
 
                ttl = DDS_DEFAULT_TTL( di );
@@ -1723,17 +1725,17 @@ dds_db_open(
        di->di_suffix = be->be_suffix;
        di->di_nsuffix = be->be_nsuffix;
 
-       /* force deletion of expired entries... */
-       be->bd_info = (BackendInfo *)on->on_info;
-       rc = dds_expire( thrctx, di );
-       be->bd_info = (BackendInfo *)on;
-       if ( rc != LDAP_SUCCESS ) {
-               rc = 1;
-               goto done;
-       }
-
        /* ... so that count, if required, is accurate */
        if ( di->di_max_dynamicObjects > 0 ) {
+               /* force deletion of expired entries... */
+               be->bd_info = (BackendInfo *)on->on_info;
+               rc = dds_expire( thrctx, di );
+               be->bd_info = (BackendInfo *)on;
+               if ( rc != LDAP_SUCCESS ) {
+                       rc = 1;
+                       goto done;
+               }
+
                rc = dds_count( thrctx, be );
                if ( rc != LDAP_SUCCESS ) {
                        rc = 1;
@@ -1871,11 +1873,10 @@ dds_initialize()
                        char                    *desc;
                        AttributeDescription    **ad;
                }               s_at[] = {
-#warning "FIXME: register OID!!!"
-                       { "entryExpireTimestamp", "( 1.3.6.1.4.1.4203.666.999999.0 "
+                       { "entryExpireTimestamp", "( 1.3.6.1.4.1.4203.666.1.57 "
                                "NAME ( 'entryExpireTimestamp' ) "
-                               "DESC 'RFC2589 extension: expire time of a dynamic object, "
-                                       "computed as modifyTimestamp + entryTtl' "
+                               "DESC 'RFC2589 OpenLDAP extension: expire time of a dynamic object, "
+                                       "computed as now + entryTtl' "
                                "EQUALITY generalizedTimeMatch "
                                "ORDERING generalizedTimeOrderingMatch "
                                "SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 "