Ori.livneh has submitted this change and it was merged.

Change subject: ssh-agent-proxy: break out of select loop once client is done
......................................................................


ssh-agent-proxy: break out of select loop once client is done

By moving the `if code is None: return` code into a subroutine that is called
from the select loop, we no longer break out of the loop when the client
disconnects, leading to file descriptor exhaustion.

Bug: T110794
Change-Id: I499c82490f77887d33c038e49c9b174bfcd0e57c
---
M modules/keyholder/files/ssh-agent-proxy
1 file changed, 7 insertions(+), 13 deletions(-)

Approvals:
  Ori.livneh: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/modules/keyholder/files/ssh-agent-proxy 
b/modules/keyholder/files/ssh-agent-proxy
index 757a012..134a8eb 100644
--- a/modules/keyholder/files/ssh-agent-proxy
+++ b/modules/keyholder/files/ssh-agent-proxy
@@ -149,18 +149,8 @@
         header = s_message_header.pack(len(message) + 1, code)
         sock.sendall(header + message)
 
-    def handle_backend(self):
-        """Read data from the backend SSH agent and send to client."""
-        code, message = self.recv_message(self.backend)
-        self.send_message(self.request, code, message)
-
-    def handle_client_request(self):
+    def handle_client_request(self, code, message):
         """Read data from client and send to backend SSH agent."""
-        code, message = self.recv_message(self.request)
-
-        if not code:
-            return
-
         if code in (SSH2_AGENTC_REQUEST_IDENTITIES,
                     SSH_AGENTC_REQUEST_RSA_IDENTITIES):
             if message:
@@ -182,9 +172,13 @@
         while 1:
             rlist, *_ = select.select((self.backend, self.request), (), (), 1)
             if self.backend in rlist:
-                self.handle_backend()
+                code, message = self.recv_message(self.backend)
+                self.send_message(self.request, code, message)
             if self.request in rlist:
-                self.handle_client_request()
+                code, message = self.recv_message(self.request)
+                if not code:
+                    return
+                self.handle_client_request(code, message)
 
     def parse_sign_request(self, message):
         """Parse the payload of an SSH2_AGENTC_SIGN_REQUEST into its

-- 
To view, visit https://gerrit.wikimedia.org/r/234955
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I499c82490f77887d33c038e49c9b174bfcd0e57c
Gerrit-PatchSet: 1
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Ori.livneh <[email protected]>
Gerrit-Reviewer: Ori.livneh <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to