You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by cs...@apache.org on 2014/02/21 21:10:22 UTC
[1/2] git commit: KARAF-2772 Move ConsoleFactory to separate package,
simplify interface
Repository: karaf
Updated Branches:
refs/heads/master f03731719 -> dffc30f75
KARAF-2772 Move ConsoleFactory to separate package, simplify interface
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/c724c426
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/c724c426
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/c724c426
Branch: refs/heads/master
Commit: c724c4263a62c0bbf0a96b13782e6336e15ce5e4
Parents: 79cf409
Author: Christian Schneider <ch...@die-schneider.net>
Authored: Fri Feb 21 21:10:00 2014 +0100
Committer: Christian Schneider <ch...@die-schneider.net>
Committed: Fri Feb 21 21:10:00 2014 +0100
----------------------------------------------------------------------
shell/console/pom.xml | 1 +
.../karaf/shell/console/ConsoleFactory.java | 35 --------
.../shell/console/factory/ConsoleFactory.java | 30 +++++++
.../impl/jline/ConsoleFactoryService.java | 63 +++-----------
.../console/impl/jline/DelayedStarted.java | 8 +-
.../console/impl/jline/LocalConsoleManager.java | 86 +++++++++++---------
.../impl/SecuredCommandProcessorImpl.java | 5 +-
.../org/apache/karaf/shell/util/ShellUtil.java | 15 ++++
.../OSGI-INF/blueprint/karaf-console.xml | 6 +-
.../karaf/shell/ssh/ShellFactoryImpl.java | 23 +++---
.../resources/OSGI-INF/blueprint/shell-ssh.xml | 14 +---
.../karaf/webconsole/gogo/GogoPlugin.java | 35 ++++----
.../OSGI-INF/blueprint/webconsole-gogo.xml | 6 +-
13 files changed, 148 insertions(+), 179 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/c724c426/shell/console/pom.xml
----------------------------------------------------------------------
diff --git a/shell/console/pom.xml b/shell/console/pom.xml
index f7bd2f5..7b6b65d 100644
--- a/shell/console/pom.xml
+++ b/shell/console/pom.xml
@@ -155,6 +155,7 @@
org.apache.karaf.shell.console.commands;version=2.3.0,
org.apache.karaf.shell.console.completer;version=${project.version},
org.apache.karaf.shell.console.completer;version=2.3.0,
+ org.apache.karaf.shell.console.factory;version=${project.version},
org.apache.karaf.shell.inject;version=${project.version},
org.apache.karaf.shell.util;version=${project.version},
org.apache.karaf.shell.util;version=2.3.0,
http://git-wip-us.apache.org/repos/asf/karaf/blob/c724c426/shell/console/src/main/java/org/apache/karaf/shell/console/ConsoleFactory.java
----------------------------------------------------------------------
diff --git a/shell/console/src/main/java/org/apache/karaf/shell/console/ConsoleFactory.java b/shell/console/src/main/java/org/apache/karaf/shell/console/ConsoleFactory.java
deleted file mode 100644
index f3ac066..0000000
--- a/shell/console/src/main/java/org/apache/karaf/shell/console/ConsoleFactory.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.karaf.shell.console;
-
-import java.io.InputStream;
-import java.io.PrintStream;
-
-import javax.security.auth.Subject;
-
-import jline.Terminal;
-
-import org.apache.felix.service.command.CommandProcessor;
-import org.apache.felix.service.threadio.ThreadIO;
-
-public interface ConsoleFactory {
- Console create(CommandProcessor processor, ThreadIO threadIO, InputStream in, PrintStream out, PrintStream err, final Terminal term, String encoding, Runnable closeCallback);
- Console createLocal(CommandProcessor processor, ThreadIO threadIO, Terminal terminal, String encoding, Runnable closeCallback);
- void startConsoleAs(Console console, Subject subject, String threadName);
-}
http://git-wip-us.apache.org/repos/asf/karaf/blob/c724c426/shell/console/src/main/java/org/apache/karaf/shell/console/factory/ConsoleFactory.java
----------------------------------------------------------------------
diff --git a/shell/console/src/main/java/org/apache/karaf/shell/console/factory/ConsoleFactory.java b/shell/console/src/main/java/org/apache/karaf/shell/console/factory/ConsoleFactory.java
new file mode 100644
index 0000000..cf16648
--- /dev/null
+++ b/shell/console/src/main/java/org/apache/karaf/shell/console/factory/ConsoleFactory.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.karaf.shell.console.factory;
+
+import java.io.InputStream;
+import java.io.PrintStream;
+
+import jline.Terminal;
+
+import org.apache.karaf.shell.console.Console;
+
+public interface ConsoleFactory {
+ Console create(InputStream in, PrintStream out, PrintStream err, final Terminal term, String encoding, Runnable closeCallback);
+}
http://git-wip-us.apache.org/repos/asf/karaf/blob/c724c426/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/ConsoleFactoryService.java
----------------------------------------------------------------------
diff --git a/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/ConsoleFactoryService.java b/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/ConsoleFactoryService.java
index 93a0b95..2bb853a 100644
--- a/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/ConsoleFactoryService.java
+++ b/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/ConsoleFactoryService.java
@@ -21,23 +21,20 @@ package org.apache.karaf.shell.console.impl.jline;
import java.io.InputStream;
import java.io.PrintStream;
import java.lang.management.ManagementFactory;
-import java.security.PrivilegedAction;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
-import javax.security.auth.Subject;
-
import jline.Terminal;
import org.apache.felix.service.command.CommandProcessor;
import org.apache.felix.service.command.CommandSession;
import org.apache.felix.service.command.Function;
import org.apache.felix.service.threadio.ThreadIO;
-import org.apache.karaf.jaas.boot.principal.UserPrincipal;
import org.apache.karaf.jaas.modules.JaasHelper;
import org.apache.karaf.shell.console.Console;
-import org.apache.karaf.shell.console.ConsoleFactory;
+import org.apache.karaf.shell.console.factory.ConsoleFactory;
+import org.apache.karaf.shell.util.ShellUtil;
import org.osgi.framework.BundleContext;
public class ConsoleFactoryService implements ConsoleFactory {
@@ -50,27 +47,23 @@ public class ConsoleFactoryService implements ConsoleFactory {
private final BundleContext bundleContext;
- public ConsoleFactoryService(BundleContext bc) {
+ private CommandProcessor processor;
+
+ private ThreadIO threadIO;
+
+ public ConsoleFactoryService(BundleContext bc, CommandProcessor processor, ThreadIO threadIO) {
bundleContext = bc;
+ this.processor = processor;
+ this.threadIO = threadIO;
}
@Override
- public Console createLocal(CommandProcessor processor, ThreadIO threadIO, final Terminal terminal, String encoding, Runnable closeCallback) {
- return create(processor,
- threadIO,
- StreamWrapUtil.reWrapIn(terminal, System.in),
- StreamWrapUtil.reWrap(System.out),
- StreamWrapUtil.reWrap(System.err),
- terminal,
- encoding,
- closeCallback);
- }
-
- @Override
- public Console create(CommandProcessor processor, ThreadIO threadIO, InputStream in, PrintStream out, PrintStream err, final Terminal terminal,
+ public Console create(InputStream in, PrintStream out, PrintStream err, final Terminal terminal,
String encoding, Runnable closeCallback) {
ConsoleImpl console = new ConsoleImpl(processor, threadIO, in, out, err, terminal, encoding, closeCallback, bundleContext);
CommandSession session = console.getSession();
+
+ session.put("USER", ShellUtil.getCurrentUserName());
session.put("APPLICATION", System.getProperty("karaf.name", "root"));
session.put("#LINES", new Function() {
public Object execute(CommandSession session, List<Object> arguments) throws Exception {
@@ -102,37 +95,5 @@ public class ConsoleFactoryService implements ConsoleFactory {
session.put(key, System.getProperty(key));
}
}
-
- @Override
- public void startConsoleAs(final Console console, final Subject subject, String consoleType) {
- final String userName = getUserName(subject);
- new Thread(console, "Karaf Console " + consoleType + " user " + userName) {
- @Override
- public void run() {
- if (subject != null) {
- CommandSession session = console.getSession();
- session.put("USER", userName);
- JaasHelper.doAs(subject, new PrivilegedAction<Object>() {
- public Object run() {
- doRun();
- return null;
- }
- });
- } else {
- doRun();
- }
- }
- protected void doRun() {
- super.run();
- }
- }.start();
- }
- private String getUserName(final Subject subject) {
- if (subject != null && subject.getPrincipals().iterator().hasNext()) {
- return subject.getPrincipals(UserPrincipal.class).iterator().next().getName();
- } else {
- return null;
- }
- }
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/c724c426/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/DelayedStarted.java
----------------------------------------------------------------------
diff --git a/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/DelayedStarted.java b/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/DelayedStarted.java
index a874fb1..87fb284 100644
--- a/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/DelayedStarted.java
+++ b/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/DelayedStarted.java
@@ -36,10 +36,10 @@ class DelayedStarted extends Thread implements FrameworkListener {
private final Runnable console;
private final BundleContext bundleContext;
- DelayedStarted(Runnable console, BundleContext bundleContext, InputStream in) {
- super("Karaf Shell Console Thread");
- this.console = console;
- this.bundleContext = bundleContext;
+ DelayedStarted(Runnable console, String name, BundleContext bundleContext, InputStream in) {
+ super(name);
+ this.console = console;
+ this.bundleContext = bundleContext;
this.in = in;
int defaultStartLevel = Integer.parseInt(System.getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));
int startLevel = bundleContext.getBundle(0).adapt(FrameworkStartLevel.class).getStartLevel();
http://git-wip-us.apache.org/repos/asf/karaf/blob/c724c426/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java
----------------------------------------------------------------------
diff --git a/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java b/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java
index 9ea2f96..906a9ad 100644
--- a/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java
+++ b/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java
@@ -19,50 +19,42 @@
package org.apache.karaf.shell.console.impl.jline;
import java.nio.charset.Charset;
+import java.security.PrivilegedAction;
import javax.security.auth.Subject;
import jline.Terminal;
-import org.apache.felix.service.command.CommandProcessor;
+
import org.apache.felix.service.command.CommandSession;
-import org.apache.felix.service.threadio.ThreadIO;
import org.apache.karaf.jaas.boot.principal.RolePrincipal;
import org.apache.karaf.jaas.boot.principal.UserPrincipal;
+import org.apache.karaf.jaas.modules.JaasHelper;
import org.apache.karaf.shell.console.Console;
-import org.apache.karaf.shell.console.ConsoleFactory;
+import org.apache.karaf.shell.console.factory.ConsoleFactory;
+import org.apache.karaf.shell.util.ShellUtil;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
public class LocalConsoleManager {
- private static final Logger LOGGER = LoggerFactory.getLogger(LocalConsoleManager.class);
-
private ConsoleFactory consoleFactory;
private BundleContext bundleContext;
private TerminalFactory terminalFactory;
private Console console;
private boolean start;
private final int defaultStartLevel;
- private CommandProcessor commandProcessor;
- private ThreadIO threadIO;
- private ServiceRegistration registration;
+ private ServiceRegistration<?> registration;
public LocalConsoleManager(boolean start,
String defaultStartLevel,
BundleContext bundleContext,
TerminalFactory terminalFactory,
- ConsoleFactory consoleFactory,
- CommandProcessor commandProcessor,
- ThreadIO threadIO) throws Exception {
+ ConsoleFactory consoleFactory) throws Exception {
this.start = start;
this.defaultStartLevel = Integer.parseInt(defaultStartLevel);
this.bundleContext = bundleContext;
this.terminalFactory = terminalFactory;
this.consoleFactory = consoleFactory;
- this.commandProcessor = commandProcessor;
- this.threadIO = threadIO;
start();
}
@@ -70,18 +62,10 @@ public class LocalConsoleManager {
if (!start) {
return;
}
- final Subject subject = new Subject();
- subject.getPrincipals().add(new UserPrincipal("karaf"));
-
- String roles = System.getProperty("karaf.local.roles");
- if (roles != null) {
- for (String role : roles.split("[,]")) {
- subject.getPrincipals().add(new RolePrincipal(role.trim()));
- }
- }
+
final Terminal terminal = terminalFactory.getTerminal();
- Runnable callback = new Runnable() {
+ final Runnable callback = new Runnable() {
public void run() {
try {
bundleContext.getBundle(0).stop();
@@ -90,6 +74,35 @@ public class LocalConsoleManager {
}
}
};
+
+
+ final Subject subject = createLocalKarafSubject();
+ this.console = JaasHelper.<Console>doAs(subject, new PrivilegedAction<Console>() {
+ public Console run() {
+ String encoding = getEncoding();
+ console = consoleFactory.create(
+ StreamWrapUtil.reWrapIn(terminal, System.in),
+ StreamWrapUtil.reWrap(System.out),
+ StreamWrapUtil.reWrap(System.err),
+ terminal,
+ encoding,
+ callback);
+ String name = "Karaf local console user " + ShellUtil.getCurrentUserName();
+ boolean delayconsole = Boolean.parseBoolean(System.getProperty("karaf.delay.console"));
+ if (delayconsole) {
+ DelayedStarted watcher = new DelayedStarted(console, name, bundleContext, System.in);
+ new Thread(watcher).start();
+ } else {
+ new Thread(console, name).start();
+ }
+ return console;
+ }
+ });
+ registration = bundleContext.registerService(CommandSession.class, console.getSession(), null);
+
+ }
+
+ private String getEncoding() {
String ctype = System.getenv("LC_CTYPE");
String encoding = ctype;
if (encoding != null && encoding.indexOf('.') > 0) {
@@ -97,23 +110,20 @@ public class LocalConsoleManager {
} else {
encoding = System.getProperty("input.encoding", Charset.defaultCharset().name());
}
- this.console = consoleFactory.createLocal(this.commandProcessor, this.threadIO, terminal, encoding, callback);
+ return encoding;
+ }
- registration = bundleContext.registerService(CommandSession.class, console.getSession(), null);
+ private Subject createLocalKarafSubject() {
+ final Subject subject = new Subject();
+ subject.getPrincipals().add(new UserPrincipal("karaf"));
- Runnable consoleStarter = new Runnable() {
- public void run() {
- consoleFactory.startConsoleAs(console, subject, "Local");
+ String roles = System.getProperty("karaf.local.roles");
+ if (roles != null) {
+ for (String role : roles.split("[,]")) {
+ subject.getPrincipals().add(new RolePrincipal(role.trim()));
}
- };
-
- boolean delayconsole = Boolean.parseBoolean(System.getProperty("karaf.delay.console"));
- if (delayconsole) {
- DelayedStarted watcher = new DelayedStarted(consoleStarter, bundleContext, System.in);
- new Thread(watcher).start();
- } else {
- consoleStarter.run();
}
+ return subject;
}
public void stop() throws Exception {
http://git-wip-us.apache.org/repos/asf/karaf/blob/c724c426/shell/console/src/main/java/org/apache/karaf/shell/security/impl/SecuredCommandProcessorImpl.java
----------------------------------------------------------------------
diff --git a/shell/console/src/main/java/org/apache/karaf/shell/security/impl/SecuredCommandProcessorImpl.java b/shell/console/src/main/java/org/apache/karaf/shell/security/impl/SecuredCommandProcessorImpl.java
index 84224c4..bb47d74 100644
--- a/shell/console/src/main/java/org/apache/karaf/shell/security/impl/SecuredCommandProcessorImpl.java
+++ b/shell/console/src/main/java/org/apache/karaf/shell/security/impl/SecuredCommandProcessorImpl.java
@@ -25,6 +25,7 @@ import org.apache.felix.service.command.Converter;
import org.apache.felix.service.command.Function;
import org.apache.felix.service.threadio.ThreadIO;
import org.apache.karaf.jaas.boot.principal.RolePrincipal;
+import org.apache.karaf.shell.util.ShellUtil;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Filter;
import org.osgi.framework.InvalidSyntaxException;
@@ -32,6 +33,8 @@ import org.osgi.framework.ServiceReference;
import org.osgi.util.tracker.ServiceTracker;
import javax.security.auth.Subject;
+
+import java.nio.file.attribute.UserPrincipal;
import java.security.AccessControlContext;
import java.security.AccessController;
import java.util.ArrayList;
@@ -62,7 +65,7 @@ public class SecuredCommandProcessorImpl extends CommandProcessorImpl {
Set<RolePrincipal> rolePrincipals = sub.getPrincipals(RolePrincipal.class);
if (rolePrincipals.size() == 0)
- throw new SecurityException("Current user has no associated roles.");
+ throw new SecurityException("Current user " + ShellUtil.getCurrentUserName() + " has no associated roles.");
// TODO cater for custom roles
StringBuilder sb = new StringBuilder();
http://git-wip-us.apache.org/repos/asf/karaf/blob/c724c426/shell/console/src/main/java/org/apache/karaf/shell/util/ShellUtil.java
----------------------------------------------------------------------
diff --git a/shell/console/src/main/java/org/apache/karaf/shell/util/ShellUtil.java b/shell/console/src/main/java/org/apache/karaf/shell/util/ShellUtil.java
index 388a0a6..e8a1d6a 100644
--- a/shell/console/src/main/java/org/apache/karaf/shell/util/ShellUtil.java
+++ b/shell/console/src/main/java/org/apache/karaf/shell/util/ShellUtil.java
@@ -26,8 +26,13 @@ import static org.apache.karaf.shell.commands.ansi.SimpleAnsi.INTENSITY_NORMAL;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
+import java.security.AccessControlContext;
+import java.security.AccessController;
+
+import javax.security.auth.Subject;
import org.apache.felix.service.command.CommandSession;
+import org.apache.karaf.jaas.boot.principal.UserPrincipal;
import org.apache.karaf.shell.commands.CommandException;
import org.apache.karaf.shell.console.SessionProperties;
import org.osgi.framework.Bundle;
@@ -171,4 +176,14 @@ public class ShellUtil {
}
}
+ public static String getCurrentUserName() {
+ AccessControlContext acc = AccessController.getContext();
+ final Subject subject = Subject.getSubject(acc);
+ if (subject != null && subject.getPrincipals(UserPrincipal.class).iterator().hasNext()) {
+ return subject.getPrincipals(UserPrincipal.class).iterator().next().getName();
+ } else {
+ return null;
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/c724c426/shell/console/src/main/resources/OSGI-INF/blueprint/karaf-console.xml
----------------------------------------------------------------------
diff --git a/shell/console/src/main/resources/OSGI-INF/blueprint/karaf-console.xml b/shell/console/src/main/resources/OSGI-INF/blueprint/karaf-console.xml
index bbe0c5b..f8b8837 100644
--- a/shell/console/src/main/resources/OSGI-INF/blueprint/karaf-console.xml
+++ b/shell/console/src/main/resources/OSGI-INF/blueprint/karaf-console.xml
@@ -31,8 +31,10 @@
<bean id="consoleFactoryService" class="org.apache.karaf.shell.console.impl.jline.ConsoleFactoryService">
<argument ref="blueprintBundleContext"/>
+ <argument ref="commandProcessor"/>
+ <argument ref="threadIO"/>
</bean>
- <service interface="org.apache.karaf.shell.console.ConsoleFactory" ref="consoleFactoryService"/>
+ <service interface="org.apache.karaf.shell.console.factory.ConsoleFactory" ref="consoleFactoryService"/>
<bean id="consoleFactory" class="org.apache.karaf.shell.console.impl.jline.LocalConsoleManager"
destroy-method="stop">
@@ -41,8 +43,6 @@
<argument ref="blueprintBundleContext"/>
<argument ref="terminalFactory"/>
<argument ref="consoleFactoryService"/>
- <argument ref="commandProcessor"/>
- <argument ref="threadIO"/>
</bean>
<bean id="converters" class="org.apache.karaf.shell.console.impl.Converters">
http://git-wip-us.apache.org/repos/asf/karaf/blob/c724c426/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellFactoryImpl.java
----------------------------------------------------------------------
diff --git a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellFactoryImpl.java b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellFactoryImpl.java
index 08bf0d8..657193b 100644
--- a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellFactoryImpl.java
+++ b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellFactoryImpl.java
@@ -24,18 +24,18 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
+import java.security.PrivilegedAction;
import java.util.Map;
import javax.security.auth.Subject;
import jline.Terminal;
-import org.apache.felix.service.command.CommandProcessor;
import org.apache.felix.service.command.CommandSession;
+import org.apache.karaf.jaas.modules.JaasHelper;
import org.apache.karaf.shell.console.Console;
-import org.apache.karaf.shell.console.ConsoleFactory;
-import org.apache.felix.service.command.Function;
-import org.apache.felix.service.threadio.ThreadIO;
+import org.apache.karaf.shell.console.factory.ConsoleFactory;
+import org.apache.karaf.shell.util.ShellUtil;
import org.apache.sshd.common.Factory;
import org.apache.sshd.server.Command;
import org.apache.sshd.server.Environment;
@@ -49,14 +49,10 @@ import org.osgi.service.blueprint.container.ReifiedType;
* Shell.
*/
public class ShellFactoryImpl implements Factory<Command> {
- private CommandProcessor commandProcessor;
private ConsoleFactory consoleFactory;
- private ThreadIO threadIO;
- public ShellFactoryImpl(CommandProcessor commandProcessor, ConsoleFactory consoleFactory, ThreadIO threadIO) {
- this.commandProcessor = commandProcessor;
+ public ShellFactoryImpl(ConsoleFactory consoleFactory) {
this.consoleFactory = consoleFactory;
- this.threadIO = threadIO;
}
public Command create() {
@@ -110,13 +106,18 @@ public class ShellFactoryImpl implements Factory<Command> {
if (encoding != null && encoding.indexOf('.') > 0) {
encoding = encoding.substring(encoding.indexOf('.') + 1);
}
- Console console = consoleFactory.create(commandProcessor, threadIO, in,
+ final Console console = consoleFactory.create(in,
lfToCrLfPrintStream(out), lfToCrLfPrintStream(err), terminal, encoding, destroyCallback);
final CommandSession session = console.getSession();
for (Map.Entry<String, String> e : env.getEnv().entrySet()) {
session.put(e.getKey(), e.getValue());
}
- consoleFactory.startConsoleAs(console, subject, "ssh");
+ JaasHelper.doAs(subject, new PrivilegedAction<Object>() {
+ public Object run() {
+ new Thread(console, "Karaf ssh console user " + ShellUtil.getCurrentUserName()).start();
+ return null;
+ }
+ });
} catch (Exception e) {
throw (IOException) new IOException("Unable to start shell").initCause(e);
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/c724c426/shell/ssh/src/main/resources/OSGI-INF/blueprint/shell-ssh.xml
----------------------------------------------------------------------
diff --git a/shell/ssh/src/main/resources/OSGI-INF/blueprint/shell-ssh.xml b/shell/ssh/src/main/resources/OSGI-INF/blueprint/shell-ssh.xml
index fc63ceb..7a58288 100644
--- a/shell/ssh/src/main/resources/OSGI-INF/blueprint/shell-ssh.xml
+++ b/shell/ssh/src/main/resources/OSGI-INF/blueprint/shell-ssh.xml
@@ -24,13 +24,11 @@
default-activation="lazy">
<type-converters>
- <bean class="org.apache.karaf.shell.ssh.ShellFactoryImpl" factory-method="getConverter" >
-
- </bean>
+ <bean class="org.apache.karaf.shell.ssh.ShellFactoryImpl" factory-method="getConverter" />
<bean class="org.apache.karaf.shell.ssh.UserAuthFactoriesFactory" factory-method="getConverter" />
</type-converters>
- <reference id="consoleFactory" interface="org.apache.karaf.shell.console.ConsoleFactory" />
+ <reference id="consoleFactory" interface="org.apache.karaf.shell.console.factory.ConsoleFactory" />
<ext:property-placeholder placeholder-prefix="$[" placeholder-suffix="]">
<ext:default-properties>
@@ -93,9 +91,7 @@
</property>
<property name="shellFactory">
<bean class="org.apache.karaf.shell.ssh.ShellFactoryImpl">
- <argument ref="commandProcessor"/>
<argument ref="consoleFactory"/>
- <argument ref="threadIO"/>
</bean>
</property>
<property name="commandFactory">
@@ -148,10 +144,6 @@
<property name="idleTimeout" value="${sshIdleTimeout}"/>
</bean>
- <reference id="commandProcessor" interface="org.apache.felix.service.command.CommandProcessor">
- </reference>
-
- <reference id="threadIO" interface="org.apache.felix.service.threadio.ThreadIO">
- </reference>
+ <reference id="commandProcessor" interface="org.apache.felix.service.command.CommandProcessor"/>
</blueprint>
http://git-wip-us.apache.org/repos/asf/karaf/blob/c724c426/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/GogoPlugin.java
----------------------------------------------------------------------
diff --git a/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/GogoPlugin.java b/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/GogoPlugin.java
index 077c31b..dcfb00d 100644
--- a/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/GogoPlugin.java
+++ b/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/GogoPlugin.java
@@ -40,11 +40,10 @@ import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.apache.felix.service.command.CommandProcessor;
-import org.apache.felix.service.threadio.ThreadIO;
-import org.apache.karaf.shell.console.Console;
-import org.apache.karaf.shell.console.ConsoleFactory;
import org.apache.felix.webconsole.AbstractWebConsolePlugin;
+import org.apache.karaf.jaas.boot.principal.UserPrincipal;
+import org.apache.karaf.shell.console.Console;
+import org.apache.karaf.shell.console.factory.ConsoleFactory;
import org.osgi.framework.BundleContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -62,9 +61,7 @@ public class GogoPlugin extends AbstractWebConsolePlugin {
public static final int TERM_HEIGHT = 39;
private BundleContext bundleContext;
- private CommandProcessor commandProcessor;
private ConsoleFactory consoleFactory;
- private ThreadIO threadIO;
@Override
protected boolean isHtmlRequest(HttpServletRequest request) {
@@ -75,18 +72,10 @@ public class GogoPlugin extends AbstractWebConsolePlugin {
this.bundleContext = bundleContext;
}
- public void setCommandProcessor(CommandProcessor commandProcessor) {
- this.commandProcessor = commandProcessor;
- }
-
public void setConsoleFactory(ConsoleFactory consoleFactory) {
this.consoleFactory = consoleFactory;
}
- public void setThreadIO(ThreadIO threadIO) {
- this.threadIO = threadIO;
- }
-
public void start() {
super.activate(bundleContext);
this.logger.info(LABEL + " plugin activated");
@@ -195,19 +184,15 @@ public class GogoPlugin extends AbstractWebConsolePlugin {
in = new PipedOutputStream();
out = new PipedInputStream();
PrintStream pipedOut = new PrintStream(new PipedOutputStream(out), true);
-
- AccessControlContext acc = AccessController.getContext();
- final Subject subject = Subject.getSubject(acc);
- Console console = consoleFactory.create(commandProcessor,
- threadIO,
+ Console console = consoleFactory.create(
new PipedInputStream(in),
pipedOut,
pipedOut,
new WebTerminal(TERM_WIDTH, TERM_HEIGHT),
null,
null);
- consoleFactory.startConsoleAs(console, subject, "Web");
+ new Thread(console, "Karaf web console user " + getCurrentUserName()).start();
} catch (IOException e) {
e.printStackTrace();
throw e;
@@ -217,6 +202,16 @@ public class GogoPlugin extends AbstractWebConsolePlugin {
}
new Thread(this).start();
}
+
+ private String getCurrentUserName() {
+ AccessControlContext acc = AccessController.getContext();
+ final Subject subject = Subject.getSubject(acc);
+ if (subject != null && subject.getPrincipals().iterator().hasNext()) {
+ return subject.getPrincipals(UserPrincipal.class).iterator().next().getName();
+ } else {
+ return null;
+ }
+ }
public boolean isClosed() {
return closed;
http://git-wip-us.apache.org/repos/asf/karaf/blob/c724c426/webconsole/gogo/src/main/resources/OSGI-INF/blueprint/webconsole-gogo.xml
----------------------------------------------------------------------
diff --git a/webconsole/gogo/src/main/resources/OSGI-INF/blueprint/webconsole-gogo.xml b/webconsole/gogo/src/main/resources/OSGI-INF/blueprint/webconsole-gogo.xml
index 9a17021..79fc42c 100644
--- a/webconsole/gogo/src/main/resources/OSGI-INF/blueprint/webconsole-gogo.xml
+++ b/webconsole/gogo/src/main/resources/OSGI-INF/blueprint/webconsole-gogo.xml
@@ -19,13 +19,9 @@
-->
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
- <reference id="commandProcessor" interface="org.apache.felix.service.command.CommandProcessor" />
- <reference id="consoleFactory" interface="org.apache.karaf.shell.console.ConsoleFactory"/>
- <reference id="threadIO" interface="org.apache.felix.service.threadio.ThreadIO" />
+ <reference id="consoleFactory" interface="org.apache.karaf.shell.console.factory.ConsoleFactory"/>
<bean id="gogoPlugin" class="org.apache.karaf.webconsole.gogo.GogoPlugin" init-method="start" destroy-method="stop">
- <property name="commandProcessor" ref="commandProcessor" />
- <property name="threadIO" ref="threadIO" />
<property name="bundleContext" ref="blueprintBundleContext" />
<property name="consoleFactory" ref="consoleFactory"/>
</bean>
[2/2] git commit: Merge branch 'master' of
https://git-wip-us.apache.org/repos/asf/karaf
Posted by cs...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/karaf
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/dffc30f7
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/dffc30f7
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/dffc30f7
Branch: refs/heads/master
Commit: dffc30f756fb6e635fc464f47cb1f10107758bfe
Parents: c724c42 f037317
Author: Christian Schneider <ch...@die-schneider.net>
Authored: Fri Feb 21 21:10:07 2014 +0100
Committer: Christian Schneider <ch...@die-schneider.net>
Committed: Fri Feb 21 21:10:07 2014 +0100
----------------------------------------------------------------------
.../karaf/diagnostic/command/DumpCommand.java | 4 +-
instance/core/pom.xml | 3 +-
.../core/internal/InstanceServiceImpl.java | 23 +-
.../org/apache/karaf/main/ConfigProperties.java | 2 +-
.../org/apache/karaf/main/InstanceHelper.java | 6 +-
.../main/java/org/apache/karaf/main/Main.java | 6 +-
.../org/apache/karaf/main/PropertiesLoader.java | 32 +-
.../apache/karaf/main/lock/DefaultJDBCLock.java | 2 +-
.../apache/karaf/main/lock/DerbyJDBCLock.java | 2 +-
.../apache/karaf/main/lock/GenericJDBCLock.java | 2 +-
.../org/apache/karaf/main/lock/LockFactory.java | 2 +-
.../apache/karaf/main/lock/MySQLJDBCLock.java | 2 +-
.../apache/karaf/main/lock/OracleJDBCLock.java | 2 +-
.../karaf/main/lock/PostgreSQLJDBCLock.java | 2 +-
.../karaf/main/lock/SQLServerJDBCLock.java | 2 +-
.../apache/karaf/main/lock/SimpleFileLock.java | 2 +-
.../karaf/main/util/BootstrapLogManager.java | 6 +-
.../org/apache/karaf/main/util/SubstHelper.java | 141 ---
.../java/org/apache/karaf/main/MockLock.java | 2 +-
.../main/lock/BaseJDBCLockIntegrationTest.java | 2 +-
.../karaf/main/lock/BaseJDBCLockTest.java | 4 +-
.../lock/DefaultJDBCLockIntegrationTest.java | 2 +-
.../karaf/main/lock/DefaultJDBCLockTest.java | 2 +-
.../main/lock/DerbyJDBCLockIntegrationTest.java | 2 +-
.../karaf/main/lock/DerbyJDBCLockTest.java | 2 +-
.../main/lock/MySQLJDBCLockIntegrationTest.java | 2 +-
.../karaf/main/lock/MySQLJDBCLockTest.java | 2 +-
.../lock/OracleJDBCLockIntegrationTest.java | 2 +-
.../karaf/main/lock/OracleJDBCLockTest.java | 2 +-
.../lock/PostgreSQLJDBCLockIntegrationTest.java | 2 +-
.../karaf/main/lock/PostgreSQLJDBCLockTest.java | 2 +-
.../main/util/BootstrapLogManagerTest.java | 2 +-
shell/help/pom.xml | 2 +-
.../karaf/shell/help/impl/HelpSystem.java | 2 +-
.../apache/karaf/util/InterpolationHelper.java | 215 ----
.../apache/karaf/util/locks/FileLockUtils.java | 110 ++
.../karaf/util/properties/FileLockUtils.java | 110 --
.../util/properties/InterpolationHelper.java | 325 ++++++
.../karaf/util/properties/Properties.java | 1102 ++++++++++++++++++
39 files changed, 1603 insertions(+), 534 deletions(-)
----------------------------------------------------------------------