/* $OpenLDAP$ */
/*
- * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
/*
* }
*/
- if ( ber_scanf( op->o_ber, "{o" /*}*/, &dn ) == LBER_ERROR ) {
+ if ( ber_scanf( op->o_ber, "{m" /*}*/, &dn ) == LBER_ERROR ) {
#ifdef NEW_LOGGING
LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
"do_modify: ber_scanf failed\n" ));
Modifications tmp, *mod;
- if ( ber_scanf( op->o_ber, "{i{o[W]}}", &mop,
+ if ( ber_scanf( op->o_ber, "{i{m[W]}}", &mop,
&tmp.sml_type, &tmp.sml_bvalues )
== LBER_ERROR )
{
goto cleanup;
}
- mod = (Modifications *) ch_malloc( sizeof(Modifications)
- + tmp.sml_type.bv_len + 1);
- mod->sml_type.bv_val = (char *)(mod+1);
- strcpy(mod->sml_type.bv_val, tmp.sml_type.bv_val);
- mod->sml_type.bv_len = tmp.sml_type.bv_len;
+ mod = (Modifications *) ch_malloc( sizeof(Modifications) );
+ mod->sml_type = tmp.sml_type;
mod->sml_bvalues = tmp.sml_bvalues;
mod->sml_desc = NULL;
*modtail = mod;
* if we don't hold it.
*/
if ( (be = select_backend( &ndn, manageDSAit, 0 )) == NULL ) {
- BVarray ref = referral_rewrite( default_referral,
+ BerVarray ref = referral_rewrite( default_referral,
NULL, &pdn, LDAP_SCOPE_DEFAULT );
send_ldap_result( conn, op, rc = LDAP_REFERRAL,
NULL, NULL, ref ? ref : default_referral, NULL );
- bvarray_free( ref );
+ ber_bvarray_free( ref );
goto cleanup;
}
goto cleanup;
}
- if ( (be->be_lastmod == ON || (be->be_lastmod == UNDEFINED &&
- global_lastmod == ON)) && !repl_user )
- {
+ if ( SLAP_LASTMOD(be) && !repl_user ) {
for( modtail = &modlist;
*modtail != NULL;
modtail = &(*modtail)->sml_next )
#ifndef SLAPD_MULTIMASTER
/* send a referral */
} else {
- BVarray defref = be->be_update_refs
+ BerVarray defref = be->be_update_refs
? be->be_update_refs : default_referral;
- BVarray ref = referral_rewrite( defref,
+ BerVarray ref = referral_rewrite( defref,
NULL, &pdn, LDAP_SCOPE_DEFAULT );
send_ldap_result( conn, op, rc = LDAP_REFERRAL, NULL, NULL,
ref ? ref : defref, NULL );
- bvarray_free( ref );
+ ber_bvarray_free( ref );
#endif
}
} else {
}
cleanup:
- free( dn.bv_val );
free( pdn.bv_val );
free( ndn.bv_val );
if ( modlist != NULL )
return LDAP_UNDEFINED_TYPE;
}
+ if( slap_ad_is_lang_range( ad )) {
+ /* attribute requires binary transfer */
+ snprintf( textbuf, textlen,
+ "%s: inappropriate use of language range option",
+ ml->sml_type.bv_val );
+ *text = textbuf;
+ return LDAP_UNDEFINED_TYPE;
+ }
+
if (!update && is_at_no_user_mod( ad->ad_type )) {
/* user modification disallowed */
snprintf( textbuf, textlen,
if ( tmpval.bv_len ) {
mod = (Modifications *) ch_malloc( sizeof( Modifications ) );
mod->sml_op = mop;
+ mod->sml_type.bv_val = NULL;
mod->sml_desc = slap_schema.si_ad_structuralObjectClass;
- mod->sml_bvalues = (BVarray) ch_malloc( 2 * sizeof( struct berval ) );
+ mod->sml_bvalues = (BerVarray) ch_malloc( 2 * sizeof( struct berval ) );
ber_dupbv( &mod->sml_bvalues[0], &tmpval );
mod->sml_bvalues[1].bv_val = NULL;
assert( mod->sml_bvalues[0].bv_val );
mod = (Modifications *) ch_malloc( sizeof( Modifications ) );
mod->sml_op = mop;
+ mod->sml_type.bv_val = NULL;
mod->sml_desc = slap_schema.si_ad_entryUUID;
- mod->sml_bvalues = (BVarray) ch_malloc( 2 * sizeof( struct berval ) );
+ mod->sml_bvalues = (BerVarray) ch_malloc( 2 * sizeof( struct berval ) );
ber_dupbv( &mod->sml_bvalues[0], &tmpval );
mod->sml_bvalues[1].bv_val = NULL;
assert( mod->sml_bvalues[0].bv_val );
mod = (Modifications *) ch_malloc( sizeof( Modifications ) );
mod->sml_op = mop;
+ mod->sml_type.bv_val = NULL;
mod->sml_desc = slap_schema.si_ad_creatorsName;
- mod->sml_bvalues = (BVarray) ch_malloc( 2 * sizeof( struct berval ) );
+ mod->sml_bvalues = (BerVarray) ch_malloc( 2 * sizeof( struct berval ) );
ber_dupbv( &mod->sml_bvalues[0], &name );
mod->sml_bvalues[1].bv_val = NULL;
assert( mod->sml_bvalues[0].bv_val );
mod = (Modifications *) ch_malloc( sizeof( Modifications ) );
mod->sml_op = mop;
+ mod->sml_type.bv_val = NULL;
mod->sml_desc = slap_schema.si_ad_createTimestamp;
- mod->sml_bvalues = (BVarray) ch_malloc( 2 * sizeof( struct berval ) );
+ mod->sml_bvalues = (BerVarray) ch_malloc( 2 * sizeof( struct berval ) );
ber_dupbv( &mod->sml_bvalues[0], ×tamp );
mod->sml_bvalues[1].bv_val = NULL;
assert( mod->sml_bvalues[0].bv_val );
mod = (Modifications *) ch_malloc( sizeof( Modifications ) );
mod->sml_op = mop;
+ mod->sml_type.bv_val = NULL;
mod->sml_desc = slap_schema.si_ad_entryCSN;
- mod->sml_bvalues = (BVarray) ch_malloc( 2 * sizeof( struct berval ) );
+ mod->sml_bvalues = (BerVarray) ch_malloc( 2 * sizeof( struct berval ) );
ber_dupbv( &mod->sml_bvalues[0], &csn );
mod->sml_bvalues[1].bv_val = NULL;
assert( mod->sml_bvalues[0].bv_val );
mod = (Modifications *) ch_malloc( sizeof( Modifications ) );
mod->sml_op = mop;
+ mod->sml_type.bv_val = NULL;
mod->sml_desc = slap_schema.si_ad_modifiersName;
- mod->sml_bvalues = (BVarray) ch_malloc( 2 * sizeof( struct berval ) );
+ mod->sml_bvalues = (BerVarray) ch_malloc( 2 * sizeof( struct berval ) );
ber_dupbv( &mod->sml_bvalues[0], &name );
mod->sml_bvalues[1].bv_val = NULL;
assert( mod->sml_bvalues[0].bv_val );
mod = (Modifications *) ch_malloc( sizeof( Modifications ) );
mod->sml_op = mop;
+ mod->sml_type.bv_val = NULL;
mod->sml_desc = slap_schema.si_ad_modifyTimestamp;
- mod->sml_bvalues = (BVarray) ch_malloc( 2 * sizeof( struct berval ) );
+ mod->sml_bvalues = (BerVarray) ch_malloc( 2 * sizeof( struct berval ) );
ber_dupbv( &mod->sml_bvalues[0], ×tamp );
mod->sml_bvalues[1].bv_val = NULL;
assert( mod->sml_bvalues[0].bv_val );