From adcb6802e4f6369b48a74c408fd53c4325576071 Mon Sep 17 00:00:00 2001 From: Pavel Březina Date: Thu, 4 Oct 2012 11:42:59 +0200 Subject: do not fail if POLLHUP occurs while reading data This cause troubles when we send data to a pipe and close the file descriptor before data is read. The pipe is still readable, but POLLHUP is detected and we fail to read them. For example, this may cause a user beeing unable to log in. Now if POLLHUP appears, we read the pipe and then close it on the client side too. --- src/sss_client/common.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/sss_client/common.c b/src/sss_client/common.c index 5b1751593..1ef3ba15e 100644 --- a/src/sss_client/common.c +++ b/src/sss_client/common.c @@ -195,6 +195,7 @@ static enum sss_status sss_cli_recv_rep(enum sss_cli_command cmd, uint32_t header[4]; size_t datarecv; uint8_t *buf = NULL; + bool pollhup = false; int len; int ret; @@ -235,7 +236,10 @@ static enum sss_status sss_cli_recv_rep(enum sss_cli_command cmd, *errnop = ETIME; break; case 1: - if (pfd.revents & (POLLERR | POLLHUP | POLLNVAL)) { + if (pfd.revents & (POLLHUP)) { + pollhup = true; + } + if (pfd.revents & (POLLERR | POLLNVAL)) { *errnop = EPIPE; } if (!(pfd.revents & POLLIN)) { @@ -322,6 +326,10 @@ static enum sss_status sss_cli_recv_rep(enum sss_cli_command cmd, } } + if (pollhup) { + sss_cli_close_socket(); + } + *_len = len; *_buf = buf; -- cgit