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

Re: (ITS#4606) Big LDAP Search responses causes IO error in libldap on Windows XP



Hm, on my Visual Studio6 errno.h does a
    #define errno *_errno()
and of course _errno() is an imported function. This problem "shouldn't 
happen."

In your patch, directly including <errno.h> should not be needed, since 
<ac/errno.h> will include it already. If <ac/errno.h> isn't bringing in 
<errno.h> for you then it appears you have a configure problem.

alexey.melnikov@isode.com wrote:
> Full_Name: Alexey Melnikov
> Version: 2.2.27
> OS: Windows XP Professional
> URL: ftp://ftp.openldap.org/incoming/
> Submission from: (NULL) (62.3.217.250)
>
>
> Problem symptoms: LDAP Search that returns about 20Kb of data is failing in the
> middle of decoding with IO error.
>
> Problem description: liblber code is using recv() to read data from socket on
> Windows. If there is some data in the TCP buffer already, the function would
> complete immediately (without blocking), returning number of bytes
> in the buffer. This can lead to a situation when the caller requests,
> say 100 bytes, but only gets 32. If the caller needs more data
> it would call the recv function again to get more data.
> liblber ber_get_next() was setting errno to EAGAIN or EWOULDBLOCK
> (depending on which one is defined on the platform) to signal to
> the caller that it needs to call ber_get_next again to get more data.
> For some bizarre reason when errno is set in liblber, it is not
> set when execution returns to libldap. I suspect both DLLs have
> private copies of the same errno value.
> The end result of errno not being set is that libldap thinks that
> there was some socket error and fails the current operation.
>
> The fix is to use WSASetLastError/WSAGetLastError on Windows.
> They operate on per thread value and work correctly accross DLL
> boundaries.
>
> libldap/liblber were built using /MD flag (to link with "Multithreaded DLL" C
> library), using Visual Studio 8 (2005).
>
> I've compares changes to libldap/liblber code between 2.2.27 and trunk of 2.3.X
> branch and I think the problem is still there.
>
>
>   


-- 
  -- Howard Chu
  Chief Architect, Symas Corp.  http://www.symas.com
  Director, Highland Sun        http://highlandsun.com/hyc
  OpenLDAP Core Team            http://www.openldap.org/project/