]> git.sur5r.net Git - openldap/commitdiff
Finished compare implementation
authorHoward Chu <hyc@openldap.org>
Sat, 2 Feb 2002 10:37:25 +0000 (10:37 +0000)
committerHoward Chu <hyc@openldap.org>
Sat, 2 Feb 2002 10:37:25 +0000 (10:37 +0000)
servers/slapd/back-perl/SampleLDAP.pm
servers/slapd/back-perl/compare.c

index e8925fbc149ca8bce33d325c1c8f5e5a8208dae1..24fd78edc209abc58b8eb6d6fcb2da1c030a7789 100644 (file)
@@ -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
index b490b197da805edec05260606278807ac7b1c6d2..e4b1ac7443aacc0bdd038094bc02535d2f7ca7f4 100644 (file)
@@ -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 );