From: Howard Chu Date: Sat, 2 Feb 2002 10:37:25 +0000 (+0000) Subject: Finished compare implementation X-Git-Tag: OPENLDAP_REL_ENG_2_1_BP~94 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=6f8cc0d72c7652453514723ce89ec3735584e9da;p=openldap Finished compare implementation --- diff --git a/servers/slapd/back-perl/SampleLDAP.pm b/servers/slapd/back-perl/SampleLDAP.pm index e8925fbc14..24fd78edc2 100644 --- a/servers/slapd/back-perl/SampleLDAP.pm +++ b/servers/slapd/back-perl/SampleLDAP.pm @@ -67,6 +67,7 @@ Its arguments are as follows. * obj reference * dn + * attribute assertion string RETURN: @@ -186,9 +187,16 @@ sub search sub compare { my $this = shift; - my ( $dn ) = @_; + my ( $dn, $avaStr ) = @_; + my $rc = 0; + + $avaStr =~ s/=/: /; + + if ( $this->{ $dn } =~ /$avaStr/im ) { + $rc = 1; + } - return 1; + return $rc; } sub modify diff --git a/servers/slapd/back-perl/compare.c b/servers/slapd/back-perl/compare.c index b490b197da..e4b1ac7443 100644 --- a/servers/slapd/back-perl/compare.c +++ b/servers/slapd/back-perl/compare.c @@ -38,13 +38,17 @@ perl_back_compare( { int return_code; int count; + char *avastr, *ptr; PerlBackend *perl_back = (PerlBackend *)be->be_private; - send_ldap_result( conn, op, LDAP_UNWILLING_TO_PERFORM, - NULL, "not supported", NULL, NULL ); + avastr = ch_malloc( ava->aa_desc->ad_cname.bv_len + 1 + + ava->aa_value.bv_len + 1 ); + + slap_strcopy( slap_strcopy( slap_strcopy( avastr, + ava->aa_desc->ad_cname.bv_val ), "=" ), + ava->aa_value.bv_val ); -#ifdef notdef ldap_pvt_thread_mutex_lock( &perl_interpreter_mutex ); { @@ -52,8 +56,8 @@ perl_back_compare( PUSHMARK(sp); XPUSHs( perl_back->pb_obj_ref ); - XPUSHs(sv_2mortal(newSVpv( dn , 0))); - /* XPUSHs(sv_2mortal(newSVpv( cred->bv_val , cred->bv_len))); */ + XPUSHs(sv_2mortal(newSVpv( dn->bv_val , 0))); + XPUSHs(sv_2mortal(newSVpv( avastr , 0))); PUTBACK; count = perl_call_method("compare", G_SCALAR); @@ -71,13 +75,10 @@ perl_back_compare( ldap_pvt_thread_mutex_unlock( &perl_interpreter_mutex ); - if( return_code != 0 ) { - send_ldap_result( conn, op, LDAP_COMPARE_TRUE, NULL, NULL ); + ch_free( avastr ); - } else { - send_ldap_result( conn, op, LDAP_COMPARE_FALSE, NULL, NULL ); - } -#endif + send_ldap_result( conn, op, return_code ? LDAP_COMPARE_TRUE : + LDAP_COMPARE_FALSE, NULL, NULL, NULL, NULL ); Debug( LDAP_DEBUG_ANY, "Perl COMPARE\n", 0, 0, 0 );