Skip to content

Commit d4d8114

Browse files
committed
Fixed binding to loopback and parsing of incoming client socket for validation
1 parent 81a5c81 commit d4d8114

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
<red5-io.version>${project.parent.version}</red5-io.version>
6363
<red5-service.version>${project.parent.version}</red5-service.version>
6464
<red5-server-common.version>${project.parent.version}</red5-server-common.version>
65-
<tomcatplugin.version>2.2.8</tomcatplugin.version>
65+
<tomcatplugin.version>2.2.9</tomcatplugin.version>
6666
<cors-filter.version>2.6</cors-filter.version>
6767
</properties>
6868
<repositories>

src/main/java/org/red5/server/service/ShutdownServer.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ public void destroy() throws Exception {
131131
* Starts internal server listening for shutdown requests.
132132
*/
133133
public void start() {
134+
log.info("Shutdown server start");
134135
// dump to stdout
135136
System.out.printf("Token: %s%n", token);
136137
// write out the token to a file so that red5 may be shutdown external to this VM instance.
@@ -147,11 +148,20 @@ public void start() {
147148
log.warn("Exception handling token file", e);
148149
}
149150
final InetAddress loopbackAddr = InetAddress.getLoopbackAddress();
151+
// handle format of localhost/127.0.0.1
152+
final String localAddr = loopbackAddr.getHostAddress();
153+
int pos = localAddr.indexOf('/');
154+
final String localIPAddr = pos >= 0 ? localAddr.substring(pos) : localAddr;
155+
log.info("Starting socket server on {}:{}", localIPAddr, port);
150156
while (!shutdown.get()) {
151157
// server socket on loopback address (127.0.0.1) with given port and a backlog of 8
152158
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()));) {
153159
log.info("Connected - local: {} remote: {}", clientSocket.getLocalSocketAddress(), clientSocket.getRemoteSocketAddress());
154-
if (clientSocket.getRemoteSocketAddress().toString().startsWith(loopbackAddr.toString())) {
160+
String remoteAddr = clientSocket.getRemoteSocketAddress().toString();
161+
// handle SocketAddress format of /127.0.0.1:9999
162+
String remoteIPAddr = remoteAddr.substring(1, remoteAddr.indexOf(':'));
163+
log.info("IP addresses - local: {} remote: {}", localIPAddr, remoteIPAddr);
164+
if (localIPAddr.equals(remoteIPAddr)) {
155165
String inputLine = in.readLine();
156166
if (inputLine != null && token.equals(inputLine)) {
157167
log.info("Shutdown request validated using token");

0 commit comments

Comments
 (0)