X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-monitor%2Flog.c;h=6a390891d463c49949a3e2c02537464bc85c34cf;hb=63e843d2003ddf20f3725ad439991e769ffc792a;hp=8ab11949e983ede6f3d2c68d8b7fffed83b1d9cc;hpb=42b7753803d69ca862140bfb1fda4d8c73fe3c7e;p=openldap diff --git a/servers/slapd/back-monitor/log.c b/servers/slapd/back-monitor/log.c index 8ab11949e9..6a390891d4 100644 --- a/servers/slapd/back-monitor/log.c +++ b/servers/slapd/back-monitor/log.c @@ -31,6 +31,17 @@ #include "ldif.h" #include "back-monitor.h" +static int +monitor_subsys_log_destroy( + BackendDB *be, + monitor_subsys_t *ms ); + +static int +monitor_subsys_log_modify( + Operation *op, + SlapReply *rs, + Entry *e ); + /* * log mutex */ @@ -71,17 +82,14 @@ static int replace_values( Entry *e, Modification *mod, int *newlevel ); int monitor_subsys_log_init( BackendDB *be, - monitor_subsys_t *ms -) + monitor_subsys_t *ms ) { monitor_info_t *mi; Entry *e; int i; - struct berval desc[] = { - BER_BVC("This entry allows to set the log level runtime."), - BER_BVC("Set the attribute 'managedInfo' to the desired log levels."), - BER_BVNULL - }; + + ms->mss_destroy = monitor_subsys_log_destroy; + ms->mss_modify = monitor_subsys_log_modify; ldap_pvt_thread_mutex_init( &monitor_log_mutex ); @@ -119,18 +127,32 @@ monitor_subsys_log_init( } } - attr_merge( e, mi->mi_ad_description, desc, NULL ); - monitor_cache_release( mi, e ); return( 0 ); } -int +static int +monitor_subsys_log_destroy( + BackendDB *be, + monitor_subsys_t *ms ) +{ + int i; + + for ( i = 0; int_2_level[ i ].i != 0; i++ ) { + if ( !BER_BVISNULL( &int_2_level[ i ].n ) ) { + ch_free( int_2_level[ i ].n.bv_val ); + } + } + + return 0; +} + +static int monitor_subsys_log_modify( Operation *op, - Entry *e -) + SlapReply *rs, + Entry *e ) { monitor_info_t *mi = ( monitor_info_t * )op->o_bd->be_private; int rc = LDAP_OTHER; @@ -154,18 +176,17 @@ 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_values, mod->sm_nvalues ); - if ( rc != 0 ) { - rc = LDAP_OTHER; + rc = rs->sr_err = attr_merge( e, mod->sm_desc, mod->sm_values, mod->sm_nvalues ); + if ( rc != LDAP_SUCCESS ) { break; } continue; /* - * only the monitor description attribute can be modified + * only the "managedInfo" attribute can be modified */ - } else if ( mod->sm_desc != mi->mi_ad_managedInfo) { - rc = LDAP_UNWILLING_TO_PERFORM; + } else if ( mod->sm_desc != mi->mi_ad_managedInfo ) { + rc = rs->sr_err = LDAP_UNWILLING_TO_PERFORM; break; } @@ -188,6 +209,7 @@ monitor_subsys_log_modify( } if ( rc != LDAP_SUCCESS ) { + rs->sr_err = rc; break; } } @@ -199,15 +221,16 @@ monitor_subsys_log_modify( /* check for abandon */ if ( op->o_abandon ) { - rc = SLAPD_ABANDON; + rc = rs->sr_err = SLAPD_ABANDON; goto cleanup; } /* check that the entry still obeys the schema */ - rc = entry_schema_check( be_monitor, e, save_attrs, - &text, textbuf, sizeof( textbuf ) ); + rc = entry_schema_check( op, e, save_attrs, 0, + &text, textbuf, sizeof( textbuf ) ); if ( rc != LDAP_SUCCESS ) { + rs->sr_err = rc; goto cleanup; } @@ -236,7 +259,11 @@ cleanup:; ldap_pvt_thread_mutex_unlock( &monitor_log_mutex ); - return( rc ); + if ( rc == LDAP_SUCCESS ) { + rc = SLAP_CB_CONTINUE; + } + + return rc; } static int @@ -320,7 +347,7 @@ add_values( Entry *e, Modification *mod, int *newlevel ) a = attr_find( e->e_attrs, mod->sm_desc ); if ( a != NULL ) { - /* "description" SHOULD have appropriate rules ... */ + /* "managedInfo" SHOULD have appropriate rules ... */ if ( mr == NULL || !mr->smr_match ) { return LDAP_INAPPROPRIATE_MATCHING; }