bvalue cleanup

This commit is contained in:
Kurt Zeilenga 2004-04-08 06:49:17 +00:00
parent b217659088
commit c7f0438044
18 changed files with 175 additions and 161 deletions

View file

@ -1632,12 +1632,12 @@ acl_check_modlist(
goto done;
}
if ( mlist->sml_bvalues == NULL ) break;
if ( mlist->sml_values == NULL ) break;
/* fall thru to check value to add */
case LDAP_MOD_ADD:
assert( mlist->sml_bvalues != NULL );
assert( mlist->sml_values != NULL );
for ( bv = mlist->sml_nvalues
? mlist->sml_nvalues : mlist->sml_values;
@ -1653,7 +1653,7 @@ acl_check_modlist(
break;
case LDAP_MOD_DELETE:
if ( mlist->sml_bvalues == NULL ) {
if ( mlist->sml_values == NULL ) {
if ( ! access_allowed( op, e,
mlist->sml_desc, NULL, ACL_WRITE, NULL ) )
{

View file

@ -36,7 +36,8 @@
#ifdef LDAP_SLAPI
#include "slapi/slapi.h"
static void init_add_pblock( Operation *op, struct berval *dn, Entry *e, int manageDSAit );
static void init_add_pblock( Operation *op, struct berval *dn, Entry *e,
int manageDSAit );
static int call_add_preop_plugins( Operation *op );
static void call_add_postop_plugins( Operation *op );
#endif /* LDAP_SLAPI */
@ -86,7 +87,8 @@ do_add( Operation *op, SlapReply *rs )
e = (Entry *) ch_calloc( 1, sizeof(Entry) );
rs->sr_err = dnPrettyNormal( NULL, &dn, &op->o_req_dn, &op->o_req_ndn, op->o_tmpmemctx );
rs->sr_err = dnPrettyNormal( NULL, &dn, &op->o_req_dn, &op->o_req_ndn,
op->o_tmpmemctx );
if( rs->sr_err != LDAP_SUCCESS ) {
#ifdef NEW_LOGGING
@ -483,11 +485,12 @@ slap_mods2entry(
/* check if the values we're adding already exist */
if( mr == NULL || !mr->smr_match ) {
for ( i = 0; mods->sml_bvalues[i].bv_val != NULL; i++ ) {
for ( i = 1; mods->sml_values[i].bv_val != NULL; i++ ) {
/* test asserted values against themselves */
for( j = 0; j < i; j++ ) {
if ( bvmatch( &mods->sml_bvalues[i],
&mods->sml_bvalues[j] ) ) {
if ( bvmatch( &mods->sml_values[i],
&mods->sml_values[j] ) )
{
/* value exists already */
snprintf( textbuf, textlen,
"%s: value #%d provided more than once",
@ -501,11 +504,12 @@ slap_mods2entry(
int rc = LDAP_SUCCESS;
int match;
for ( i = 0; mods->sml_values[i].bv_val != NULL; i++ ) {
for ( i = 1; mods->sml_values[i].bv_val != NULL; i++ ) {
/* test asserted values against themselves */
for( j = 0; j < i; j++ ) {
rc = value_match( &match, mods->sml_desc, mr,
SLAP_MR_EQUALITY | SLAP_MR_VALUE_OF_ATTRIBUTE_SYNTAX
SLAP_MR_EQUALITY
| SLAP_MR_VALUE_OF_ATTRIBUTE_SYNTAX
| SLAP_MR_ASSERTED_VALUE_NORMALIZED_MATCH
| SLAP_MR_ATTRIBUTE_VALUE_NORMALIZED_MATCH,
mods->sml_nvalues
@ -534,17 +538,17 @@ slap_mods2entry(
/* move ad to attr structure */
attr->a_desc = mods->sml_desc;
if ( !dup )
mods->sml_desc = NULL;
if ( !dup ) mods->sml_desc = NULL;
/* move values to attr structure */
/* should check for duplicates */
if ( dup ) {
int i;
for ( i = 0; mods->sml_values[i].bv_val; i++ ) ;
for ( i = 0; mods->sml_values[i].bv_val; i++ ) /* EMPTY */;
attr->a_vals = (BerVarray) ch_calloc( i+1, sizeof( BerValue ));
for ( i = 0; mods->sml_values[i].bv_val; i++ )
for ( i = 0; mods->sml_values[i].bv_val; i++ ) {
ber_dupbv( &attr->a_vals[i], &mods->sml_values[i] );
}
attr->a_vals[i].bv_len = 0;
attr->a_vals[i].bv_val = NULL;
} else {
@ -555,10 +559,11 @@ slap_mods2entry(
if ( mods->sml_nvalues ) {
if ( dup ) {
int i;
for ( i = 0; mods->sml_nvalues[i].bv_val; i++ ) ;
for ( i = 0; mods->sml_nvalues[i].bv_val; i++ ) /* EMPTY */;
attr->a_nvals = (BerVarray) ch_calloc( i+1, sizeof( BerValue ));
for ( i = 0; mods->sml_nvalues[i].bv_val; i++ )
for ( i = 0; mods->sml_nvalues[i].bv_val; i++ ) {
ber_dupbv( &attr->a_nvals[i], &mods->sml_nvalues[i] );
}
attr->a_nvals[i].bv_len = 0;
attr->a_nvals[i].bv_val = NULL;
} else {
@ -600,10 +605,10 @@ slap_entry2mods(
mod->sml_type = a_new_desc->ad_cname;
for ( count = 0; a_new->a_vals[count].bv_val; count++ );
for ( count = 0; a_new->a_vals[count].bv_val; count++ ) /* EMPTY */;
mod->sml_bvalues = (struct berval*) malloc(
(count+1) * sizeof( struct berval) );
mod->sml_values = (struct berval*) malloc(
(count+1) * sizeof( struct berval) );
/* see slap_mods_check() comments...
* if a_vals == a_nvals, there is no normalizer.
@ -617,17 +622,17 @@ slap_entry2mods(
}
for ( i = 0; i < count; i++ ) {
ber_dupbv(mod->sml_bvalues+i, a_new->a_vals+i);
ber_dupbv(mod->sml_values+i, a_new->a_vals+i);
if ( mod->sml_nvalues ) {
ber_dupbv( mod->sml_nvalues+i, a_new->a_vals+i );
}
}
mod->sml_bvalues[count].bv_val = 0;
mod->sml_bvalues[count].bv_len = 0;
mod->sml_values[count].bv_val = NULL;
mod->sml_values[count].bv_len = 0;
if ( mod->sml_nvalues ) {
mod->sml_nvalues[count].bv_val = 0;
mod->sml_nvalues[count].bv_val = NULL;
mod->sml_nvalues[count].bv_len = 0;
}

View file

@ -53,8 +53,7 @@ get_ava(
BerElement *ber,
AttributeAssertion **ava,
unsigned usage,
const char **text
)
const char **text )
{
int rc;
ber_tag_t rtag;

View file

@ -90,7 +90,7 @@ bdb_csn_commit(
modvals[1].bv_len = 0;
mod.sml_op = LDAP_MOD_REPLACE;
mod.sml_bvalues = modvals;
mod.sml_values = modvals;
mod.sml_nvalues = NULL;
mod.sml_desc = slap_schema.si_ad_contextCSN;
mod.sml_type = mod.sml_desc->ad_cname;

View file

@ -117,42 +117,42 @@ ldap_back_modify(
mods[i].mod_op = ml->sml_op | LDAP_MOD_BVALUES;
mods[i].mod_type = mapped.bv_val;
if ( ml->sml_bvalues != NULL ) {
if ( ml->sml_values != NULL ) {
if ( is_oc ) {
for (j = 0; ml->sml_bvalues[j].bv_val; j++);
mods[i].mod_bvalues = (struct berval **)ch_malloc((j+1) *
for (j = 0; ml->sml_values[j].bv_val; j++);
mods[i].mod_values = (struct berval **)ch_malloc((j+1) *
sizeof(struct berval *));
for (j = 0; ml->sml_bvalues[j].bv_val; j++) {
for (j = 0; ml->sml_values[j].bv_val; j++) {
ldap_back_map(&li->rwmap.rwm_oc,
&ml->sml_bvalues[j],
&ml->sml_values[j],
&mapped, BACKLDAP_MAP);
if (mapped.bv_val == NULL || mapped.bv_val[0] == '\0') {
continue;
}
mods[i].mod_bvalues[j] = &mapped;
mods[i].mod_values[j] = &mapped;
}
mods[i].mod_bvalues[j] = NULL;
mods[i].mod_values[j] = NULL;
} else {
if ( ml->sml_desc->ad_type->sat_syntax ==
slap_schema.si_syn_distinguishedName ) {
ldap_dnattr_rewrite( &dc, ml->sml_bvalues );
ldap_dnattr_rewrite( &dc, ml->sml_values );
}
if ( ml->sml_bvalues == NULL ) {
if ( ml->sml_values == NULL ) {
continue;
}
for (j = 0; ml->sml_bvalues[j].bv_val; j++);
mods[i].mod_bvalues = (struct berval **)ch_malloc((j+1) *
for (j = 0; ml->sml_values[j].bv_val; j++);
mods[i].mod_values = (struct berval **)ch_malloc((j+1) *
sizeof(struct berval *));
for (j = 0; ml->sml_bvalues[j].bv_val; j++)
mods[i].mod_bvalues[j] = &ml->sml_bvalues[j];
mods[i].mod_bvalues[j] = NULL;
for (j = 0; ml->sml_values[j].bv_val; j++)
mods[i].mod_values[j] = &ml->sml_values[j];
mods[i].mod_values[j] = NULL;
}
} else {
mods[i].mod_bvalues = NULL;
mods[i].mod_values = NULL;
}
i++;
@ -186,7 +186,7 @@ cleanup:;
free( mdn.bv_val );
}
for (i=0; modv[i]; i++) {
ch_free(modv[i]->mod_bvalues);
ch_free(modv[i]->mod_values);
}
ch_free( mods );
ch_free( modv );

View file

@ -37,8 +37,7 @@ int ldbm_modify_internal(
Entry *e,
const char **text,
char *textbuf,
size_t textlen
)
size_t textlen )
{
int rc = LDAP_SUCCESS;
Modification *mod;
@ -47,12 +46,19 @@ int ldbm_modify_internal(
Attribute *ap;
#ifdef NEW_LOGGING
LDAP_LOG( BACK_LDBM, ENTRY, "ldbm_modify_internal: %s\n", e->e_name.bv_val, 0, 0 );
LDAP_LOG( BACK_LDBM, ENTRY,
"ldbm_modify_internal: %s\n",
e->e_name.bv_val,
get_permissiveModify(op) ? " (permissive)" : "",
0 );
#else
Debug(LDAP_DEBUG_TRACE, "ldbm_modify_internal: %s\n", e->e_name.bv_val, 0, 0);
Debug(LDAP_DEBUG_TRACE,
"ldbm_modify_internal: %s\n",
e->e_name.bv_val,
get_permissiveModify(op) ? " (permissive)" : "",
0 );
#endif
if ( !acl_check_modlist( op, e, modlist )) {
return LDAP_INSUFFICIENT_ACCESS;
}
@ -66,13 +72,15 @@ int ldbm_modify_internal(
switch ( mod->sm_op ) {
case LDAP_MOD_ADD:
#ifdef NEW_LOGGING
LDAP_LOG( BACK_LDBM, DETAIL1, "ldbm_modify_internal: add\n", 0, 0, 0);
LDAP_LOG( BACK_LDBM, DETAIL1,
"ldbm_modify_internal: add\n", 0, 0, 0);
#else
Debug(LDAP_DEBUG_ARGS, "ldbm_modify_internal: add\n", 0, 0, 0);
Debug(LDAP_DEBUG_ARGS,
"ldbm_modify_internal: add\n", 0, 0, 0);
#endif
rc = modify_add_values( e, mod, get_permissiveModify( op ),
text, textbuf, textlen );
text, textbuf, textlen );
if( rc != LDAP_SUCCESS ) {
#ifdef NEW_LOGGING
LDAP_LOG( BACK_LDBM, INFO,
@ -86,13 +94,15 @@ int ldbm_modify_internal(
case LDAP_MOD_DELETE:
#ifdef NEW_LOGGING
LDAP_LOG( BACK_LDBM, DETAIL1, "ldbm_modify_internal: delete\n", 0,0,0);
LDAP_LOG( BACK_LDBM, DETAIL1,
"ldbm_modify_internal: delete\n", 0,0,0);
#else
Debug(LDAP_DEBUG_ARGS, "ldbm_modify_internal: delete\n", 0, 0, 0);
Debug(LDAP_DEBUG_ARGS,
"ldbm_modify_internal: delete\n", 0, 0, 0);
#endif
rc = modify_delete_values( e, mod, get_permissiveModify( op ),
text, textbuf, textlen );
text, textbuf, textlen );
assert( rc != LDAP_TYPE_OR_VALUE_EXISTS );
if( rc != LDAP_SUCCESS ) {
#ifdef NEW_LOGGING
@ -107,13 +117,15 @@ int ldbm_modify_internal(
case LDAP_MOD_REPLACE:
#ifdef NEW_LOGGING
LDAP_LOG( BACK_LDBM, DETAIL1, "ldbm_modify_internal: replace\n",0,0,0);
LDAP_LOG( BACK_LDBM, DETAIL1,
"ldbm_modify_internal: replace\n",0,0,0);
#else
Debug(LDAP_DEBUG_ARGS, "ldbm_modify_internal: replace\n", 0, 0, 0);
Debug(LDAP_DEBUG_ARGS,
"ldbm_modify_internal: replace\n", 0, 0, 0);
#endif
rc = modify_replace_values( e, mod, get_permissiveModify( op ),
text, textbuf, textlen );
text, textbuf, textlen );
if( rc != LDAP_SUCCESS ) {
#ifdef NEW_LOGGING
LDAP_LOG( BACK_LDBM, INFO,
@ -152,7 +164,8 @@ int ldbm_modify_internal(
LDAP_LOG( BACK_LDBM, DETAIL1,
"ldbm_modify_internal: softadd\n", 0, 0, 0 );
#else
Debug(LDAP_DEBUG_ARGS, "ldbm_modify_internal: softadd\n", 0, 0, 0);
Debug(LDAP_DEBUG_ARGS,
"ldbm_modify_internal: softadd\n", 0, 0, 0);
#endif
/* Avoid problems in index_add_mods()
@ -161,7 +174,7 @@ int ldbm_modify_internal(
mod->sm_op = LDAP_MOD_ADD;
rc = modify_add_values( e, mod, get_permissiveModify( op ),
text, textbuf, textlen );
text, textbuf, textlen );
mod->sm_op = SLAP_MOD_SOFTADD;
if ( rc == LDAP_TYPE_OR_VALUE_EXISTS ) {
rc = LDAP_SUCCESS;
@ -170,7 +183,7 @@ int ldbm_modify_internal(
if( rc != LDAP_SUCCESS ) {
#ifdef NEW_LOGGING
LDAP_LOG( BACK_LDBM, INFO,
"ldbm_modify_internal: failed %d (%s)\n", rc, *text, 0 );
"ldbm_modify_internal: failed %d (%s)\n", rc, *text, 0 );
#else
Debug(LDAP_DEBUG_ARGS, "ldbm_modify_internal: %d %s\n",
rc, *text, 0);
@ -255,8 +268,8 @@ int ldbm_modify_internal(
0, 0, 0 );
#else
Debug( LDAP_DEBUG_ANY,
"Attribute index delete failure",
0, 0, 0 );
"ldbm_modify_internal: Attribute index delete failure\n",
0, 0, 0 );
#endif
goto exit;
}
@ -277,8 +290,8 @@ int ldbm_modify_internal(
0, 0, 0 );
#else
Debug( LDAP_DEBUG_ANY,
"Attribute index add failure",
0, 0, 0 );
"ldbm_modify_internal: Attribute index add failure\n",
0, 0, 0 );
#endif
goto exit;
}

View file

@ -114,19 +114,19 @@ meta_back_modify( Operation *op, SlapReply *rs )
*/
if ( strcmp( ml->sml_desc->ad_type->sat_syntax->ssyn_oid,
SLAPD_DN_SYNTAX ) == 0 ) {
( void )ldap_dnattr_rewrite( &dc, ml->sml_bvalues );
( void )ldap_dnattr_rewrite( &dc, ml->sml_values );
}
if ( ml->sml_bvalues != NULL ){
for (j = 0; ml->sml_bvalues[ j ].bv_val; j++);
mods[ i ].mod_bvalues = (struct berval **)ch_malloc((j+1) *
if ( ml->sml_values != NULL ){
for (j = 0; ml->sml_values[ j ].bv_val; j++);
mods[ i ].mod_values = (struct berval **)ch_malloc((j+1) *
sizeof(struct berval *));
for (j = 0; ml->sml_bvalues[ j ].bv_val; j++)
mods[ i ].mod_bvalues[ j ] = &ml->sml_bvalues[j];
mods[ i ].mod_bvalues[ j ] = NULL;
for (j = 0; ml->sml_values[ j ].bv_val; j++)
mods[ i ].mod_values[ j ] = &ml->sml_values[j];
mods[ i ].mod_values[ j ] = NULL;
} else {
mods[ i ].mod_bvalues = NULL;
mods[ i ].mod_values = NULL;
}
i++;
@ -141,7 +141,7 @@ cleanup:;
}
if ( modv != NULL ) {
for ( i = 0; modv[ i ]; i++) {
free( modv[ i ]->mod_bvalues );
free( modv[ i ]->mod_values );
}
}
free( mods );

View file

@ -160,8 +160,7 @@ monitor_subsys_log_modify(
*/
if ( is_at_operational( mod->sm_desc->ad_type ) ) {
( void ) attr_delete( &e->e_attrs, mod->sm_desc );
rc = attr_merge( e, mod->sm_desc, mod->sm_bvalues,
mod->sm_nvalues );
rc = attr_merge( e, mod->sm_desc, mod->sm_values, mod->sm_nvalues );
if ( rc != 0 ) {
rc = LDAP_OTHER;
break;
@ -283,10 +282,10 @@ check_constraints( Modification *mod, int *newlevel )
{
int i;
for ( i = 0; mod->sm_bvalues && mod->sm_bvalues[i].bv_val != NULL; i++ ) {
for ( i = 0; mod->sm_values && mod->sm_values[i].bv_val != NULL; i++ ) {
int l;
l = loglevel2int( &mod->sm_bvalues[i] );
l = loglevel2int( &mod->sm_values[i] );
if ( !l ) {
return LDAP_CONSTRAINT_VIOLATION;
}
@ -296,9 +295,9 @@ check_constraints( Modification *mod, int *newlevel )
}
assert( int_2_level[ l ].s.bv_len
== mod->sm_bvalues[i].bv_len );
== mod->sm_values[i].bv_len );
AC_MEMCPY( mod->sm_bvalues[i].bv_val,
AC_MEMCPY( mod->sm_values[i].bv_val,
int_2_level[ l ].s.bv_val,
int_2_level[ l ].s.bv_len );
@ -332,7 +331,7 @@ add_values( Entry *e, Modification *mod, int *newlevel )
return LDAP_INAPPROPRIATE_MATCHING;
}
for ( i = 0; mod->sm_bvalues[i].bv_val != NULL; i++ ) {
for ( i = 0; mod->sm_values[i].bv_val != NULL; i++ ) {
int rc;
int j;
const char *text = NULL;
@ -340,7 +339,7 @@ add_values( Entry *e, Modification *mod, int *newlevel )
rc = asserted_value_validate_normalize(
mod->sm_desc, mr, SLAP_MR_EQUALITY,
&mod->sm_bvalues[i], &asserted, &text, NULL );
&mod->sm_values[i], &asserted, &text, NULL );
if ( rc != LDAP_SUCCESS ) {
return rc;
@ -349,8 +348,7 @@ add_values( Entry *e, Modification *mod, int *newlevel )
for ( j = 0; a->a_vals[j].bv_val != NULL; j++ ) {
int match;
int rc = value_match( &match, mod->sm_desc, mr,
0,
&a->a_vals[j], &asserted, &text );
0, &a->a_vals[j], &asserted, &text );
if ( rc == LDAP_SUCCESS && match == 0 ) {
free( asserted.bv_val );
@ -363,7 +361,7 @@ add_values( Entry *e, Modification *mod, int *newlevel )
}
/* no - add them */
rc = attr_merge( e, mod->sm_desc, mod->sm_bvalues, mod->sm_nvalues );
rc = attr_merge( e, mod->sm_desc, mod->sm_values, mod->sm_nvalues );
if ( rc != LDAP_SUCCESS ) {
/* this should return result of attr_mergeit */
return rc;
@ -387,7 +385,7 @@ delete_values( Entry *e, Modification *mod, int *newlevel )
*newlevel &= ~nl;
/* delete the entire attribute */
if ( mod->sm_bvalues == NULL ) {
if ( mod->sm_values == NULL ) {
int rc = attr_delete( &e->e_attrs, mod->sm_desc );
if ( rc ) {
@ -411,7 +409,7 @@ delete_values( Entry *e, Modification *mod, int *newlevel )
}
/* find each value to delete */
for ( i = 0; mod->sm_bvalues[i].bv_val != NULL; i++ ) {
for ( i = 0; mod->sm_values[i].bv_val != NULL; i++ ) {
int rc;
const char *text = NULL;
@ -419,7 +417,7 @@ delete_values( Entry *e, Modification *mod, int *newlevel )
rc = asserted_value_validate_normalize(
mod->sm_desc, mr, SLAP_MR_EQUALITY,
&mod->sm_bvalues[i], &asserted, &text, NULL );
&mod->sm_values[i], &asserted, &text, NULL );
if( rc != LDAP_SUCCESS ) return rc;
@ -485,9 +483,8 @@ replace_values( Entry *e, Modification *mod, int *newlevel )
return rc;
}
if ( mod->sm_bvalues != NULL ) {
rc = attr_merge( e, mod->sm_desc, mod->sm_bvalues,
mod->sm_nvalues );
if ( mod->sm_values != NULL ) {
rc = attr_merge( e, mod->sm_desc, mod->sm_values, mod->sm_nvalues );
if ( rc != LDAP_SUCCESS ) {
return rc;
}

View file

@ -72,10 +72,10 @@ perl_back_modify(
XPUSHs(sv_2mortal(newSVpv( mods->sm_desc->ad_cname.bv_val, 0 )));
for ( i = 0;
mods->sm_bvalues != NULL && mods->sm_bvalues[i].bv_val != NULL;
mods->sm_values != NULL && mods->sm_values[i].bv_val != NULL;
i++ )
{
XPUSHs(sv_2mortal(newSVpv( mods->sm_bvalues[i].bv_val, 0 )));
XPUSHs(sv_2mortal(newSVpv( mods->sm_values[i].bv_val, 0 )));
}
}

View file

@ -103,10 +103,10 @@ shell_back_modify(
break;
}
if( mod->sm_bvalues != NULL ) {
for ( i = 0; mod->sm_bvalues[i].bv_val != NULL; i++ ) {
if( mod->sm_values != NULL ) {
for ( i = 0; mod->sm_values[i].bv_val != NULL; i++ ) {
fprintf( wfp, "%s: %s\n", mod->sm_desc->ad_cname.bv_val,
mod->sm_bvalues[i].bv_val /* binary! */ );
mod->sm_values[i].bv_val /* binary! */ );
}
}

View file

@ -89,7 +89,7 @@ backsql_modify_internal(
"mappings for objectClass \"%s\"\n",
ad->ad_cname.bv_val, BACKSQL_OC_NAME( oc ), 0 );
if ( backsql_attr_skip( ad, c_mod->sm_bvalues ) ) {
if ( backsql_attr_skip( ad, c_mod->sm_values ) ) {
continue;
}
@ -304,7 +304,7 @@ add_only:;
Debug( LDAP_DEBUG_TRACE, " backsql_modify_internal(): "
"adding new values for attribute \"%s\"\n",
at->bam_ad->ad_cname.bv_val, 0, 0 );
for ( i = 0, at_val = c_mod->sm_bvalues;
for ( i = 0, at_val = c_mod->sm_values;
at_val->bv_val != NULL;
i++, at_val++ ) {
if ( BACKSQL_IS_ADD( at->bam_expect_return ) ) {
@ -377,7 +377,7 @@ add_only:;
break;
}
if ( c_mod->sm_bvalues == NULL ) {
if ( c_mod->sm_values == NULL ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_modify_internal(): "
"no values given to delete "
@ -391,7 +391,7 @@ add_only:;
"deleting values for attribute \"%s\"\n",
at->bam_ad->ad_cname.bv_val, 0, 0 );
for ( i = 0, at_val = c_mod->sm_bvalues;
for ( i = 0, at_val = c_mod->sm_values;
at_val->bv_val != NULL;
i++, at_val++ ) {
if ( BACKSQL_IS_DEL( at->bam_expect_return ) ) {

View file

@ -147,4 +147,6 @@ being returned to the client. The proxycache overlay attaches a local database
to a back-ldap (or back-meta) backend and allows search results from remote
servers to be cached locally. In both cases the overlays must provide a bit of
glue to swap in the appropriate be_private and bd_info pointers before invoking
the attached backend, which can then be invoked as usual.
the attached backend, which can then be invoked as usual.
---

View file

@ -300,19 +300,20 @@ replog1(
* in any subset, otherwise drop it.
*/
if ( ocs && ml->sml_desc == slap_schema.si_ad_objectClass
&& ml->sml_bvalues ) {
&& ml->sml_values )
{
int i, first = 1;
if ( ocs == -1 ) ocs = 0;
for ( i=0; ml->sml_bvalues[i].bv_val; i++ ) {
for ( i=0; ml->sml_values[i].bv_val; i++ ) {
int match = 0;
for ( an = ri->ri_attrs; an->an_name.bv_val; an++ ) {
if ( an->an_oc ) {
ocs = 1;
match |= an->an_oc_exclude;
if ( ml->sml_bvalues[i].bv_len == an->an_name.bv_len
&& !strcasecmp(ml->sml_bvalues[i].bv_val,
if ( ml->sml_values[i].bv_len == an->an_name.bv_len
&& !strcasecmp(ml->sml_values[i].bv_val,
an->an_name.bv_val ) ) {
match = !an->an_oc_exclude;
break;
@ -357,8 +358,8 @@ replog1(
dohdr = 0;
}
fprintf( fp, "%s: %s\n", did, type );
if ( ml->sml_bvalues ) {
print_vals( fp, &ml->sml_desc->ad_cname, ml->sml_bvalues );
if ( ml->sml_values ) {
print_vals( fp, &ml->sml_desc->ad_cname, ml->sml_values );
}
fprintf( fp, "-\n" );
}

View file

@ -810,12 +810,12 @@ int mods_structural_class(
return LDAP_OBJECT_CLASS_VIOLATION;
}
if( ocmod->sml_bvalues == NULL || ocmod->sml_bvalues[0].bv_val == NULL ) {
if( ocmod->sml_values == NULL || ocmod->sml_values[0].bv_val == NULL ) {
*text = "objectClass attribute has no values";
return LDAP_OBJECT_CLASS_VIOLATION;
}
return structural_class( ocmod->sml_bvalues, sc, NULL,
return structural_class( ocmod->sml_values, sc, NULL,
text, textbuf, textlen );
}

View file

@ -1034,7 +1034,6 @@ typedef struct slap_mod {
AttributeDescription *sm_desc;
struct berval sm_type;
BerVarray sm_values;
#define sm_bvalues sm_values
BerVarray sm_nvalues;
} Modification;
@ -1043,7 +1042,6 @@ typedef struct slap_mod_list {
#define sml_op sml_mod.sm_op
#define sml_desc sml_mod.sm_desc
#define sml_type sml_mod.sm_type
#define sml_bvalues sml_mod.sm_values
#define sml_values sml_mod.sm_values
#define sml_nvalues sml_mod.sm_nvalues
struct slap_mod_list *sml_next;
@ -1055,7 +1053,6 @@ typedef struct slap_ldap_modlist {
#define ml_op ml_mod.mod_op
#define ml_type ml_mod.mod_type
#define ml_values ml_mod.mod_values
#define ml_bvalues ml_mod.mod_values
} LDAPModList;
/*

View file

@ -392,11 +392,11 @@ slapi_int_ldapmod_to_entry(
* being passed in may not have been allocated on the
* heap.
*/
rc = bvptr2obj_copy( pMod->mod_bvalues, &bv );
rc = bvptr2obj_copy( pMod->mod_values, &bv );
if ( rc != LDAP_SUCCESS ) goto cleanup;
tmp.sml_type.bv_val = pMod->mod_type;
tmp.sml_type.bv_len = strlen( pMod->mod_type );
tmp.sml_bvalues = bv;
tmp.sml_values = bv;
tmp.sml_nvalues = NULL;
mod = (Modifications *) ch_malloc( sizeof(Modifications) );
@ -405,7 +405,7 @@ slapi_int_ldapmod_to_entry(
mod->sml_next = NULL;
mod->sml_desc = NULL;
mod->sml_type = tmp.sml_type;
mod->sml_bvalues = tmp.sml_bvalues;
mod->sml_values = tmp.sml_values;
mod->sml_nvalues = tmp.sml_nvalues;
*modtail = mod;
@ -421,7 +421,7 @@ slapi_int_ldapmod_to_entry(
if ( rc != LDAP_SUCCESS ) goto cleanup;
tmp.sml_type.bv_val = pMod->mod_type;
tmp.sml_type.bv_len = strlen( pMod->mod_type );
tmp.sml_bvalues = bv;
tmp.sml_values = bv;
tmp.sml_nvalues = NULL;
mod = (Modifications *) ch_malloc( sizeof(Modifications) );
@ -430,7 +430,7 @@ slapi_int_ldapmod_to_entry(
mod->sml_next = NULL;
mod->sml_desc = NULL;
mod->sml_type = tmp.sml_type;
mod->sml_bvalues = tmp.sml_bvalues;
mod->sml_values = tmp.sml_values;
mod->sml_nvalues = tmp.sml_nvalues;
*modtail = mod;
@ -954,12 +954,12 @@ slapi_modify_internal(
* convert an array of pointers to bervals
* to an array of bervals
*/
rs.sr_err = bvptr2obj_copy( pMod->mod_bvalues, &bv );
rs.sr_err = bvptr2obj_copy( pMod->mod_values, &bv );
if ( rs.sr_err != LDAP_SUCCESS )
goto cleanup;
tmp.sml_type.bv_val = pMod->mod_type;
tmp.sml_type.bv_len = strlen( pMod->mod_type );
tmp.sml_bvalues = bv;
tmp.sml_values = bv;
tmp.sml_nvalues = NULL;
mod = (Modifications *)ch_malloc( sizeof(Modifications) );
@ -968,7 +968,7 @@ slapi_modify_internal(
mod->sml_next = NULL;
mod->sml_desc = NULL;
mod->sml_type = tmp.sml_type;
mod->sml_bvalues = tmp.sml_bvalues;
mod->sml_values = tmp.sml_values;
mod->sml_nvalues = tmp.sml_nvalues;
} else {
rs.sr_err = values2obj_copy( pMod->mod_values, &bv );
@ -976,7 +976,7 @@ slapi_modify_internal(
goto cleanup;
tmp.sml_type.bv_val = pMod->mod_type;
tmp.sml_type.bv_len = strlen( pMod->mod_type );
tmp.sml_bvalues = bv;
tmp.sml_values = bv;
tmp.sml_nvalues = NULL;
mod = (Modifications *) ch_malloc( sizeof(Modifications) );
@ -985,7 +985,7 @@ slapi_modify_internal(
mod->sml_next = NULL;
mod->sml_desc = NULL;
mod->sml_type = tmp.sml_type;
mod->sml_bvalues = tmp.sml_bvalues;
mod->sml_values = tmp.sml_values;
mod->sml_nvalues = tmp.sml_nvalues;
}
*modtail = mod;
@ -993,7 +993,7 @@ slapi_modify_internal(
switch( pMod->mod_op & LDAP_MOD_OP ) {
case LDAP_MOD_ADD:
if ( mod->sml_bvalues == NULL ) {
if ( mod->sml_values == NULL ) {
rs.sr_err = LDAP_PROTOCOL_ERROR;
goto cleanup;
}

View file

@ -558,12 +558,12 @@ slapi_entry_add_values( Slapi_Entry *e, const char *type, struct berval **vals )
if ( vals == NULL ) {
/* Apparently vals can be NULL
* FIXME: sm_bvalues = NULL ? */
mod.sm_bvalues = (BerVarray)ch_malloc( sizeof(struct berval) );
mod.sm_bvalues->bv_val = NULL;
* FIXME: sm_values = NULL ? */
mod.sm_values = (BerVarray)ch_malloc( sizeof(struct berval) );
mod.sm_values->bv_val = NULL;
} else {
rc = bvptr2obj( vals, &mod.sm_bvalues );
rc = bvptr2obj( vals, &mod.sm_values );
if ( rc != LDAP_SUCCESS ) {
return LDAP_CONSTRAINT_VIOLATION;
}
@ -572,7 +572,7 @@ slapi_entry_add_values( Slapi_Entry *e, const char *type, struct berval **vals )
rc = modify_add_values( e, &mod, 0, &text, textbuf, sizeof(textbuf) );
ch_free( mod.sm_bvalues );
ch_free( mod.sm_values );
return (rc == LDAP_SUCCESS) ? LDAP_SUCCESS : LDAP_CONSTRAINT_VIOLATION;
#else
@ -638,7 +638,7 @@ slapi_entry_delete_values( Slapi_Entry *e, const char *type, struct berval **val
return attr_delete( &e->e_attrs, mod.sm_desc ) ? LDAP_OTHER : LDAP_SUCCESS;
}
rc = bvptr2obj( vals, &mod.sm_bvalues );
rc = bvptr2obj( vals, &mod.sm_values );
if ( rc != LDAP_SUCCESS ) {
return LDAP_CONSTRAINT_VIOLATION;
}
@ -646,7 +646,7 @@ slapi_entry_delete_values( Slapi_Entry *e, const char *type, struct berval **val
rc = modify_delete_values( e, &mod, 0, &text, textbuf, sizeof(textbuf) );
ch_free( mod.sm_bvalues );
ch_free( mod.sm_values );
return rc;
#else
@ -3336,7 +3336,7 @@ int slapi_acl_check_mods(Slapi_PBlock *pb, Slapi_Entry *e, LDAPMod **mods, char
mp = ml->sml_next;
/* just free the containing array */
slapi_ch_free( (void **)&ml->sml_bvalues );
slapi_ch_free( (void **)&ml->sml_values );
slapi_ch_free( (void **)&ml );
}
@ -3377,22 +3377,22 @@ LDAPMod **slapi_int_modifications2ldapmods(Modifications **pmodlist)
modp->mod_type = ml->sml_type.bv_val;
ml->sml_type.bv_val = NULL;
if ( ml->sml_bvalues != NULL ) {
for( j = 0; ml->sml_bvalues[j].bv_val != NULL; j++ )
if ( ml->sml_values != NULL ) {
for( j = 0; ml->sml_values[j].bv_val != NULL; j++ )
;
modp->mod_bvalues = (struct berval **)ch_malloc( (j + 1) *
modp->mod_values = (struct berval **)ch_malloc( (j + 1) *
sizeof(struct berval *) );
for( j = 0; ml->sml_bvalues[j].bv_val != NULL; j++ ) {
for( j = 0; ml->sml_values[j].bv_val != NULL; j++ ) {
/* Take ownership of original values. */
modp->mod_bvalues[j] = (struct berval *)ch_malloc( sizeof(struct berval) );
modp->mod_bvalues[j]->bv_len = ml->sml_bvalues[j].bv_len;
modp->mod_bvalues[j]->bv_val = ml->sml_bvalues[j].bv_val;
ml->sml_bvalues[j].bv_len = 0;
ml->sml_bvalues[j].bv_val = NULL;
modp->mod_values[j] = (struct berval *)ch_malloc( sizeof(struct berval) );
modp->mod_values[j]->bv_len = ml->sml_values[j].bv_len;
modp->mod_values[j]->bv_val = ml->sml_values[j].bv_val;
ml->sml_values[j].bv_len = 0;
ml->sml_values[j].bv_val = NULL;
}
modp->mod_bvalues[j] = NULL;
modp->mod_values[j] = NULL;
} else {
modp->mod_bvalues = NULL;
modp->mod_values = NULL;
}
i++;
}
@ -3438,7 +3438,7 @@ Modifications *slapi_int_ldapmods2modifications (LDAPMod **mods)
mod->sml_next = NULL;
if ( (*modp)->mod_op & LDAP_MOD_BVALUES ) {
for( i = 0, bvp = (*modp)->mod_bvalues; bvp != NULL && *bvp != NULL; bvp++, i++ )
for( i = 0, bvp = (*modp)->mod_values; bvp != NULL && *bvp != NULL; bvp++, i++ )
;
} else {
for( i = 0, p = (*modp)->mod_values; p != NULL && *p != NULL; p++, i++ )
@ -3446,24 +3446,24 @@ Modifications *slapi_int_ldapmods2modifications (LDAPMod **mods)
}
if ( i == 0 ) {
mod->sml_bvalues = NULL;
mod->sml_values = NULL;
} else {
mod->sml_bvalues = (BerVarray) ch_malloc( (i + 1) * sizeof(struct berval) );
mod->sml_values = (BerVarray) ch_malloc( (i + 1) * sizeof(struct berval) );
/* NB: This implicitly trusts a plugin to return valid modifications. */
if ( (*modp)->mod_op & LDAP_MOD_BVALUES ) {
for( i = 0, bvp = (*modp)->mod_bvalues; bvp != NULL && *bvp != NULL; bvp++, i++ ) {
mod->sml_bvalues[i].bv_val = (*bvp)->bv_val;
mod->sml_bvalues[i].bv_len = (*bvp)->bv_len;
for( i = 0, bvp = (*modp)->mod_values; bvp != NULL && *bvp != NULL; bvp++, i++ ) {
mod->sml_values[i].bv_val = (*bvp)->bv_val;
mod->sml_values[i].bv_len = (*bvp)->bv_len;
}
} else {
for( i = 0, p = (*modp)->mod_values; p != NULL && *p != NULL; p++, i++ ) {
mod->sml_bvalues[i].bv_val = *p;
mod->sml_bvalues[i].bv_len = strlen( *p );
mod->sml_values[i].bv_val = *p;
mod->sml_values[i].bv_len = strlen( *p );
}
}
mod->sml_bvalues[i].bv_val = NULL;
mod->sml_bvalues[i].bv_len = 0;
mod->sml_values[i].bv_val = NULL;
mod->sml_values[i].bv_len = 0;
}
mod->sml_nvalues = NULL;
@ -3497,10 +3497,10 @@ void slapi_int_free_ldapmods (LDAPMod **mods)
* Modification list. Do free the containing array.
*/
if ( mods[i]->mod_op & LDAP_MOD_BVALUES ) {
for ( j = 0; mods[i]->mod_bvalues != NULL && mods[i]->mod_bvalues[j] != NULL; j++ ) {
ch_free( mods[i]->mod_bvalues[j] );
for ( j = 0; mods[i]->mod_values != NULL && mods[i]->mod_values[j] != NULL; j++ ) {
ch_free( mods[i]->mod_values[j] );
}
ch_free( mods[i]->mod_bvalues );
ch_free( mods[i]->mod_values );
} else {
ch_free( mods[i]->mod_values );
}

View file

@ -977,7 +977,7 @@ syncrepl_message_to_entry(
mod->sml_next = NULL;
mod->sml_desc = NULL;
mod->sml_type = tmp.sml_type;
mod->sml_bvalues = tmp.sml_bvalues;
mod->sml_values = tmp.sml_values;
mod->sml_nvalues = NULL;
*modtail = mod;
@ -1197,7 +1197,7 @@ syncrepl_entry(
mod->sml_op = LDAP_MOD_REPLACE;
mod->sml_desc = slap_schema.si_ad_entryUUID;
mod->sml_type = mod->sml_desc->ad_cname;
ber_bvarray_add( &mod->sml_bvalues, &uuid_bv );
ber_bvarray_add( &mod->sml_values, &uuid_bv );
modtail->sml_next = mod;
op->o_tag = LDAP_REQ_MODIFY;
@ -1360,7 +1360,7 @@ syncrepl_del_nonpresent(
mod->sml_op = LDAP_MOD_REPLACE;
mod->sml_desc = slap_schema.si_ad_objectClass;
mod->sml_type = mod->sml_desc->ad_cname;
mod->sml_bvalues = &gcbva[0];
mod->sml_values = &gcbva[0];
*modtail = mod;
modtail = &mod->sml_next;
@ -1368,7 +1368,7 @@ syncrepl_del_nonpresent(
mod->sml_op = LDAP_MOD_REPLACE;
mod->sml_desc = slap_schema.si_ad_structuralObjectClass;
mod->sml_type = mod->sml_desc->ad_cname;
mod->sml_bvalues = &gcbva[1];
mod->sml_values = &gcbva[1];
*modtail = mod;
modtail = &mod->sml_next;
@ -1615,7 +1615,7 @@ syncrepl_updateCookie(
mod->sml_op = LDAP_MOD_REPLACE;
mod->sml_desc = slap_schema.si_ad_objectClass;
mod->sml_type = mod->sml_desc->ad_cname;
mod->sml_bvalues = ocbva;
mod->sml_values = ocbva;
*modtail = mod;
modtail = &mod->sml_next;
@ -1628,7 +1628,7 @@ syncrepl_updateCookie(
mod->sml_op = LDAP_MOD_REPLACE;
mod->sml_desc = slap_schema.si_ad_cn;
mod->sml_type = mod->sml_desc->ad_cname;
mod->sml_bvalues = cnbva;
mod->sml_values = cnbva;
*modtail = mod;
modtail = &mod->sml_next;
@ -1638,7 +1638,7 @@ syncrepl_updateCookie(
mod->sml_op = LDAP_MOD_REPLACE;
mod->sml_desc = slap_schema.si_ad_syncreplCookie;
mod->sml_type = mod->sml_desc->ad_cname;
mod->sml_bvalues = scbva;
mod->sml_values = scbva;
*modtail = mod;
modtail = &mod->sml_next;
@ -1646,7 +1646,7 @@ syncrepl_updateCookie(
mod->sml_op = LDAP_MOD_REPLACE;
mod->sml_desc = slap_schema.si_ad_subtreeSpecification;
mod->sml_type = mod->sml_desc->ad_cname;
mod->sml_bvalues = ssbva;
mod->sml_values = ssbva;
*modtail = mod;
modtail = &mod->sml_next;