r7745: better handling of recv errors in tls library
authorAndrew Tridgell <tridge@samba.org>
Sun, 19 Jun 2005 07:19:42 +0000 (07:19 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:18:30 +0000 (13:18 -0500)
(This used to be commit 42d8a1a222430bd64962da7cc4ac0193b5c003f7)

source4/lib/tls/tls.c

index 3b166b27a09031e1b92d392b20db162ba4623bc4..8f443c67d780c6fd6afac69368ed0ecd4e65fb2d 100644 (file)
@@ -69,9 +69,19 @@ static ssize_t tls_pull(gnutls_transport_ptr ptr, void *buf, size_t size)
        }
 
        status = socket_recv(tls->socket, buf, size, &nread, 0);
+       if (NT_STATUS_EQUAL(status, NT_STATUS_END_OF_FILE)) {
+               return 0;
+       }
+       if (NT_STATUS_IS_ERR(status)) {
+               EVENT_FD_NOT_READABLE(tls->fde);
+               EVENT_FD_NOT_WRITEABLE(tls->fde);
+               errno = EBADF;
+               return -1;
+       }
        if (!NT_STATUS_IS_OK(status)) {
                EVENT_FD_READABLE(tls->fde);
                EVENT_FD_NOT_WRITEABLE(tls->fde);
+               errno = EAGAIN;
                return -1;
        }
        if (tls->output_pending) {
@@ -185,7 +195,6 @@ NTSTATUS tls_socket_recv(struct tls_context *tls, void *buf, size_t wantlen,
                return STATUS_MORE_ENTRIES;
        }
        if (ret < 0) {
-               DEBUG(0,("gnutls_record_recv failed - %s\n", gnutls_strerror(ret)));
                return NT_STATUS_UNEXPECTED_NETWORK_ERROR;
        }
        *nread = ret;