X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fmodify.c;h=7cb5b6f4524a8fe67c17a84a04e4a6a89a0ece1f;hb=1fbbc1181152a32c1b9b82342ad6d63034ec7fbb;hp=f9d618174774f47d797d3acd4b44ffe481d38e37;hpb=07ebdca237e239aeca47ff53b8f68d5f24ae4a7a;p=openldap diff --git a/servers/slapd/modify.c b/servers/slapd/modify.c index f9d6181747..7cb5b6f452 100644 --- a/servers/slapd/modify.c +++ b/servers/slapd/modify.c @@ -1,6 +1,6 @@ /* $OpenLDAP$ */ /* - * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ /* @@ -16,6 +16,7 @@ */ #include "portable.h" +#include "slapi_common.h" #include @@ -27,6 +28,7 @@ #include "ldap_pvt.h" #include "slap.h" +#include "slapi.h" int do_modify( @@ -49,6 +51,8 @@ do_modify( const char *text; int manageDSAit; + Slapi_PBlock *pb = op->o_pb; + #ifdef NEW_LOGGING LDAP_LOG( OPERATION, ENTRY, "do_modify: enter\n", 0, 0, 0 ); #else @@ -204,7 +208,6 @@ do_modify( NULL, "modify upon the root DSE not supported", NULL, NULL ); goto cleanup; -#if defined( SLAPD_SCHEMA_DN ) } else if ( bvmatch( &ndn, &global_schemandn ) ) { #ifdef NEW_LOGGING LDAP_LOG( OPERATION, ERR, @@ -217,7 +220,6 @@ do_modify( NULL, "modification of subschema subentry not supported", NULL, NULL ); goto cleanup; -#endif } #ifdef LDAP_DEBUG @@ -267,8 +269,32 @@ do_modify( } #endif - Statslog( LDAP_DEBUG_STATS, "conn=%lu op=%lu MOD dn=\"%s\"\n", - op->o_connid, op->o_opid, dn.bv_val, 0, 0 ); + if ( StatslogTest( LDAP_DEBUG_STATS ) ) { + char abuf[BUFSIZ/2], *ptr = abuf; + int len = 0; + + Statslog( LDAP_DEBUG_STATS, "conn=%lu op=%lu MOD dn=\"%s\"\n", + op->o_connid, op->o_opid, dn.bv_val, 0, 0 ); + + for ( tmp = modlist; tmp != NULL; tmp = tmp->sml_next ) { + if (len + 1 + tmp->sml_type.bv_len > sizeof(abuf)) { + Statslog( LDAP_DEBUG_STATS, "conn=%lu op=%lu MOD attr=%s\n", + op->o_connid, op->o_opid, abuf, 0, 0 ); + len = 0; + ptr = abuf; + } + if (len) { + *ptr++ = ' '; + len++; + } + ptr = lutil_strcopy(ptr, tmp->sml_type.bv_val); + len += tmp->sml_type.bv_len; + } + if (len) { + Statslog( LDAP_DEBUG_STATS, "conn=%lu op=%lu MOD attr=%s\n", + op->o_connid, op->o_opid, abuf, 0, 0 ); + } + } manageDSAit = get_manageDSAit( op ); @@ -305,6 +331,32 @@ do_modify( /* deref suffix alias if appropriate */ suffix_alias( be, &ndn ); +#if defined( LDAP_SLAPI ) + slapi_pblock_set( pb, SLAPI_BACKEND, (void *)be ); + slapi_pblock_set( pb, SLAPI_CONNECTION, (void *)conn ); + slapi_pblock_set( pb, SLAPI_OPERATION, (void *)op ); + slapi_pblock_set( pb, SLAPI_BIND_TARGET, (void *)dn.bv_val ); + slapi_pblock_set( pb, SLAPI_REQCONTROLS, (void *)op->o_ctrls ); + slapi_pblock_set( pb, SLAPI_MANAGEDSAIT, (void *)(1) ); + + rc = doPluginFNs( be, SLAPI_PLUGIN_PRE_MODIFY_FN, pb ); + if ( rc != 0 && rc != LDAP_OTHER ) { + /* + * either there is no preOp (modify) plugins + * or a plugin failed. Just log it + * + * FIXME: is this correct? + */ +#ifdef NEW_LOGGING + LDAP_LOG( OPERATION, INFO, "do_modify: modify preOps " + "failed\n", 0, 0, 0 ); +#else + Debug(LDAP_DEBUG_TRACE, "do_modify: modify preOps failed.\n", + 0, 0, 0); +#endif + } +#endif /* defined( LDAP_SLAPI ) */ + /* * do the modify if 1 && (2 || 3) * 1) there is a modify function implemented in this backend; @@ -382,6 +434,25 @@ do_modify( NULL, NULL ); } +#if defined( LDAP_SLAPI ) + rc = doPluginFNs( be, SLAPI_PLUGIN_POST_MODIFY_FN, pb ); + if ( rc != 0 && rc != LDAP_OTHER ) { + /* + * either there is no postOp (modify) plugins + * or a plugin failed. Just log it + * + * FIXME: is this correct? + */ +#ifdef NEW_LOGGING + LDAP_LOG( OPERATION, INFO, "do_modify: modify postOps " + "failed\n", 0, 0, 0 ); +#else + Debug(LDAP_DEBUG_TRACE, "do_modify: modify postOps " + "failed.\n", 0, 0, 0); +#endif + } +#endif /* defined( LDAP_SLAPI ) */ + cleanup: free( pdn.bv_val ); free( ndn.bv_val ); @@ -439,10 +510,10 @@ int slap_mods_check( return LDAP_UNDEFINED_TYPE; } - if( slap_ad_is_lang_range( ad )) { + if( slap_ad_is_tag_range( ad )) { /* attribute requires binary transfer */ snprintf( textbuf, textlen, - "%s: inappropriate use of language range option", + "%s: inappropriate use of tag range option", ml->sml_type.bv_val ); *text = textbuf; return LDAP_UNDEFINED_TYPE; @@ -547,8 +618,8 @@ int slap_mods_opattrs( char *textbuf, size_t textlen ) { struct berval name, timestamp, csn; - char timebuf[22]; - char csnbuf[64]; + char timebuf[ LDAP_LUTIL_GENTIME_BUFSIZE ]; + char csnbuf[ LDAP_LUTIL_CSNSTR_BUFSIZE ]; Modifications *mod; int mop = op->o_tag == LDAP_REQ_ADD @@ -589,22 +660,21 @@ int slap_mods_opattrs( if( rc != LDAP_SUCCESS ) { return rc; } - 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 = (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 ); - *modtail = mod; - modtail = &mod->sml_next; - } + + 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 = (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 ); + *modtail = mod; + modtail = &mod->sml_next; } if( SLAP_LASTMOD(be) ) { - char uuidbuf[40]; + char uuidbuf[ LDAP_LUTIL_UUIDSTR_BUFSIZE ]; tmpval.bv_len = lutil_uuidstr( uuidbuf, sizeof( uuidbuf ) ); tmpval.bv_val = uuidbuf;