|
14 | 14 | import java.io.PrintWriter; |
15 | 15 | import java.io.RandomAccessFile; |
16 | 16 | import java.net.BindException; |
| 17 | +import java.net.InetAddress; |
17 | 18 | import java.net.ServerSocket; |
18 | 19 | import java.net.Socket; |
19 | 20 | import java.nio.file.Files; |
@@ -145,16 +146,22 @@ public void start() { |
145 | 146 | } catch (Exception e) { |
146 | 147 | log.warn("Exception handling token file", e); |
147 | 148 | } |
| 149 | + final InetAddress loopbackAddr = InetAddress.getLoopbackAddress(); |
148 | 150 | while (!shutdown.get()) { |
149 | | - try (ServerSocket serverSocket = new ServerSocket(port); Socket clientSocket = serverSocket.accept(); PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));) { |
| 151 | + // server socket on loopback address (127.0.0.1) with given port and a backlog of 8 |
| 152 | + try (ServerSocket serverSocket = new ServerSocket(port, 8, loopbackAddr); Socket clientSocket = serverSocket.accept(); PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));) { |
150 | 153 | log.info("Connected - local: {} remote: {}", clientSocket.getLocalSocketAddress(), clientSocket.getRemoteSocketAddress()); |
151 | | - String inputLine = in.readLine(); |
152 | | - if (inputLine != null && token.equals(inputLine)) { |
153 | | - log.info("Shutdown request validated using token"); |
154 | | - out.println("Ok"); |
155 | | - shutdownOrderly(); |
| 154 | + if (clientSocket.getRemoteSocketAddress().toString().startsWith(loopbackAddr.toString())) { |
| 155 | + String inputLine = in.readLine(); |
| 156 | + if (inputLine != null && token.equals(inputLine)) { |
| 157 | + log.info("Shutdown request validated using token"); |
| 158 | + out.println("Ok"); |
| 159 | + shutdownOrderly(); |
| 160 | + } else { |
| 161 | + out.println("Invalid input"); |
| 162 | + } |
156 | 163 | } else { |
157 | | - out.println("Bye"); |
| 164 | + out.println("Invalid requester"); |
158 | 165 | } |
159 | 166 | } catch (BindException be) { |
160 | 167 | log.error("Cannot bind to port: {}, ensure no other instances are bound or choose another port", port, be); |
|
0 commit comments