X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=servers%2Fslapd%2Fback-perl%2Fsearch.c;h=693fcd89fcc0717428f34a147efa2ccf4e6d6f1a;hb=3f1fd3bceebb47aaee74966ca208a14605cc5121;hp=b53809ba638722d86dc28e1653c3472b06ad1977;hpb=82453169fc7801c06e3ae9319396f90011cda195;p=openldap diff --git a/servers/slapd/back-perl/search.c b/servers/slapd/back-perl/search.c index b53809ba63..693fcd89fc 100644 --- a/servers/slapd/back-perl/search.c +++ b/servers/slapd/back-perl/search.c @@ -27,19 +27,19 @@ **********************************************************/ int perl_back_search( - Backend *be, - Connection *conn, - Operation *op, - char *base, - int scope, - int deref, - int sizelimit, - int timelimit, - Filter *filter, - char *filterstr, - char **attrs, - int attrsonly -) + Backend *be, + Connection *conn, + Operation *op, + char *base, + int scope, + int deref, + int sizelimit, + int timelimit, + Filter *filter, + char *filterstr, + char **attrs, + int attrsonly + ) { char test[500]; int count ; @@ -49,6 +49,7 @@ perl_back_search( Entry *e; char *buf; int i; + int return_code; ldap_pvt_thread_mutex_lock( &perl_interpreter_mutex ); @@ -67,36 +68,59 @@ perl_back_search( } PUTBACK; - count = perl_call_method("search", G_SCALAR); + count = perl_call_method("search", G_ARRAY ); SPAGAIN; - if (count != 1) { + if (count < 1) { croak("Big trouble in back_search\n") ; } + + if ( count > 1 ) { - printf( "Before send search entry\n"); - buf = POPp; - - if ( (e = str2entry( buf )) == NULL ) { - Debug( LDAP_DEBUG_ANY, "str2entry(%s) failed\n", buf, 0, 0 ); - - } else { - send_search_entry( be, - conn, - op, - e, - attrs, - attrsonly ); + for ( i = 1; i < count; i++ ) { + + buf = POPp; + + if ( (e = str2entry( buf )) == NULL ) { + Debug( LDAP_DEBUG_ANY, "str2entry(%s) failed\n", buf, 0, 0 ); + + } else { + send_search_entry( be, + conn, + op, + e, + attrs, + attrsonly ); - entry_free( e ); + entry_free( e ); + } + } } + /* + * We grab the return code last because the stack comes + * from perl in reverse order. + * + * ex perl: return ( 0, $res_1, $res_2 ); + * + * ex stack: <$res_2> <$res_1> <0> + */ + + return_code = POPi; + + + PUTBACK; FREETMPS; LEAVE; } ldap_pvt_thread_mutex_unlock( &perl_interpreter_mutex ); - send_ldap_result( conn, op, err, matched, info ); + if( return_code != 0 ) { + send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, "", "" ); + + } else { + send_ldap_result( conn, op, LDAP_SUCCESS, "", "" ); + } }