X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-sql%2Foperational.c;h=e99741a6d9b4ae530e504a5f971f32c889f661cf;hb=910ee45f0188c9b808a508e49af47a8c83e23422;hp=4cd880187bae9d97c443389205c01e4dde988398;hpb=e77570799bd1a3a60d8019cd05f30a53ebb8a56d;p=openldap diff --git a/servers/slapd/back-sql/operational.c b/servers/slapd/back-sql/operational.c index 4cd880187b..e99741a6d9 100644 --- a/servers/slapd/back-sql/operational.c +++ b/servers/slapd/back-sql/operational.c @@ -1,8 +1,9 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1999-2004 The OpenLDAP Foundation. + * Copyright 1999-2005 The OpenLDAP Foundation. * Portions Copyright 1999 Dmitry Kovalev. + * Portions Copyright 2002 Pierangelo Masarati. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -15,7 +16,8 @@ */ /* ACKNOWLEDGEMENTS: * This work was initially developed by Dmitry Kovalev for inclusion - * by OpenLDAP Software. + * by OpenLDAP Software. Additional significant contributors include + * Pierangelo Masarati. */ #include "portable.h" @@ -81,15 +83,17 @@ backsql_operational_entryCSN( Operation *op ) 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 ); @@ -156,13 +160,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; @@ -178,19 +182,12 @@ backsql_operational( && !got[ BACKSQL_OP_ENTRYUUID ] && attr_find( rs->sr_entry->e_attrs, slap_schema.si_ad_entryUUID ) == NULL ) { - struct berval ndn; - backsql_srch_info bsi; + backsql_srch_info bsi = { 0 }; - ndn = rs->sr_entry->e_nname; - if ( backsql_api_dn2odbc( op, rs, &ndn ) ) { - Debug( LDAP_DEBUG_TRACE, "backsql_operational(): " - "backsql_api_dn2odbc failed\n", - 0, 0, 0 ); - return 1; - } - - rc = backsql_init_search( &bsi, &ndn, LDAP_SCOPE_BASE, - -1, -1, -1, NULL, dbh, op, rs, NULL, 1 ); + rc = backsql_init_search( &bsi, &rs->sr_entry->e_nname, + LDAP_SCOPE_BASE, + (time_t)(-1), NULL, dbh, op, rs, NULL, + BACKSQL_ISF_GET_ID ); if ( rc != LDAP_SUCCESS ) { Debug( LDAP_DEBUG_TRACE, "backsql_operational(): " "could not retrieve entry ID - no such entry\n", @@ -200,10 +197,10 @@ 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 ( ndn.bv_val != rs->sr_entry->e_nname.bv_val ) { - free( ndn.bv_val ); + if ( bsi.bsi_attrs != NULL ) { + op->o_tmpfree( bsi.bsi_attrs, op->o_tmpmemctx ); } if ( *ap == NULL ) {