You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by lg...@apache.org on 2019/04/30 04:09:53 UTC

[mina-sshd] branch master updated: Added selection of I/O service factory via command line argument to SshKeyScanMain and SshFsMounter

This is an automated email from the ASF dual-hosted git repository.

lgoldstein pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mina-sshd.git


The following commit(s) were added to refs/heads/master by this push:
     new 33885a9  Added selection of I/O service factory via command line argument to SshKeyScanMain and SshFsMounter
33885a9 is described below

commit 33885a9ad50465467ad95027a20f1f670c068e20
Author: Lyor Goldstein <lg...@apache.org>
AuthorDate: Sun Apr 28 16:17:19 2019 +0300

    Added selection of I/O service factory via command line argument to SshKeyScanMain and SshFsMounter
---
 .../main/java/org/apache/sshd/cli/CliSupport.java  | 13 +++++++++++--
 .../org/apache/sshd/cli/client/SshKeyScanMain.java | 22 ++++++++++++++++++++--
 .../org/apache/sshd/cli/server/SshFsMounter.java   | 12 ++++++------
 3 files changed, 37 insertions(+), 10 deletions(-)

diff --git a/sshd-cli/src/main/java/org/apache/sshd/cli/CliSupport.java b/sshd-cli/src/main/java/org/apache/sshd/cli/CliSupport.java
index 70d107e..783c219 100644
--- a/sshd-cli/src/main/java/org/apache/sshd/cli/CliSupport.java
+++ b/sshd-cli/src/main/java/org/apache/sshd/cli/CliSupport.java
@@ -93,9 +93,8 @@ public abstract class CliSupport {
             }
 
             String provider = args[index];
-            factory = BuiltinIoServiceFactoryFactories.fromFactoryName(provider);
+            factory = resolveBuiltinIoServiceFactory(stderr, argName, provider);
             if (factory == null) {
-                System.err.println("provider (" + argName + ") should be one of " + BuiltinIoServiceFactoryFactories.VALUES);
                 return null;
             }
         }
@@ -108,6 +107,16 @@ public abstract class CliSupport {
         return factory;
     }
 
+    public static BuiltinIoServiceFactoryFactories resolveBuiltinIoServiceFactory(
+            PrintStream stderr, String argName, String provider) {
+        BuiltinIoServiceFactoryFactories factory = BuiltinIoServiceFactoryFactories.fromFactoryName(provider);
+        if (factory == null) {
+            System.err.println(argName + " - unknown provider (" + provider + ")"
+                + " should be one of " + BuiltinIoServiceFactoryFactories.VALUES);
+        }
+        return factory;
+    }
+
     public static <M extends AbstractFactoryManager> M setupIoServiceFactory(
             M manager, PropertyResolver resolver, Level level,
             PrintStream stdout, PrintStream stderr, String... args) {
diff --git a/sshd-cli/src/main/java/org/apache/sshd/cli/client/SshKeyScanMain.java b/sshd-cli/src/main/java/org/apache/sshd/cli/client/SshKeyScanMain.java
index 9619499..924ad60 100644
--- a/sshd-cli/src/main/java/org/apache/sshd/cli/client/SshKeyScanMain.java
+++ b/sshd-cli/src/main/java/org/apache/sshd/cli/client/SshKeyScanMain.java
@@ -56,6 +56,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.logging.Level;
 
+import org.apache.sshd.cli.CliSupport;
 import org.apache.sshd.client.SshClient;
 import org.apache.sshd.client.auth.keyboard.UserInteraction;
 import org.apache.sshd.client.future.ConnectFuture;
@@ -67,6 +68,8 @@ import org.apache.sshd.common.cipher.ECCurves;
 import org.apache.sshd.common.config.keys.BuiltinIdentities;
 import org.apache.sshd.common.config.keys.KeyUtils;
 import org.apache.sshd.common.config.keys.PublicKeyEntry;
+import org.apache.sshd.common.io.BuiltinIoServiceFactoryFactories;
+import org.apache.sshd.common.io.IoServiceFactory;
 import org.apache.sshd.common.io.IoSession;
 import org.apache.sshd.common.kex.KexProposalOption;
 import org.apache.sshd.common.keyprovider.KeyPairProvider;
@@ -216,7 +219,8 @@ public class SshKeyScanMain implements Channel, Callable<Void>, ServerKeyVerifie
                     }
 
                     @Override
-                    public String[] interactive(ClientSession session, String name, String instruction, String lang, String[] prompt, boolean[] echo) {
+                    public String[] interactive(
+                            ClientSession session, String name, String instruction, String lang, String[] prompt, boolean[] echo) {
                         return null;
                     }
 
@@ -294,7 +298,7 @@ public class SshKeyScanMain implements Channel, Callable<Void>, ServerKeyVerifie
 
     protected void resolveServerKeys(SshClient client, String host,
             Map<String, List<KeyPair>> pairsMap, Map<String, List<NamedFactory<Signature>>> sigFactories)
-                    throws IOException {
+                throws IOException {
         // Cannot use forEach because of the potential for throwing IOException by the invoked code
         for (Map.Entry<String, List<KeyPair>> pe : pairsMap.entrySet()) {
             String kt = pe.getKey();
@@ -667,6 +671,20 @@ public class SshKeyScanMain implements Channel, Callable<Void>, ServerKeyVerifie
             } else if ("-v".equals(optName)) {
                 ValidateUtils.checkTrue(scanner.getLogLevel() == null, "%s option re-specified", optName);
                 scanner.setLogLevel(Level.FINEST);
+            } else if ("-io".equals(optName)) {
+                if ((index + 1) >= numArgs) {
+                    System.err.println("option requires an argument: " + optName);
+                    break;
+                }
+
+                String provider = args[++index];
+                BuiltinIoServiceFactoryFactories factory =
+                    CliSupport.resolveBuiltinIoServiceFactory(System.err, optName, provider);
+                if (factory != null) {
+                    System.setProperty(IoServiceFactory.class.getName(), factory.getFactoryClassName());
+                } else {
+                    break;
+                }
             } else {    // stop at first non-option - assume the rest are host names/addresses
                 ValidateUtils.checkTrue(optName.charAt(0) != '-', "Unknown option: %s", optName);
 
diff --git a/sshd-cli/src/test/java/org/apache/sshd/cli/server/SshFsMounter.java b/sshd-cli/src/test/java/org/apache/sshd/cli/server/SshFsMounter.java
index 6e072be..a7ddba3 100644
--- a/sshd-cli/src/test/java/org/apache/sshd/cli/server/SshFsMounter.java
+++ b/sshd-cli/src/test/java/org/apache/sshd/cli/server/SshFsMounter.java
@@ -33,6 +33,7 @@ import java.util.TreeMap;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
 
+import org.apache.sshd.cli.CliSupport;
 import org.apache.sshd.common.PropertyResolver;
 import org.apache.sshd.common.PropertyResolverUtils;
 import org.apache.sshd.common.SshConstants;
@@ -263,18 +264,17 @@ public final class SshFsMounter extends SshServerCliSupport {
                 }
                 port = Integer.parseInt(args[++i]);
             } else if ("-io".equals(argName)) {
-                if (i + 1 >= numArgs) {
+                if ((i + 1) >= numArgs) {
                     System.err.println("option requires an argument: " + argName);
                     break;
                 }
 
                 String provider = args[++i];
-                if ("mina".equals(provider)) {
-                    System.setProperty(IoServiceFactory.class.getName(), BuiltinIoServiceFactoryFactories.MINA.getFactoryClassName());
-                } else if ("nio2".endsWith(provider)) {
-                    System.setProperty(IoServiceFactory.class.getName(), BuiltinIoServiceFactoryFactories.NIO2.getFactoryClassName());
+                BuiltinIoServiceFactoryFactories factory =
+                    CliSupport.resolveBuiltinIoServiceFactory(System.err, argName, provider);
+                if (factory != null) {
+                    System.setProperty(IoServiceFactory.class.getName(), factory.getFactoryClassName());
                 } else {
-                    System.err.println("provider should be mina or nio2: " + argName);
                     error = true;
                     break;
                 }