Blame SOURCES/0028-Add-TCP-level-timeout-to-LDAP-services.patch

0d441c
From 7aa96458f3bec4ef6ff7385107458e6b2b0b06ac Mon Sep 17 00:00:00 2001
0d441c
From: Simo Sorce <simo@redhat.com>
0d441c
Date: Tue, 10 Sep 2019 14:33:37 +0000
0d441c
Subject: [PATCH] Add TCP level timeout to LDAP services
0d441c
0d441c
In some cases the TCP connection may hang with data sent because
0d441c
of network conditions, this may cause the socket to stall for much
0d441c
longer than the timeout intended.
0d441c
Set a TCP option to forcibly timeout a socket that sees its data not
0d441c
ACKed within the ldap_network_timeout seconds.
0d441c
0d441c
Signed-off-by: Simo Sorce <simo@redhat.com>
0d441c
0d441c
Reviewed-by: Sumit Bose <sbose@redhat.com>
0d441c
---
0d441c
 src/util/sss_sockets.c | 11 +++++++++++
0d441c
 1 file changed, 11 insertions(+)
0d441c
0d441c
diff --git a/src/util/sss_sockets.c b/src/util/sss_sockets.c
0d441c
index 0e4d8df8a..b6b6dbac5 100644
0d441c
--- a/src/util/sss_sockets.c
0d441c
+++ b/src/util/sss_sockets.c
0d441c
@@ -79,6 +79,7 @@ static errno_t set_fd_common_opts(int fd, int timeout)
0d441c
     int dummy = 1;
0d441c
     int ret;
0d441c
     struct timeval tv;
0d441c
+    unsigned int milli;
0d441c
 
0d441c
     /* SO_KEEPALIVE and TCP_NODELAY are set by OpenLDAP client libraries but
0d441c
      * failures are ignored.*/
0d441c
@@ -117,6 +118,16 @@ static errno_t set_fd_common_opts(int fd, int timeout)
0d441c
                   "setsockopt SO_SNDTIMEO failed.[%d][%s].\n", ret,
0d441c
                   strerror(ret));
0d441c
         }
0d441c
+
0d441c
+        milli = timeout * 1000; /* timeout in milliseconds */
0d441c
+        ret = setsockopt(fd, IPPROTO_TCP, TCP_USER_TIMEOUT, milli,
0d441c
+                         sizeof(milli));
0d441c
+        if (ret != 0) {
0d441c
+            ret = errno;
0d441c
+            DEBUG(SSSDBG_FUNC_DATA,
0d441c
+                  "setsockopt TCP_USER_TIMEOUT failed.[%d][%s].\n", ret,
0d441c
+                  strerror(ret));
0d441c
+        }
0d441c
     }
0d441c
 
0d441c
     return EOK;
0d441c
-- 
0d441c
2.21.1
0d441c