You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by xu...@apache.org on 2010/11/01 10:15:11 UTC
svn commit: r1029580 - in
/geronimo/server/trunk/framework/modules/geronimo-shell-base/src/main/java/org/apache/geronimo/shell:
BaseCommandSupport.java deploy/ConnectCommand.java
Author: xuhaihong
Date: Mon Nov 1 09:15:11 2010
New Revision: 1029580
URL: http://svn.apache.org/viewvc?rev=1029580&view=rev
Log:
GERONIMO-5579 Check hostname to determine whether the expected server is the embedded one
Just the first step changes, some naming updates are required
Modified:
geronimo/server/trunk/framework/modules/geronimo-shell-base/src/main/java/org/apache/geronimo/shell/BaseCommandSupport.java
geronimo/server/trunk/framework/modules/geronimo-shell-base/src/main/java/org/apache/geronimo/shell/deploy/ConnectCommand.java
Modified: geronimo/server/trunk/framework/modules/geronimo-shell-base/src/main/java/org/apache/geronimo/shell/BaseCommandSupport.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-shell-base/src/main/java/org/apache/geronimo/shell/BaseCommandSupport.java?rev=1029580&r1=1029579&r2=1029580&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-shell-base/src/main/java/org/apache/geronimo/shell/BaseCommandSupport.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-shell-base/src/main/java/org/apache/geronimo/shell/BaseCommandSupport.java Mon Nov 1 09:15:11 2010
@@ -20,10 +20,16 @@
package org.apache.geronimo.shell;
import java.io.IOException;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.net.UnknownHostException;
+import java.util.Enumeration;
import java.util.Set;
import org.apache.felix.karaf.shell.console.OsgiCommandSupport;
import org.apache.geronimo.deployment.cli.ConsoleReader;
+import org.apache.geronimo.gbean.AbstractName;
import org.apache.geronimo.gbean.AbstractNameQuery;
import org.apache.geronimo.kernel.Kernel;
import org.osgi.framework.ServiceReference;
@@ -82,7 +88,7 @@ public abstract class BaseCommandSupport
public String readLine(String msg) throws IOException {
return readLine(msg, '\0');
}
-
+
private String readLine(String msg, char mask) throws IOException {
StringBuffer sb = new StringBuffer();
if (msg != null) {
@@ -100,9 +106,9 @@ public abstract class BaseCommandSupport
continue;
}
session.getConsole().print("\b \b");
- session.getConsole().flush();
+ session.getConsole().flush();
sb.delete(size - 1, size);
- } else if (c == '\r' || c == '\n') {
+ } else if (c == '\r' || c == '\n') {
session.getConsole().println();
session.getConsole().flush();
break;
@@ -133,7 +139,7 @@ public abstract class BaseCommandSupport
public String readPassword(String prompt) throws IOException {
return readLine(prompt, '*');
}
-
+
public Kernel getKernel() {
ServiceReference reference = bundleContext.getServiceReference(Kernel.class.getName());
Kernel kernel = null;
@@ -142,17 +148,77 @@ public abstract class BaseCommandSupport
}
return kernel;
}
-
+
public boolean isEmbedded() {
return isEmbedded(getKernel());
}
-
+
public boolean isEmbedded(Kernel kernel) {
if (kernel != null) {
- Set deamon = kernel.listGBeans(new AbstractNameQuery("org.apache.geronimo.system.main.EmbeddedDaemon"));
+ Set<AbstractName> deamon = kernel.listGBeans(new AbstractNameQuery("org.apache.geronimo.system.main.EmbeddedDaemon"));
return !deamon.isEmpty();
} else {
return false;
- }
+ }
+ }
+
+ public boolean isEmbeddedServer(String hostname, int port) {
+ if (!isEmbedded()) {
+ return false;
+ }
+ Kernel kernel = getKernel();
+ try {
+ int embeddedPort = (Integer) kernel.getAttribute("RMIRegistry", "port");
+ if (port != embeddedPort) {
+ return false;
+ }
+ // If it runs here, the user should have access to the local shell.
+ // we should only identify whether the host name is any interface of the local machine, and ignore whether the server is really listening on this interface.
+ return isLocalMachine(hostname);
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
+ private boolean isLocalMachine(String hostName) {
+ try {
+ InetAddress hostAddress = InetAddress.getByName(hostName);
+ if (hostAddress.isAnyLocalAddress() || hostAddress.isLoopbackAddress() || hostName.equals(getLocalHostName()) || hostName.equals(getFullLocalHostName())) {
+ return true;
+ } else {
+ Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
+ while (en.hasMoreElements()) {
+ NetworkInterface iface = en.nextElement();
+ Enumeration<InetAddress> ien = iface.getInetAddresses();
+ while (ien.hasMoreElements()) {
+ InetAddress address = ien.nextElement();
+ if (address.equals(hostAddress)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+ } catch (SocketException e) {
+ return false;
+ } catch (UnknownHostException e) {
+ return false;
+ }
+ }
+
+ private String getLocalHostName() {
+ try {
+ return InetAddress.getLocalHost().getHostName();
+ } catch (UnknownHostException e) {
+ return null;
+ }
+ }
+
+ private String getFullLocalHostName() {
+ try {
+ return InetAddress.getLocalHost().getCanonicalHostName();
+ } catch (UnknownHostException e) {
+ return null;
+ }
}
}
Modified: geronimo/server/trunk/framework/modules/geronimo-shell-base/src/main/java/org/apache/geronimo/shell/deploy/ConnectCommand.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-shell-base/src/main/java/org/apache/geronimo/shell/deploy/ConnectCommand.java?rev=1029580&r1=1029579&r2=1029580&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-shell-base/src/main/java/org/apache/geronimo/shell/deploy/ConnectCommand.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-shell-base/src/main/java/org/apache/geronimo/shell/deploy/ConnectCommand.java Mon Nov 1 09:15:11 2010
@@ -20,21 +20,17 @@
package org.apache.geronimo.shell.deploy;
import java.io.IOException;
-import java.util.Set;
import org.apache.felix.gogo.commands.Command;
import org.apache.felix.gogo.commands.Option;
+import org.apache.geronimo.cli.deployer.ConnectionParamsImpl;
import org.apache.geronimo.deployment.cli.OfflineServerConnection;
import org.apache.geronimo.deployment.cli.OnlineServerConnection;
import org.apache.geronimo.deployment.cli.ServerConnection;
import org.apache.geronimo.deployment.cli.ServerConnection.UsernamePasswordHandler;
import org.apache.geronimo.deployment.plugin.factories.BaseDeploymentFactory;
-import org.apache.geronimo.gbean.AbstractNameQuery;
-import org.apache.geronimo.cli.deployer.ConnectionParamsImpl;
import org.apache.geronimo.kernel.Kernel;
import org.apache.geronimo.shell.BaseCommandSupport;
-
-import org.osgi.framework.ServiceReference;
import org.osgi.service.command.CommandSession;
/**
@@ -138,16 +134,16 @@ public class ConnectCommand extends Base
*/
protected ServerConnection openConnection(boolean quiet) throws Exception {
Kernel kernel = getKernel();
-
+
ServerConnection connection;
-
- if (isEmbedded(kernel)) {
+
+ if (isEmbeddedServer(hostname, port)) {
connection = new OfflineServerConnection(kernel, false);
} else {
if (!quiet) {
println("Connecting to Geronimo server: " + hostname + ":" + port);
}
-
+
BaseDeploymentFactory deploymentFactory = new BaseDeploymentFactory();
ConnectionParamsImpl connectionParams = new ConnectionParamsImpl(null, hostname, port, null, username, password, false, false, false, secure);
connection = new OnlineServerConnection(connectionParams, new ShellUserPasswordHandler(session), deploymentFactory);