From: Quanah Gibson-Mount Date: Tue, 28 Apr 2009 00:50:09 +0000 (+0000) Subject: ITS#5540 pieces X-Git-Tag: OPENLDAP_REL_ENG_2_4_17~144 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=8b721480ce3b58b44feebf34e46d5dbb0b919e5d;p=openldap ITS#5540 pieces --- diff --git a/CHANGES b/CHANGES index 2e81641261..ecd4a05da3 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,7 @@ OpenLDAP 2.4 Change Log OpenLDAP 2.4.17 Engineering + Fixed slapd normalization of updated schema attributes (ITS#5540) OpenLDAP 2.4.16 Release (2009/04/05) Fixed libldap GnuTLS with x509v1 CA certs (ITS#5992) diff --git a/servers/slapd/back-monitor/conn.c b/servers/slapd/back-monitor/conn.c index 064aeb28e6..d962a9fe4c 100644 --- a/servers/slapd/back-monitor/conn.c +++ b/servers/slapd/back-monitor/conn.c @@ -94,7 +94,7 @@ monitor_subsys_conn_init( } else { BER_BVSTR( &bv, "0" ); } - attr_merge_one( e, mi->mi_ad_monitorCounter, &bv, &bv ); + attr_merge_one( e, mi->mi_ad_monitorCounter, &bv, NULL ); mp = monitor_entrypriv_create(); if ( mp == NULL ) { @@ -133,7 +133,7 @@ monitor_subsys_conn_init( } BER_BVSTR( &bv, "-1" ); - attr_merge_one( e, mi->mi_ad_monitorCounter, &bv, &bv ); + attr_merge_one( e, mi->mi_ad_monitorCounter, &bv, NULL ); mp = monitor_entrypriv_create(); if ( mp == NULL ) { @@ -172,7 +172,7 @@ monitor_subsys_conn_init( } BER_BVSTR( &bv, "0" ); - attr_merge_one( e, mi->mi_ad_monitorCounter, &bv, &bv ); + attr_merge_one( e, mi->mi_ad_monitorCounter, &bv, NULL ); mp = monitor_entrypriv_create(); if ( mp == NULL ) { @@ -398,7 +398,7 @@ conn_create( attr_merge_one( e, mi->mi_ad_monitorConnectionNumber, &bv, NULL ); bv.bv_len = snprintf( buf, sizeof( buf ), "%ld", (long) c->c_protocol ); - attr_merge_one( e, mi->mi_ad_monitorConnectionProtocol, &bv, NULL ); + attr_merge_normalize_one( e, mi->mi_ad_monitorConnectionProtocol, &bv, NULL ); bv.bv_len = snprintf( buf, sizeof( buf ), "%ld", c->c_n_ops_received ); attr_merge_one( e, mi->mi_ad_monitorConnectionOpsReceived, &bv, NULL ); @@ -428,31 +428,31 @@ conn_create( LDAP_STAILQ_EMPTY( &c->c_pending_ops ) ? "" : "p", connection_state2str( c->c_conn_state ), c->c_sasl_bind_in_progress ? "S" : "" ); - attr_merge_one( e, mi->mi_ad_monitorConnectionMask, &bv, NULL ); + attr_merge_normalize_one( e, mi->mi_ad_monitorConnectionMask, &bv, NULL ); attr_merge_one( e, mi->mi_ad_monitorConnectionAuthzDN, &c->c_dn, &c->c_ndn ); /* NOTE: client connections leave the c_peer_* fields NULL */ assert( !BER_BVISNULL( &c->c_listener_url ) ); - attr_merge_one( e, mi->mi_ad_monitorConnectionListener, + attr_merge_normalize_one( e, mi->mi_ad_monitorConnectionListener, &c->c_listener_url, NULL ); - attr_merge_one( e, mi->mi_ad_monitorConnectionPeerDomain, + attr_merge_normalize_one( e, mi->mi_ad_monitorConnectionPeerDomain, BER_BVISNULL( &c->c_peer_domain ) ? &bv_unknown : &c->c_peer_domain, NULL ); - attr_merge_one( e, mi->mi_ad_monitorConnectionPeerAddress, + attr_merge_normalize_one( e, mi->mi_ad_monitorConnectionPeerAddress, BER_BVISNULL( &c->c_peer_name ) ? &bv_unknown : &c->c_peer_name, NULL ); assert( !BER_BVISNULL( &c->c_sock_name ) ); - attr_merge_one( e, mi->mi_ad_monitorConnectionLocalAddress, + attr_merge_normalize_one( e, mi->mi_ad_monitorConnectionLocalAddress, &c->c_sock_name, NULL ); - attr_merge_one( e, mi->mi_ad_monitorConnectionStartTime, &bv2, NULL ); + attr_merge_normalize_one( e, mi->mi_ad_monitorConnectionStartTime, &bv2, NULL ); - attr_merge_one( e, mi->mi_ad_monitorConnectionActivityTime, &bv3, NULL ); + attr_merge_normalize_one( e, mi->mi_ad_monitorConnectionActivityTime, &bv3, NULL ); mp = monitor_entrypriv_create(); if ( mp == NULL ) { diff --git a/servers/slapd/back-monitor/database.c b/servers/slapd/back-monitor/database.c index 3b43f16c29..eb75a340f0 100644 --- a/servers/slapd/back-monitor/database.c +++ b/servers/slapd/back-monitor/database.c @@ -66,7 +66,7 @@ init_readOnly( monitor_info_t *mi, Entry *e, slap_mask_t restrictops ) struct berval *tf = ( ( restrictops & SLAP_RESTRICT_OP_MASK ) == SLAP_RESTRICT_OP_WRITES ) ? (struct berval *)&slap_true_bv : (struct berval *)&slap_false_bv; - return attr_merge_one( e, mi->mi_ad_readOnly, tf, tf ); + return attr_merge_one( e, mi->mi_ad_readOnly, tf, NULL ); } static int @@ -162,9 +162,9 @@ monitor_subsys_database_init_one( rdnval, 0, 0 ); } else { attr_merge( e, slap_schema.si_ad_namingContexts, - be->be_suffix, be->be_nsuffix ); + be->be_suffix, NULL ); attr_merge( e_database, slap_schema.si_ad_namingContexts, - be->be_suffix, be->be_nsuffix ); + be->be_suffix, NULL ); } } @@ -301,7 +301,7 @@ monitor_subsys_database_init_one( } else { attr_merge( e_overlay, slap_schema.si_ad_namingContexts, - be->be_suffix, be->be_nsuffix ); + be->be_suffix, NULL ); } mp_overlay = monitor_entrypriv_create(); @@ -405,9 +405,15 @@ monitor_back_register_database( if ( a ) { int j, k; - for ( j = 0; !BER_BVISNULL( &a->a_nvals[ j ] ); j++ ) { - for ( k = 0; !BER_BVISNULL( &be->be_nsuffix[ k ] ); k++ ) { - if ( dn_match( &a->a_nvals[ j ], &be->be_nsuffix[ k ] ) ) { + /* FIXME: RFC 4512 defines namingContexts without an + * equality matching rule, making comparisons + * like this one tricky. We use a_vals and + * be_suffix instead for now. + */ + for ( j = 0; !BER_BVISNULL( &a->a_vals[ j ] ); j++ ) { + for ( k = 0; !BER_BVISNULL( &be->be_suffix[ k ] ); k++ ) { + if ( dn_match( &a->a_vals[ j ], + &be->be_suffix[ k ] ) ) { rc = 0; goto done; } diff --git a/servers/slapd/back-monitor/operation.c b/servers/slapd/back-monitor/operation.c index 5605183d7d..6f07777a4b 100644 --- a/servers/slapd/back-monitor/operation.c +++ b/servers/slapd/back-monitor/operation.c @@ -86,8 +86,8 @@ monitor_subsys_ops_init( return( -1 ); } - attr_merge_one( e_op, mi->mi_ad_monitorOpInitiated, &bv_zero, &bv_zero ); - attr_merge_one( e_op, mi->mi_ad_monitorOpCompleted, &bv_zero, &bv_zero ); + attr_merge_one( e_op, mi->mi_ad_monitorOpInitiated, &bv_zero, NULL ); + attr_merge_one( e_op, mi->mi_ad_monitorOpCompleted, &bv_zero, NULL ); mp = ( monitor_entry_t * )e_op->e_private; mp->mp_children = NULL; diff --git a/servers/slapd/back-monitor/rww.c b/servers/slapd/back-monitor/rww.c index 9cdb4058fe..114d534002 100644 --- a/servers/slapd/back-monitor/rww.c +++ b/servers/slapd/back-monitor/rww.c @@ -104,7 +104,7 @@ monitor_subsys_rww_init( ber_dupbv( &monitor_rww[ i ].nrdn, &nrdn ); BER_BVSTR( &bv, "0" ); - attr_merge_normalize_one( e, mi->mi_ad_monitorCounter, &bv, NULL ); + attr_merge_one( e, mi->mi_ad_monitorCounter, &bv, NULL ); mp = monitor_entrypriv_create(); if ( mp == NULL ) { diff --git a/servers/slapd/back-monitor/sent.c b/servers/slapd/back-monitor/sent.c index 856920d958..50b526ce2e 100644 --- a/servers/slapd/back-monitor/sent.c +++ b/servers/slapd/back-monitor/sent.c @@ -110,7 +110,7 @@ monitor_subsys_sent_init( ber_dupbv( &monitor_sent[ i ].nrdn, &nrdn ); BER_BVSTR( &bv, "0" ); - attr_merge_normalize_one( e, mi->mi_ad_monitorCounter, &bv, NULL ); + attr_merge_one( e, mi->mi_ad_monitorCounter, &bv, NULL ); mp = monitor_entrypriv_create(); if ( mp == NULL ) { diff --git a/servers/slapd/root_dse.c b/servers/slapd/root_dse.c index 4871006693..8b7322122e 100644 --- a/servers/slapd/root_dse.c +++ b/servers/slapd/root_dse.c @@ -277,8 +277,7 @@ fail: } for ( j = 0; be->be_suffix[j].bv_val != NULL; j++ ) { if( attr_merge_one( e, ad_namingContexts, - &be->be_suffix[j], - &be->be_nsuffix[0] ) ) + &be->be_suffix[j], NULL ) ) { goto fail; } diff --git a/servers/slapd/schema_prep.c b/servers/slapd/schema_prep.c index ebfdd5586c..040120759d 100644 --- a/servers/slapd/schema_prep.c +++ b/servers/slapd/schema_prep.c @@ -684,6 +684,7 @@ static struct slap_schema_ad_map { "NAME 'monitorContext' " "DESC 'monitor context' " "SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 " + "EQUALITY distinguishedNameMatch " "SINGLE-VALUE NO-USER-MODIFICATION " "USAGE dSAOperation )", rootDseAttribute, SLAP_AT_HIDE, @@ -694,6 +695,7 @@ static struct slap_schema_ad_map { "NAME 'configContext' " "DESC 'config context' " "SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 " + "EQUALITY distinguishedNameMatch " "SINGLE-VALUE NO-USER-MODIFICATION " "USAGE dSAOperation )", rootDseAttribute, SLAP_AT_HIDE, diff --git a/tests/data/monitor1.out b/tests/data/monitor1.out new file mode 100644 index 0000000000..8b394dfe92 --- /dev/null +++ b/tests/data/monitor1.out @@ -0,0 +1,31 @@ +dn: cn=Connection 1,cn=Connections,cn=Monitor +structuralObjectClass: monitorConnection +monitorConnectionProtocol: 3 +monitorConnectionOpsReceived: 2 +monitorConnectionOpsExecuting: 1 +monitorConnectionOpsPending: 0 +monitorConnectionOpsCompleted: 1 +monitorConnectionGet: 2 +monitorConnectionRead: 2 +monitorConnectionWrite: 0 +monitorConnectionMask: rx +monitorConnectionListener: ldap://localhost:9011/ +monitorConnectionLocalAddress: IP=127.0.0.1:9011 +entryDN: cn=Connection 1,cn=Connections,cn=Monitor + +dn: cn=Connections,cn=Monitor +structuralObjectClass: monitorContainer +entryDN: cn=Connections,cn=Monitor + +dn: cn=Current,cn=Connections,cn=Monitor +structuralObjectClass: monitorCounterObject +entryDN: cn=Current,cn=Connections,cn=Monitor + +dn: cn=Max File Descriptors,cn=Connections,cn=Monitor +structuralObjectClass: monitorCounterObject +entryDN: cn=Max File Descriptors,cn=Connections,cn=Monitor + +dn: cn=Total,cn=Connections,cn=Monitor +structuralObjectClass: monitorCounterObject +entryDN: cn=Total,cn=Connections,cn=Monitor + diff --git a/tests/data/monitor2.out b/tests/data/monitor2.out new file mode 100644 index 0000000000..26e9ce9ecb --- /dev/null +++ b/tests/data/monitor2.out @@ -0,0 +1,40 @@ +dn: cn=Database 0,cn=Databases,cn=Monitor +structuralObjectClass: monitoredObject +monitorIsShadow: FALSE +namingContexts: cn=config +readOnly: FALSE +entryDN: cn=Database 0,cn=Databases,cn=Monitor + +dn: cn=Database 1,cn=Databases,cn=Monitor +structuralObjectClass: monitoredObject +monitorIsShadow: FALSE +namingContexts: o=OpenLDAP Project,l=Internet +readOnly: FALSE +olmBDBEntryCache: 0 +olmBDBDNCache: 0 +olmBDBIDLCache: 0 +entryDN: cn=Database 1,cn=Databases,cn=Monitor + +dn: cn=Database 2,cn=Databases,cn=Monitor +structuralObjectClass: monitoredObject +monitorIsShadow: FALSE +monitorContext: cn=Monitor +readOnly: FALSE +entryDN: cn=Database 2,cn=Databases,cn=Monitor + +dn: cn=Databases,cn=Monitor +structuralObjectClass: monitorContainer +readOnly: FALSE +namingContexts: +namingContexts: cn=config +namingContexts: o=OpenLDAP Project,l=Internet +monitorContext: cn=Monitor +entryDN: cn=Databases,cn=Monitor + +dn: cn=Frontend,cn=Databases,cn=Monitor +structuralObjectClass: monitoredObject +monitorIsShadow: FALSE +namingContexts: +readOnly: FALSE +entryDN: cn=Frontend,cn=Databases,cn=Monitor + diff --git a/tests/data/monitor3.out b/tests/data/monitor3.out new file mode 100644 index 0000000000..b40e98b434 --- /dev/null +++ b/tests/data/monitor3.out @@ -0,0 +1,15 @@ +dn: cn=Entries,cn=Statistics,cn=Monitor +structuralObjectClass: monitorCounterObject +monitorCounter: 12 +entryDN: cn=Entries,cn=Statistics,cn=Monitor + +dn: cn=PDU,cn=Statistics,cn=Monitor +structuralObjectClass: monitorCounterObject +monitorCounter: 18 +entryDN: cn=PDU,cn=Statistics,cn=Monitor + +dn: cn=Referrals,cn=Statistics,cn=Monitor +structuralObjectClass: monitorCounterObject +monitorCounter: 0 +entryDN: cn=Referrals,cn=Statistics,cn=Monitor + diff --git a/tests/data/monitor4.out b/tests/data/monitor4.out new file mode 100644 index 0000000000..f6e82d349e --- /dev/null +++ b/tests/data/monitor4.out @@ -0,0 +1,66 @@ +dn: cn=Abandon,cn=Operations,cn=Monitor +structuralObjectClass: monitorOperation +monitorOpInitiated: 0 +monitorOpCompleted: 0 +entryDN: cn=Abandon,cn=Operations,cn=Monitor + +dn: cn=Add,cn=Operations,cn=Monitor +structuralObjectClass: monitorOperation +monitorOpInitiated: 0 +monitorOpCompleted: 0 +entryDN: cn=Add,cn=Operations,cn=Monitor + +dn: cn=Bind,cn=Operations,cn=Monitor +structuralObjectClass: monitorOperation +monitorOpInitiated: 5 +monitorOpCompleted: 5 +entryDN: cn=Bind,cn=Operations,cn=Monitor + +dn: cn=Compare,cn=Operations,cn=Monitor +structuralObjectClass: monitorOperation +monitorOpInitiated: 0 +monitorOpCompleted: 0 +entryDN: cn=Compare,cn=Operations,cn=Monitor + +dn: cn=Delete,cn=Operations,cn=Monitor +structuralObjectClass: monitorOperation +monitorOpInitiated: 0 +monitorOpCompleted: 0 +entryDN: cn=Delete,cn=Operations,cn=Monitor + +dn: cn=Extended,cn=Operations,cn=Monitor +structuralObjectClass: monitorOperation +monitorOpInitiated: 0 +monitorOpCompleted: 0 +entryDN: cn=Extended,cn=Operations,cn=Monitor + +dn: cn=Modify,cn=Operations,cn=Monitor +structuralObjectClass: monitorOperation +monitorOpInitiated: 0 +monitorOpCompleted: 0 +entryDN: cn=Modify,cn=Operations,cn=Monitor + +dn: cn=Modrdn,cn=Operations,cn=Monitor +structuralObjectClass: monitorOperation +monitorOpInitiated: 0 +monitorOpCompleted: 0 +entryDN: cn=Modrdn,cn=Operations,cn=Monitor + +dn: cn=Operations,cn=Monitor +structuralObjectClass: monitorContainer +monitorOpInitiated: 14 +monitorOpCompleted: 13 +entryDN: cn=Operations,cn=Monitor + +dn: cn=Search,cn=Operations,cn=Monitor +structuralObjectClass: monitorOperation +monitorOpInitiated: 5 +monitorOpCompleted: 4 +entryDN: cn=Search,cn=Operations,cn=Monitor + +dn: cn=Unbind,cn=Operations,cn=Monitor +structuralObjectClass: monitorOperation +monitorOpInitiated: 4 +monitorOpCompleted: 4 +entryDN: cn=Unbind,cn=Operations,cn=Monitor + diff --git a/tests/scripts/defines.sh b/tests/scripts/defines.sh index a42a52cdde..b4d20fcdf4 100755 --- a/tests/scripts/defines.sh +++ b/tests/scripts/defines.sh @@ -269,6 +269,11 @@ METABASEDN="ou=Meta,$BASEDN" METAMANAGERDN="cn=Manager,$METABASEDN" VALSORTDN="cn=Manager,o=valsort" VALSORTBASEDN="o=valsort" +MONITORDN="cn=Monitor" +OPERATIONSMONITORDN="cn=Operations,$MONITORDN" +CONNECTIONSMONITORDN="cn=Connections,$MONITORDN" +DATABASESMONITORDN="cn=Databases,$MONITORDN" +STATISTICSMONITORDN="cn=Statistics,$MONITORDN" # generated outputs SEARCHOUT=$TESTDIR/ldapsearch.out @@ -281,6 +286,10 @@ INITOUT=$TESTDIR/init.out VALSORTOUT1=$DATADIR/valsort1.out VALSORTOUT2=$DATADIR/valsort2.out VALSORTOUT3=$DATADIR/valsort3.out +MONITOROUT1=$DATADIR/monitor1.out +MONITOROUT2=$DATADIR/monitor2.out +MONITOROUT3=$DATADIR/monitor3.out +MONITOROUT4=$DATADIR/monitor4.out SERVER1OUT=$TESTDIR/server1.out SERVER1FLT=$TESTDIR/server1.flt diff --git a/tests/scripts/test056-monitor b/tests/scripts/test056-monitor new file mode 100755 index 0000000000..2998c7c5ca --- /dev/null +++ b/tests/scripts/test056-monitor @@ -0,0 +1,170 @@ +#! /bin/sh +# $OpenLDAP$ +## This work is part of OpenLDAP Software . +## +## Copyright 1998-2008 The OpenLDAP Foundation. +## All rights reserved. +## +## Redistribution and use in source and binary forms, with or without +## modification, are permitted only as authorized by the OpenLDAP +## Public License. +## +## A copy of this license is available in the file LICENSE in the +## top-level directory of the distribution or, alternatively, at +## . + +echo "running defines.sh" +. $SRCDIR/scripts/defines.sh + +mkdir -p $TESTDIR $DBDIR1 + +echo "Starting slapd on TCP/IP port $PORT..." +. $CONFFILTER $BACKEND $MONITORDB < $SCHEMACONF > $CONF1 +$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 & +PID=$! +if test $WAIT != 0 ; then + echo PID $PID + read foo +fi +KILLPIDS="$PID" + +sleep 1 + +echo "Using ldapsearch to check that slapd is running..." +for i in 0 1 2 3 4 5; do + $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \ + 'objectclass=*' > /dev/null 2>&1 + RC=$? + if test $RC = 0 ; then + break + fi + echo "Waiting 5 seconds for slapd to start..." + sleep 5 +done + +echo "Using ldapsearch to read connection monitor entries..." +$LDAPSEARCH -S "" -b "$CONNECTIONSMONITORDN" -h $LOCALHOST -p $PORT1 \ + 'objectclass=*' \ + structuralObjectClass entryDN \ + monitorConnectionProtocol monitorConnectionOpsReceived \ + monitorConnectionOpsExecuting monitorConnectionOpsPending \ + monitorConnectionOpsCompleted monitorConnectionGet \ + monitorConnectionRead monitorConnectionWrite \ + monitorConnectionMask monitorConnectionAuthzDN \ + monitorConnectionListener monitorConnectionLocalAddress \ + > $SEARCHOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Filtering ldapsearch results..." +. $LDIFFILTER < $SEARCHOUT > $SEARCHFLT + +echo "Comparing filter output..." +$CMP $SEARCHFLT $MONITOROUT1 > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - connection monitor output is not correct" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Using ldapsearch to read database monitor entries..." +$LDAPSEARCH -S "" -b "$DATABASESMONITORDN" -h $LOCALHOST -p $PORT1 \ + 'objectclass=*' \ + structuralObjectClass entryDN namingContexts readOnly \ + monitorIsShadow monitorContext \ + olmBDBEntryCache olmBDBDNCache olmBDBIDLCache \ + > $SEARCHOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Filtering ldapsearch results..." +. $LDIFFILTER < $SEARCHOUT > $SEARCHFLT + +TMPMONITOROUT2=$MONITOROUT2 +case $BACKEND in +bdb|hdb) + ;; +*) + TMPMONITOROUT2=$TESTDIR/monitor2.out + grep -v "olmBDB" $MONITOROUT2 > $TMPMONITOROUT2 + ;; +esac + +echo "Comparing filter output..." +$CMP $SEARCHFLT $TMPMONITOROUT2 > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - database monitor output is not correct" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Using ldapsearch to read statistics monitor entries..." +$LDAPSEARCH -S "" -b "$STATISTICSMONITORDN" -h $LOCALHOST -p $PORT1 \ + '(|(cn=Entries)(cn=PDU)(cn=Referrals))' \ + structuralObjectClass monitorCounter entryDN \ + > $SEARCHOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Filtering ldapsearch results..." +. $LDIFFILTER < $SEARCHOUT > $SEARCHFLT + +echo "Comparing filter output..." +$CMP $SEARCHFLT $MONITOROUT3 > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - statistics monitor output is not correct" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +echo "Using ldapsearch to read operation monitor entries..." +$LDAPSEARCH -S "" -b "$OPERATIONSMONITORDN" -h $LOCALHOST -p $PORT1 \ + 'objectclass=*' \ + structuralObjectClass monitorOpInitiated monitorOpCompleted entryDN \ + > $SEARCHOUT 2>&1 +RC=$? + +if test $RC != 0 ; then + echo "ldapsearch failed ($RC)!" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit $RC +fi + +echo "Filtering ldapsearch results..." +. $LDIFFILTER < $SEARCHOUT > $SEARCHFLT + +echo "Comparing filter output..." +$CMP $SEARCHFLT $MONITOROUT4 > $CMPOUT + +if test $? != 0 ; then + echo "comparison failed - operations monitor output is not correct" + test $KILLSERVERS != no && kill -HUP $KILLPIDS + exit 1 +fi + +test $KILLSERVERS != no && kill -HUP $KILLPIDS + +echo ">>>>> Test succeeded" + +test $KILLSERVERS != no && wait + +exit 0 +