]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-sql/operational.c
re-fix previus commit the other way 'round (rids are < 1000)
[openldap] / servers / slapd / back-sql / operational.c
index dbc1d88b6871814a5507eb8fc83ec150de4539e3..60252f6d49f3c129bae71b0c03bc8e09b46e47e0 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 1999 Dmitry Kovalev.
  * Portions Copyright 2002 Pierangelo Masarati.
  * All rights reserved.
@@ -53,8 +53,7 @@ backsql_operational_entryUUID( backsql_info *bi, backsql_entryID *id )
                return NULL;
        }
 
-       a = ch_malloc( sizeof( Attribute ) );
-       a->a_desc = desc;
+       a = attr_alloc( desc );
 
        a->a_vals = (BerVarray) ch_malloc( 2 * sizeof( struct berval ) );
        a->a_vals[ 0 ] = val;
@@ -63,9 +62,6 @@ backsql_operational_entryUUID( backsql_info *bi, backsql_entryID *id )
        a->a_nvals = (BerVarray) ch_malloc( 2 * sizeof( struct berval ) );
        a->a_nvals[ 0 ] = nval;
        BER_BVZERO( &a->a_nvals[ 1 ] );
-       
-       a->a_next = NULL;
-       a->a_flags = 0;
 
        return a;
 }
@@ -77,30 +73,28 @@ backsql_operational_entryCSN( Operation *op )
        struct berval   entryCSN;
        Attribute       *a;
 
-       a = ch_malloc( sizeof( Attribute ) );
-       a->a_desc = slap_schema.si_ad_entryCSN;
+       a = attr_alloc( slap_schema.si_ad_entryCSN );
        a->a_vals = ch_malloc( 2 * sizeof( struct berval ) );
        BER_BVZERO( &a->a_vals[ 1 ] );
 
 #ifdef BACKSQL_SYNCPROV
-       if ( op->o_sync && op->o_tag == LDAP_REQ_SEARCH ) {
-               assert( op->o_private );
+       if ( op->o_sync && op->o_tag == LDAP_REQ_SEARCH && op->o_private != NULL ) {
+               assert( op->o_private != NULL );
 
                entryCSN = *((struct berval *)op->o_private);
 
        } else
 #endif /* BACKSQL_SYNCPROV */
        {
-               slap_get_csn( op, csnbuf, sizeof(csnbuf), &entryCSN, 0 );
+               entryCSN.bv_val = csnbuf;
+               entryCSN.bv_len = sizeof( csnbuf );
+               slap_get_csn( op, &entryCSN, 0 );
        }
 
        ber_dupbv( &a->a_vals[ 0 ], &entryCSN );
 
        a->a_nvals = a->a_vals;
 
-       a->a_next = NULL;
-       a->a_flags = 0;
-
        return a;
 }
 
@@ -158,13 +152,13 @@ backsql_operational(
                        && !got[ BACKSQL_OP_HASSUBORDINATES ]
                        && attr_find( rs->sr_entry->e_attrs, slap_schema.si_ad_hasSubordinates ) == NULL )
        {
-               rc = backsql_has_children( bi, dbh, &rs->sr_entry->e_nname );
+               rc = backsql_has_children( op, dbh, &rs->sr_entry->e_nname );
 
                switch( rc ) {
                case LDAP_COMPARE_TRUE:
                case LDAP_COMPARE_FALSE:
                        *ap = slap_operational_hasSubordinate( rc == LDAP_COMPARE_TRUE );
-                       assert( *ap );
+                       assert( *ap != NULL );
                        ap = &(*ap)->a_next;
                        rc = 0;
                        break;
@@ -180,11 +174,10 @@ backsql_operational(
                        && !got[ BACKSQL_OP_ENTRYUUID ]
                        && attr_find( rs->sr_entry->e_attrs, slap_schema.si_ad_entryUUID ) == NULL )
        {
-               backsql_srch_info       bsi;
+               backsql_srch_info       bsi = { 0 };
 
                rc = backsql_init_search( &bsi, &rs->sr_entry->e_nname,
                                LDAP_SCOPE_BASE,
-                               SLAP_NO_LIMIT, SLAP_NO_LIMIT,
                                (time_t)(-1), NULL, dbh, op, rs, NULL,
                                BACKSQL_ISF_GET_ID );
                if ( rc != LDAP_SUCCESS ) {
@@ -196,7 +189,8 @@ backsql_operational(
 
                *ap = backsql_operational_entryUUID( bi, &bsi.bsi_base_id );
 
-               (void)backsql_free_entryID( &bsi.bsi_base_id, 0 );
+               (void)backsql_free_entryID( op, &bsi.bsi_base_id, 0 );
+
                if ( bsi.bsi_attrs != NULL ) {
                        op->o_tmpfree( bsi.bsi_attrs, op->o_tmpmemctx );
                }