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 2018/02/25 07:59:28 UTC

mina-sshd git commit: [SSHD-798] Provide split GIT command arguments to GitLocationResolver

Repository: mina-sshd
Updated Branches:
  refs/heads/master 16fae05ab -> b8bf38740


[SSHD-798] Provide split GIT command arguments to GitLocationResolver


Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/b8bf3874
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/b8bf3874
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/b8bf3874

Branch: refs/heads/master
Commit: b8bf38740c1fdbceb61c6c6b2bf25e39e3ea869a
Parents: 16fae05
Author: Goldstein Lyor <ly...@c-b4.com>
Authored: Sun Feb 25 09:56:45 2018 +0200
Committer: Goldstein Lyor <ly...@c-b4.com>
Committed: Sun Feb 25 09:59:22 2018 +0200

----------------------------------------------------------------------
 .../java/org/apache/sshd/git/GitLocationResolver.java | 11 ++++++++---
 .../java/org/apache/sshd/git/pack/GitPackCommand.java | 14 ++++++++------
 .../java/org/apache/sshd/git/pgm/GitPgmCommand.java   |  2 +-
 3 files changed, 17 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/b8bf3874/sshd-git/src/main/java/org/apache/sshd/git/GitLocationResolver.java
----------------------------------------------------------------------
diff --git a/sshd-git/src/main/java/org/apache/sshd/git/GitLocationResolver.java b/sshd-git/src/main/java/org/apache/sshd/git/GitLocationResolver.java
index 7679c90..323807f 100644
--- a/sshd-git/src/main/java/org/apache/sshd/git/GitLocationResolver.java
+++ b/sshd-git/src/main/java/org/apache/sshd/git/GitLocationResolver.java
@@ -33,13 +33,18 @@ import org.apache.sshd.server.session.ServerSession;
  */
 public interface GitLocationResolver {
     /**
-     * @param command The received command
+     * @param command The complete received command
+     * @param args The command split into arguments - {@code args[0]} is the
+     * &quot;pure&quot; command itself without any other arguments. <B>Note:</B>
+     * changing the content of the arguments array may affect command execution
+     * in undetermined ways, due to invocation code changes without prior notice,
+     * so <U>highly recommended to avoid it</U>.
      * @param session The {@link ServerSession} through which the command was received
      * @param fs The {@link FileSystem} associated with the server session
      * @return The local GIT repository root path
      * @throws IOException If failed to resolve
      */
-    Path resolveRootDirectory(String command, ServerSession session, FileSystem fs) throws IOException;
+    Path resolveRootDirectory(String command, String[] args, ServerSession session, FileSystem fs) throws IOException;
 
     /**
      * Creates a resolver that returns the same root directory for any invocation of
@@ -50,6 +55,6 @@ public interface GitLocationResolver {
      */
     static GitLocationResolver constantPath(Path rootDir) {
         Objects.requireNonNull(rootDir, "No root directory provided");
-        return (cmd, session, fs) -> rootDir;
+        return (cmd, args, session, fs) -> rootDir;
     }
 }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/b8bf3874/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommand.java
----------------------------------------------------------------------
diff --git a/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommand.java b/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommand.java
index bb123da..3b65b2a 100644
--- a/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommand.java
+++ b/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommand.java
@@ -72,13 +72,13 @@ public class GitPackCommand extends AbstractGitCommand {
             }
 
             if (args.length != 2) {
-                throw new IllegalArgumentException("Invalid git command line: " + command);
+                throw new IllegalArgumentException("Invalid git command line (no arguments): " + command);
             }
 
-            String subCommand = args[0];
-            Path rootDir = resolveRootDirectory(command, subCommand, args[1]);
+            Path rootDir = resolveRootDirectory(command, args);
             RepositoryCache.FileKey key = RepositoryCache.FileKey.lenient(rootDir.toFile(), FS.DETECTED);
             Repository db = key.open(true /* must exist */);
+            String subCommand = args[0];
             if (RemoteConfig.DEFAULT_UPLOAD_PACK.equals(subCommand)) {
                 new UploadPack(db).upload(getInputStream(), getOutputStream(), getErrorStream());
             } else if (RemoteConfig.DEFAULT_RECEIVE_PACK.equals(subCommand)) {
@@ -93,10 +93,12 @@ public class GitPackCommand extends AbstractGitCommand {
         }
     }
 
-    protected Path resolveRootDirectory(String command, String subCommand, String pathArg) throws IOException {
+    protected Path resolveRootDirectory(String command, String[] args) throws IOException {
         GitLocationResolver resolver = getGitLocationResolver();
-        Path rootDir = resolver.resolveRootDirectory(command, getServerSession(), getFileSystem());
+        Path rootDir = resolver.resolveRootDirectory(command, args, getServerSession(), getFileSystem());
         ValidateUtils.checkState(rootDir != null, "No root directory provided for %s command", command);
+
+        String pathArg = args[1];
         int len = GenericUtils.length(pathArg);
         // Strip any leading path separator since we use relative to root
         if ((len > 0) && (pathArg.charAt(0) == '/')) {
@@ -104,7 +106,7 @@ public class GitPackCommand extends AbstractGitCommand {
             len--;
         }
 
-        ValidateUtils.checkNotNullAndNotEmpty(pathArg, "No %s command sub-path specified", subCommand);
+        ValidateUtils.checkNotNullAndNotEmpty(pathArg, "No %s command sub-path specified", args[0]);
         return rootDir.resolve(pathArg);
     }
 }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/b8bf3874/sshd-git/src/main/java/org/apache/sshd/git/pgm/GitPgmCommand.java
----------------------------------------------------------------------
diff --git a/sshd-git/src/main/java/org/apache/sshd/git/pgm/GitPgmCommand.java b/sshd-git/src/main/java/org/apache/sshd/git/pgm/GitPgmCommand.java
index a80012d..5a95449 100644
--- a/sshd-git/src/main/java/org/apache/sshd/git/pgm/GitPgmCommand.java
+++ b/sshd-git/src/main/java/org/apache/sshd/git/pgm/GitPgmCommand.java
@@ -69,7 +69,7 @@ public class GitPgmCommand extends AbstractGitCommand {
             }
 
             GitLocationResolver resolver = getGitLocationResolver();
-            Path rootDir = resolver.resolveRootDirectory(command, getServerSession(), getFileSystem());
+            Path rootDir = resolver.resolveRootDirectory(command, args, getServerSession(), getFileSystem());
             ValidateUtils.checkState(rootDir != null, "No root directory provided for %s command", command);
 
             new EmbeddedCommandRunner(rootDir).execute(args, getInputStream(), getOutputStream(), err);