X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fmodify.c;h=7cb5b6f4524a8fe67c17a84a04e4a6a89a0ece1f;hb=1fbbc1181152a32c1b9b82342ad6d63034ec7fbb;hp=0f0c716375f167e6de35b1ba47d6d786746912de;hpb=f5e6d1db410c11b26dfe5ef2e5563f51e136c830;p=openldap diff --git a/servers/slapd/modify.c b/servers/slapd/modify.c index 0f0c716375..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 @@ -265,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 ); @@ -303,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; @@ -380,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 ); @@ -437,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;