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

Problem with big data chunks and SASL (ITS#1983)



Full_Name: Aleksandr Konstantinov
Version: 2.0.14 - 2.1.3
OS: Linux
URL: 
Submission from: (NULL) (129.240.86.18)


If connection to the server uses SASL the response goes through
sb_sasl_write
ber_pvt_sb_do_write
sb_stream_write
and is sent by using write() function.
If data is big enough for not to fit in in TCP/IP package write()
return value less than requested.
In ber_pvt_sb_do_write (line 316 of sockbuf.c in OpenLDAP 2.1.3)
this is transfered to error condition and connection dies.
If code is changed to pass the value of sent bytes to sb_sasl_write
this doe not work also, because sb_sasl_write tries to resend
it only once. And if data is big enogh to not to fit in 2 packets,
it fails again.
Probaly simplest solution is to make sb_stream_write always write
all data or fail (that worked for me).
More nicer would be to fix resending rest of data at higher level.
Unfortunately, I do not have enough experience with OpenLDAP internals
to propose solution for this case.