X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-monitor%2Fentry.c;h=96e2f0fe76d3e508c59c34432a8925d7898ceb1f;hb=4caf7faa74c184f92c99a15d40c51af48a6e75ce;hp=6901e4455e6102bd79b9f0167206f619a8c2b5a4;hpb=acbb5cf689a4336af05c9f259d909d8141055bac;p=openldap diff --git a/servers/slapd/back-monitor/entry.c b/servers/slapd/back-monitor/entry.c index 6901e4455e..96e2f0fe76 100644 --- a/servers/slapd/back-monitor/entry.c +++ b/servers/slapd/back-monitor/entry.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 2001-2006 The OpenLDAP Foundation. + * Copyright 2001-2007 The OpenLDAP Foundation. * Portions Copyright 2001-2003 Pierangelo Masarati. * All rights reserved. * @@ -42,11 +42,7 @@ monitor_entry_update( mp = ( monitor_entry_t * )e->e_private; - if ( mp->mp_info && mp->mp_info->mss_update ) { - rc = mp->mp_info->mss_update( op, rs, e ); - } - - if ( rc == SLAP_CB_CONTINUE && mp->mp_cb ) { + if ( mp->mp_cb ) { struct monitor_callback_t *mc; for ( mc = mp->mp_cb; mc; mc = mc->mc_next ) { @@ -59,6 +55,10 @@ monitor_entry_update( } } + if ( rc == SLAP_CB_CONTINUE && mp->mp_info && mp->mp_info->mss_update ) { + rc = mp->mp_info->mss_update( op, rs, e ); + } + if ( rc == SLAP_CB_CONTINUE ) { rc = LDAP_SUCCESS; } @@ -115,11 +115,7 @@ monitor_entry_modify( mp = ( monitor_entry_t * )e->e_private; - if ( mp->mp_info && mp->mp_info->mss_modify ) { - rc = mp->mp_info->mss_modify( op, rs, e ); - } - - if ( rc == SLAP_CB_CONTINUE && mp->mp_cb ) { + if ( mp->mp_cb ) { struct monitor_callback_t *mc; for ( mc = mp->mp_cb; mc; mc = mc->mc_next ) { @@ -132,6 +128,10 @@ monitor_entry_modify( } } + if ( rc == SLAP_CB_CONTINUE && mp->mp_info && mp->mp_info->mss_modify ) { + rc = mp->mp_info->mss_modify( op, rs, e ); + } + if ( rc == SLAP_CB_CONTINUE ) { rc = LDAP_SUCCESS; } @@ -163,5 +163,59 @@ monitor_entrypriv_create( void ) mp->mp_flags = MONITOR_F_NONE; mp->mp_cb = NULL; + ldap_pvt_thread_mutex_init( &mp->mp_mutex ); + return mp; } + +Entry * +monitor_entry_stub( + struct berval *pdn, + struct berval *pndn, + struct berval *rdn, + ObjectClass *oc, + monitor_info_t *mi, + struct berval *create, + struct berval *modify +) +{ + AttributeDescription *nad = NULL; + Entry *e; + struct berval nat; + char *ptr; + const char *text; + int rc; + + nat = *rdn; + ptr = strchr( nat.bv_val, '=' ); + nat.bv_len = ptr - nat.bv_val; + rc = slap_bv2ad( &nat, &nad, &text ); + if ( rc ) + return NULL; + + e = entry_alloc(); + if ( e ) { + struct berval nrdn; + + rdnNormalize( 0, NULL, NULL, rdn, &nrdn, NULL ); + build_new_dn( &e->e_name, pdn, rdn, NULL ); + build_new_dn( &e->e_nname, pndn, &nrdn, NULL ); + ber_memfree( nrdn.bv_val ); + nat.bv_val = ptr + 1; + nat.bv_len = rdn->bv_len - ( nat.bv_val - rdn->bv_val ); + attr_merge_normalize_one( e, slap_schema.si_ad_objectClass, + &oc->soc_cname, NULL ); + attr_merge_normalize_one( e, slap_schema.si_ad_structuralObjectClass, + &oc->soc_cname, NULL ); + attr_merge_normalize_one( e, nad, &nat, NULL ); + attr_merge_one( e, slap_schema.si_ad_creatorsName, &mi->mi_creatorsName, + &mi->mi_ncreatorsName ); + attr_merge_one( e, slap_schema.si_ad_modifiersName, &mi->mi_creatorsName, + &mi->mi_ncreatorsName ); + attr_merge_normalize_one( e, slap_schema.si_ad_createTimestamp, + create ? create : &mi->mi_startTime, NULL ); + attr_merge_normalize_one( e, slap_schema.si_ad_modifyTimestamp, + modify ? modify : &mi->mi_startTime, NULL ); + } + return e; +}