From 3647cba1315060683be59035759d5ccc1f2f6d2d Mon Sep 17 00:00:00 2001 From: Luke Howard Date: Tue, 9 Aug 2005 05:28:58 +0000 Subject: [PATCH] ITS#3924 Also, fix slapi_dn_parent() crasher --- servers/slapd/slapi/proto-slapi.h | 2 +- servers/slapd/slapi/slapi_pblock.c | 2 +- servers/slapd/slapi/slapi_utils.c | 31 ++++++++++-------------------- 3 files changed, 12 insertions(+), 23 deletions(-) diff --git a/servers/slapd/slapi/proto-slapi.h b/servers/slapd/slapi/proto-slapi.h index 0d1e8ee6c9..0728af5bcb 100644 --- a/servers/slapd/slapi/proto-slapi.h +++ b/servers/slapd/slapi/proto-slapi.h @@ -26,7 +26,7 @@ LDAP_BEGIN_DECL /* slapi_utils.c */ -LDAP_SLAPI_F (LDAPMod **) slapi_int_modifications2ldapmods LDAP_P(( Modifications ** )); +LDAP_SLAPI_F (LDAPMod **) slapi_int_modifications2ldapmods LDAP_P(( Modifications * )); LDAP_SLAPI_F (Modifications *) slapi_int_ldapmods2modifications LDAP_P(( LDAPMod ** )); LDAP_SLAPI_F (int) slapi_int_count_controls LDAP_P(( LDAPControl **ctrls )); LDAP_SLAPI_F (char **) slapi_get_supported_extended_ops LDAP_P((void)); diff --git a/servers/slapd/slapi/slapi_pblock.c b/servers/slapd/slapi/slapi_pblock.c index e273295c1b..1b4e5dab56 100644 --- a/servers/slapd/slapi/slapi_pblock.c +++ b/servers/slapd/slapi/slapi_pblock.c @@ -607,7 +607,7 @@ pblock_get( Slapi_PBlock *pb, int param, void **value ) rc = PBLOCK_ERROR; break; } - mods = slapi_int_modifications2ldapmods( &pb->pb_op->orm_modlist ); + mods = slapi_int_modifications2ldapmods( pb->pb_op->orm_modlist ); pblock_set_default( pb, param, (void *)mods ); } *((LDAPMod ***)value) = mods; diff --git a/servers/slapd/slapi/slapi_utils.c b/servers/slapd/slapi/slapi_utils.c index 8c82d9adea..3e1d1149ba 100644 --- a/servers/slapd/slapi/slapi_utils.c +++ b/servers/slapd/slapi/slapi_utils.c @@ -903,6 +903,7 @@ slapi_dn_parent( const char *_dn ) { struct berval dn, prettyDN; struct berval parentDN; + char *ret; if ( _dn == NULL ) { return NULL; @@ -921,13 +922,15 @@ slapi_dn_parent( const char *_dn ) dnParent( &prettyDN, &parentDN ); /* in-place */ - slapi_ch_free( (void **)&prettyDN.bv_val ); - if ( parentDN.bv_len == 0 ) { + slapi_ch_free_string( &prettyDN.bv_val ); return NULL; } - return slapi_ch_strdup( parentDN.bv_val ); + ret = slapi_ch_strdup( parentDN.bv_val ); + slapi_ch_free_string( &prettyDN.bv_val ); + + return ret; } int slapi_dn_isbesuffix( Slapi_PBlock *pb, char *ldn ) @@ -2691,20 +2694,14 @@ int slapi_acl_check_mods(Slapi_PBlock *pb, Slapi_Entry *e, LDAPMod **mods, char /* * Synthesise an LDAPMod array from a Modifications list to pass - * to SLAPI. This synthesis is destructive and as such the - * Modifications list may not be used after calling this - * function. - * - * This function must also be called before slap_mods_check(). + * to SLAPI. */ -LDAPMod **slapi_int_modifications2ldapmods( Modifications **pmodlist ) +LDAPMod **slapi_int_modifications2ldapmods( Modifications *modlist ) { - Modifications *ml, *modlist; + Modifications *ml; LDAPMod **mods, *modp; int i, j; - modlist = *pmodlist; - for( i = 0, ml = modlist; ml != NULL; i++, ml = ml->sml_next ) ; @@ -2731,14 +2728,9 @@ LDAPMod **slapi_int_modifications2ldapmods( Modifications **pmodlist ) for( j = 0; ml->sml_values[j].bv_val != NULL; j++ ) { modp->mod_bvalues[j] = (struct berval *)slapi_ch_malloc( sizeof(struct berval) ); - /* Take ownership of original values. */ - modp->mod_bvalues[j]->bv_len = ml->sml_values[j].bv_len; - modp->mod_bvalues[j]->bv_val = ml->sml_values[j].bv_val; - ml->sml_values[j].bv_len = 0; - ml->sml_values[j].bv_val = NULL; + ber_dupbv( modp->mod_bvalues[j], &ml->sml_values[j] ); } modp->mod_bvalues[j] = NULL; - slapi_ch_free( (void **)&ml->sml_values ); } else { modp->mod_bvalues = NULL; } @@ -2747,9 +2739,6 @@ LDAPMod **slapi_int_modifications2ldapmods( Modifications **pmodlist ) mods[i] = NULL; - slap_mods_free( modlist, 1 ); - *pmodlist = NULL; - return mods; } -- 2.39.5