]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/overlays/dds.c
Fix for CB_TAIL with cached results
[openldap] / servers / slapd / overlays / dds.c
index 561062d578ab49b8bf35f39a53c12a0f7341b905..f4347209338c23eb5df55d9391d4eb7541fca400 100644 (file)
@@ -137,7 +137,7 @@ dds_expire( void *ctx, dds_info_t *di )
        int             rc;
        char            *extra = "";
 
-       connection_fake_init( &conn, &opbuf, ctx );
+       connection_fake_init2( &conn, &opbuf, ctx, 0 );
        op = &opbuf.ob_op;
 
        op->o_tag = LDAP_REQ_SEARCH;
@@ -243,10 +243,9 @@ done_search:;
                                        de->de_ndn.bv_val, rs.sr_err );
                                break;
                        }
-       
+
                        if ( de != NULL ) {
                                *dep = de->de_next;
-                               dep = &de->de_next;
                                op->o_tmpfree( de, op->o_tmpmemctx );
                        }
                }
@@ -582,7 +581,8 @@ dds_op_modify( Operation *op, SlapReply *rs )
                        }
 
                } else if ( mod->sml_desc == slap_schema.si_ad_entryTtl ) {
-                       unsigned long   ttl;
+                       unsigned long   uttl;
+                       time_t          ttl;
                        int             rc;
 
                        switch ( mod->sml_op ) {
@@ -629,7 +629,8 @@ dds_op_modify( Operation *op, SlapReply *rs )
                                        goto done;
                                }
 
-                               rc = lutil_atoul( &ttl, mod->sml_values[ 0 ].bv_val );
+                               rc = lutil_atoul( &uttl, mod->sml_values[ 0 ].bv_val );
+                               ttl = (time_t)uttl;
                                assert( rc == 0 );
                                if ( ttl > DDS_RF2589_MAX_TTL ) {
                                        rs->sr_err = LDAP_PROTOCOL_ERROR;
@@ -646,7 +647,7 @@ dds_op_modify( Operation *op, SlapReply *rs )
                                        goto done;
                                }
 
-                               entryTtl = (time_t)ttl;
+                               entryTtl = ttl;
                                bv_entryTtl.bv_len = mod->sml_values[ 0 ].bv_len;
                                AC_MEMCPY( bv_entryTtl.bv_val, mod->sml_values[ 0 ].bv_val, bv_entryTtl.bv_len );
                                bv_entryTtl.bv_val[ bv_entryTtl.bv_len ] = '\0';
@@ -1121,26 +1122,24 @@ dds_op_extended( Operation *op, SlapReply *rs )
                        BerElementBuffer        berbuf;
                        BerElement              *ber = (BerElement *)&berbuf;
 
-                       if ( rs->sr_err == LDAP_SUCCESS ) {
-                               ber_init_w_nullc( ber, LBER_USE_DER );
+                       ber_init_w_nullc( ber, LBER_USE_DER );
 
-                               rc = ber_printf( ber, "{tiN}", LDAP_TAG_EXOP_REFRESH_RES_TTL, (int)ttl );
+                       rc = ber_printf( ber, "{tiN}", LDAP_TAG_EXOP_REFRESH_RES_TTL, (int)ttl );
 
-                               if ( rc < 0 ) {
-                                       rs->sr_err = LDAP_OTHER;
-                                       rs->sr_text = "internal error";
+                       if ( rc < 0 ) {
+                               rs->sr_err = LDAP_OTHER;
+                               rs->sr_text = "internal error";
 
-                               } else {
-                                       (void)ber_flatten( ber, &rs->sr_rspdata );
-                                       rs->sr_rspoid = ch_strdup( slap_EXOP_REFRESH.bv_val );
-
-                                       Log3( LDAP_DEBUG_TRACE, LDAP_LEVEL_INFO,
-                                               "%s REFRESH dn=\"%s\" TTL=%ld\n",
-                                               op->o_log_prefix, op->o_req_ndn.bv_val, ttl );
-                               }
+                       } else {
+                               (void)ber_flatten( ber, &rs->sr_rspdata );
+                               rs->sr_rspoid = ch_strdup( slap_EXOP_REFRESH.bv_val );
 
-                               ber_free_buf( ber );
+                               Log3( LDAP_DEBUG_TRACE, LDAP_LEVEL_INFO,
+                                       "%s REFRESH dn=\"%s\" TTL=%ld\n",
+                                       op->o_log_prefix, op->o_req_ndn.bv_val, ttl );
                        }
+
+                       ber_free_buf( ber );
                }
 
                return rs->sr_err;
@@ -1391,7 +1390,7 @@ dds_cfgen( ConfigArgs *c )
 
                if ( t < DDS_RF2589_DEFAULT_TTL || t > DDS_RF2589_MAX_TTL ) {
                        snprintf( c->cr_msg, sizeof( c->cr_msg ),
-                               "DDS invalid dds-max-ttl=%ld; must be between %d and %d",
+                               "DDS invalid dds-max-ttl=%lu; must be between %d and %d",
                                t, DDS_RF2589_DEFAULT_TTL, DDS_RF2589_MAX_TTL );
                        Log2( LDAP_DEBUG_ANY, LDAP_LEVEL_ERR,
                                "%s: %s.\n", c->log, c->cr_msg );
@@ -1411,9 +1410,9 @@ dds_cfgen( ConfigArgs *c )
                        return 1;
                }
 
-               if ( t < 0 || t > DDS_RF2589_MAX_TTL ) {
+               if ( t > DDS_RF2589_MAX_TTL ) {
                        snprintf( c->cr_msg, sizeof( c->cr_msg ),
-                               "DDS invalid dds-min-ttl=%ld",
+                               "DDS invalid dds-min-ttl=%lu",
                                t );
                        Log2( LDAP_DEBUG_ANY, LDAP_LEVEL_ERR,
                                "%s: %s.\n", c->log, c->cr_msg );
@@ -1438,9 +1437,9 @@ dds_cfgen( ConfigArgs *c )
                        return 1;
                }
 
-               if ( t < 0 || t > DDS_RF2589_MAX_TTL ) {
+               if ( t > DDS_RF2589_MAX_TTL ) {
                        snprintf( c->cr_msg, sizeof( c->cr_msg ),
-                               "DDS invalid dds-default-ttl=%ld",
+                               "DDS invalid dds-default-ttl=%lu",
                                t );
                        Log2( LDAP_DEBUG_ANY, LDAP_LEVEL_ERR,
                                "%s: %s.\n", c->log, c->cr_msg );
@@ -1467,7 +1466,7 @@ dds_cfgen( ConfigArgs *c )
 
                if ( t <= 0 ) {
                        snprintf( c->cr_msg, sizeof( c->cr_msg ),
-                               "DDS invalid dds-interval=%ld",
+                               "DDS invalid dds-interval=%lu",
                                t );
                        Log2( LDAP_DEBUG_ANY, LDAP_LEVEL_ERR,
                                "%s: %s.\n", c->log, c->cr_msg );
@@ -1502,9 +1501,9 @@ dds_cfgen( ConfigArgs *c )
                        return 1;
                }
 
-               if ( t < 0 || t > DDS_RF2589_MAX_TTL ) {
+               if ( t > DDS_RF2589_MAX_TTL ) {
                        snprintf( c->cr_msg, sizeof( c->cr_msg ),
-                               "DDS invalid dds-tolerance=%ld",
+                               "DDS invalid dds-tolerance=%lu",
                                t );
                        Log2( LDAP_DEBUG_ANY, LDAP_LEVEL_ERR,
                                "%s: %s.\n", c->log, c->cr_msg );
@@ -1628,7 +1627,7 @@ dds_count( void *ctx, BackendDB *be )
        int             rc;
        char            *extra = "";
 
-       connection_fake_init( &conn, &opbuf, ctx );
+       connection_fake_init2( &conn, &opbuf, ctx, 0 );
        op = &opbuf.ob_op;
 
        op->o_tag = LDAP_REQ_SEARCH;