Skip to content

Commit

Permalink
UNDERTOW-652 MCMPHandler#handleRequest() does not work with IPv6 addr…
Browse files Browse the repository at this point in the history
…esses
  • Loading branch information
rhusar committed Mar 3, 2016
1 parent 6f51b7a commit ce6434d
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -96,10 +96,10 @@ static void advertise(final ModClusterContainer container, final MCMPConfig.Adve
this.container = container;
this.protocol = config.getProtocol();
// MODCLUSTER-483 mod_cluster client does not yet support ipv6 addresses with zone indices so skip it
String host = config.getManagementHost();
String host = config.getManagementSocketAddress().getHostString();
int zoneIndex = host.indexOf("%");
this.host = (zoneIndex < 0) ? host : host.substring(0, zoneIndex);
this.port = config.getManagementPort();
this.port = config.getManagementSocketAddress().getPort();
this.path = config.getPath();
this.channel = channel;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,14 @@

package io.undertow.server.handlers.proxy.mod_cluster;

import java.net.InetAddress;
import java.net.UnknownHostException;

import io.undertow.server.HttpHandler;

import java.net.InetSocketAddress;

/**
* @author Emanuel Muckenhuber
* @author Radoslav Husar
* @version March 2016
*/
public class MCMPConfig {

Expand All @@ -36,41 +37,23 @@ public static WebBuilder webBuilder() {
return new WebBuilder();
}

private final String managementHost;
private final String managementHostIp;
private final int managementPort;
private final InetSocketAddress managementSocketAddress;
private final AdvertiseConfig advertiseConfig;

public MCMPConfig(Builder builder) {
this.managementHost = builder.managementHost;
this.managementPort = builder.managementPort;
if (builder.advertiseBuilder != null) {
this.advertiseConfig = new AdvertiseConfig(builder.advertiseBuilder, this);
} else {
this.advertiseConfig = null;
}
String mhip = managementHost;
try {
mhip = InetAddress.getByName(managementHost).getHostAddress();
} catch (UnknownHostException e) {

}
this.managementHostIp = mhip;
}

public String getManagementHost() {
return managementHost;
managementSocketAddress = new InetSocketAddress(builder.managementHost, builder.managementPort);
}

public int getManagementPort() {
return managementPort;
public InetSocketAddress getManagementSocketAddress() {
return managementSocketAddress;
}

public String getManagementHostIp() {
return managementHostIp;
}

AdvertiseConfig getAdvertiseConfig() {
public AdvertiseConfig getAdvertiseConfig() {
return advertiseConfig;
}

Expand Down Expand Up @@ -121,8 +104,7 @@ static class AdvertiseConfig {

private final int advertiseFrequency;

private final String managementHost;
private final int managementPort;
private final InetSocketAddress managementSocketAddress;

AdvertiseConfig(AdvertiseBuilder builder, MCMPConfig config) {
this.advertiseGroup = builder.advertiseGroup;
Expand All @@ -132,8 +114,7 @@ static class AdvertiseConfig {
this.securityKey = builder.securityKey;
this.protocol = builder.protocol;
this.path = builder.path;
this.managementHost = config.getManagementHost();
this.managementPort = config.getManagementPort();
this.managementSocketAddress = config.getManagementSocketAddress();
}

public String getAdvertiseGroup() {
Expand Down Expand Up @@ -164,12 +145,8 @@ public int getAdvertiseFrequency() {
return advertiseFrequency;
}

public String getManagementHost() {
return managementHost;
}

public int getManagementPort() {
return managementPort;
public InetSocketAddress getManagementSocketAddress() {
return managementSocketAddress;
}
}

Expand Down Expand Up @@ -207,9 +184,9 @@ public HttpHandler create(final ModCluster modCluster, final HttpHandler next) {

public static class WebBuilder extends Builder {

boolean checkNonce = true;
boolean reduceDisplay = false;
boolean allowCmd = true;
private boolean checkNonce = true;
private boolean reduceDisplay = false;
private boolean allowCmd = true;

public WebBuilder setCheckNonce(boolean checkNonce) {
this.checkNonce = checkNonce;
Expand All @@ -235,17 +212,18 @@ public MCMPConfig build() {

public static class AdvertiseBuilder {

String advertiseGroup = "224.0.1.105";
String advertiseAddress = "127.0.0.1";
int advertisePort = 23364;
private String advertiseGroup = "224.0.1.105";
private String advertiseAddress = "127.0.0.1";
private int advertisePort = 23364;

String securityKey;
String protocol = "http";
String path = "/";
private String securityKey;
private String protocol = "http";
private String path = "/";

int advertiseFrequency = 10000;
private int advertiseFrequency = 10000;

private final Builder parent;

public AdvertiseBuilder(Builder parent) {
this.parent = parent;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,7 @@ public void handleRequest(HttpServerExchange exchange) throws Exception {
*/
// TODO maybe this should be handled outside here?
final InetSocketAddress addr = exchange.getDestinationAddress();
//we use getHostString to avoid a reverse lookup
if (addr.getPort() != config.getManagementPort() || (!addr.getHostString().equals(config.getManagementHost()) && !addr.getHostString().equals(config.getManagementHostIp()))) {
if (addr.getPort() != config.getManagementSocketAddress().getPort() || !Arrays.equals(addr.getAddress().getAddress(), config.getManagementSocketAddress().getAddress().getAddress())) {
next.handleRequest(exchange);
return;
}
Expand Down

0 comments on commit ce6434d

Please sign in to comment.