From: Pierangelo Masarati Date: Thu, 2 Dec 2004 22:59:55 +0000 (+0000) Subject: comment about helper requirements X-Git-Tag: OPENLDAP_REL_ENG_2_3_0ALPHA~150 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=2d88c1b826797b30500c7d0b3d4e8219277dfacc;p=openldap comment about helper requirements --- diff --git a/servers/slapd/back-sql/api.c b/servers/slapd/back-sql/api.c index 1a1c32ab93..d5730d826b 100644 --- a/servers/slapd/back-sql/api.c +++ b/servers/slapd/back-sql/api.c @@ -94,14 +94,30 @@ backsql_api_dn2odbc( Operation *op, SlapReply *rs, struct berval *dn ) for ( ; ba; ba = ba->ba_next ) { if ( ba->ba_dn2odbc ) { + /* + * The dn2odbc() helper is supposed to rewrite + * the contents of bv, freeing the original value + * with ch_free() if required and replacing it + * with a newly allocated one using ch_malloc() + * or companion functions. + * + * NOTE: it is supposed to __always__ free + * the value of bv in case of error, and reset + * it with BER_BVZERO() . + */ rc = ( *ba->ba_dn2odbc )( op, rs, &bv ); if ( rc ) { + /* in case of error, dn2odbc() must cleanup */ + assert( BER_BVISNULL( &bv ) ); + return rc; } } } + assert( !BER_BVISNULL( &bv ) ); + *dn = bv; return 0; @@ -126,13 +142,28 @@ backsql_api_odbc2dn( Operation *op, SlapReply *rs, struct berval *dn ) for ( ; ba; ba = ba->ba_next ) { if ( ba->ba_dn2odbc ) { rc = ( *ba->ba_odbc2dn )( op, rs, &bv ); - + /* + * The odbc2dn() helper is supposed to rewrite + * the contents of bv, freeing the original value + * with ch_free() if required and replacing it + * with a newly allocated one using ch_malloc() + * or companion functions. + * + * NOTE: it is supposed to __always__ free + * the value of bv in case of error, and reset + * it with BER_BVZERO() . + */ if ( rc ) { + /* in case of error, odbc2dn() must cleanup */ + assert( BER_BVISNULL( &bv ) ); + return rc; } } } + assert( !BER_BVISNULL( &bv ) ); + *dn = bv; return 0;