summaryrefslogtreecommitdiffstats
path: root/ldap/servers
diff options
context:
space:
mode:
authorRich Megginson <rmeggins@redhat.com>2010-08-19 16:27:28 -0600
committerRich Megginson <rmeggins@redhat.com>2010-08-31 13:35:54 -0600
commit84819d728de922c2fe6869ad22271e4fe94fc8a1 (patch)
tree774898cdc4c11bd499d6318b63824e7289f05cf3 /ldap/servers
parentc5640a92c4f19b4db1159a5d4335e614eee1e3eb (diff)
downloadds-84819d728de922c2fe6869ad22271e4fe94fc8a1.tar.gz
ds-84819d728de922c2fe6869ad22271e4fe94fc8a1.tar.xz
ds-84819d728de922c2fe6869ad22271e4fe94fc8a1.zip
openldap_read_function needs to set EWOULDBLOCK if the buffer is empty
If the openldap_read_function has returned all of the buffered data, it needs to set errno to EWOULDBLOCK to let the code know that it needs to read more data into the buffer.
Diffstat (limited to 'ldap/servers')
-rw-r--r--ldap/servers/slapd/connection.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/ldap/servers/slapd/connection.c b/ldap/servers/slapd/connection.c
index 4de41f26..587f422d 100644
--- a/ldap/servers/slapd/connection.c
+++ b/ldap/servers/slapd/connection.c
@@ -1569,6 +1569,14 @@ openldap_read_function(Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len)
if (bytes_to_copy <= 0) {
bytes_to_copy = 0; /* never return a negative result */
+ /* in this case, we don't have enough data to satisfy the
+ caller, so we have to let it know we need more */
+#if defined(EWOULDBLOCK)
+ errno = EWOULDBLOCK;
+#elif defined(EAGAIN)
+ errno = EAGAIN;
+#endif
+ PR_SetError(PR_WOULD_BLOCK_ERROR, 0);
} else {
/* copy buffered data into output buf */
SAFEMEMCPY(buf, readbuf + offset, bytes_to_copy);