[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: Crash on recursive rebind following referral (ITS#3359)



I believe your analysis is correct.  I have applied a
fix based upon your suggestion to HEAD.  Please test.

Thanks, Kurt

At 06:14 PM 10/5/2004, ipuleston@SonicWALL.com wrote:
>I've located the bug. On the 2nd referral there is a timeout waiting for the
>reply from the server (not sure why just yet), and when that happens
>function wait4msg() incorrectly returns result code 0 to ldap_result() which
>takes this as success and so expects there to be a reply message. wait4msg()
>should be returning -1 on a timeout, not 0.
>
>The following piece of code in wait4msg() is the culprit (it is still like
>this in 2.2.17):
>
>    rc = ldap_int_select( ld, tvp );
>
>        .....
>
>    if ( rc == 0 || ( rc == -1 && (
>            !LDAP_BOOL_GET(&ld->ld_options, LDAP_BOOL_RESTART)
>            || errno != EINTR )))
>    {
>            ld->ld_errno = (rc == -1 ? LDAP_SERVER_DOWN :
>                LDAP_TIMEOUT);
>            return( rc );
>    }
>
>That last line should be changed to:
>            return( -1 );