http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/2529a4c3/sshd-core/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpErrorStatusDataHandler.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpErrorStatusDataHandler.java b/sshd-core/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpErrorStatusDataHandler.java new file mode 100644 index 0000000..1498ba2 --- /dev/null +++ b/sshd-core/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpErrorStatusDataHandler.java @@ -0,0 +1,83 @@ +/* + * 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.sshd.server.subsystem.sftp; + +import org.apache.sshd.common.subsystem.sftp.SftpHelper; + +/** + * Invoked in order to format failed commands messages + * + * @author <a href="mailto:d...@mina.apache.org">Apache MINA SSHD Project</a> + */ +public interface SftpErrorStatusDataHandler { + SftpErrorStatusDataHandler DEFAULT = new SftpErrorStatusDataHandler() { + @Override + public String toString() { + return SftpErrorStatusDataHandler.class.getSimpleName() + "[DEFAULT]"; + } + }; + + /** + * @param sftpSubsystem The SFTP subsystem instance + * @param id The command identifier + * @param e Thrown exception + * @param cmd The command that was attempted + * @param args The relevant command arguments - <B>Note:</B> provided only for + * <U>logging</U> purposes and subject to type and/or order change at any version + * @return The relevant sub-status to send as failure indication for the failed command + * @see SftpHelper#resolveSubstatus(Throwable) + */ + default int resolveSubStatus(SftpSubsystemEnvironment sftpSubsystem, int id, Throwable e, int cmd, Object... args) { + return SftpHelper.resolveSubstatus(e); + } + + /** + * @param sftpSubsystem The SFTP subsystem instance + * @param id The command identifier + * @param e Thrown exception + * @param subStatus The sub-status code obtained from invocation of + * {@link #resolveSubStatus(SftpSubsystemEnvironment, int, Throwable, int, Object...) resolveSubStatus} + * @param cmd The command that was attempted + * @param args The relevant command arguments - <B>Note:</B> provided only for + * <U>logging</U> purposes and subject to type and/or order change at any version + * @return The human readable text message that explains the failure reason + * @see SftpHelper#resolveStatusMessage(int) + */ + default String resolveErrorMessage( + SftpSubsystemEnvironment sftpSubsystem, int id, Throwable e, int subStatus, int cmd, Object... args) { + return SftpHelper.resolveStatusMessage(subStatus); + } + + /** + * @param sftpSubsystem The SFTP subsystem instance + * @param id The command identifier + * @param e Thrown exception + * @param subStatus The sub-status code obtained from invocation of + * {@link #resolveSubStatus(SftpSubsystemEnvironment, int, Throwable, int, Object...) resolveSubStatus} + * @param cmd The command that was attempted + * @param args The relevant command arguments - <B>Note:</B> provided only for + * <U>logging</U> purposes and subject to type and/or order change at any version + * @return The error message language tag - recommend returning empty string + */ + default String resolveErrorLanguage( + SftpSubsystemEnvironment sftpSubsystem, int id, Throwable e, int subStatus, int cmd, Object... args) { + return ""; + } +}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/2529a4c3/sshd-core/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpFileSystemAccessor.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpFileSystemAccessor.java b/sshd-core/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpFileSystemAccessor.java index 8d4499e..86aa670 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpFileSystemAccessor.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpFileSystemAccessor.java @@ -30,14 +30,36 @@ import java.nio.file.Files; import java.nio.file.OpenOption; import java.nio.file.Path; import java.nio.file.attribute.FileAttribute; +import java.util.Collections; +import java.util.List; +import java.util.Map; import java.util.Set; +import org.apache.sshd.common.util.GenericUtils; +import org.apache.sshd.common.util.io.FileInfoExtractor; import org.apache.sshd.server.session.ServerSession; /** * @author <a href="mailto:d...@mina.apache.org">Apache MINA SSHD Project</a> */ public interface SftpFileSystemAccessor { + List<String> DEFAULT_UNIX_VIEW = Collections.singletonList("unix:*"); + + /** + * A {@link Map} of {@link FileInfoExtractor}s to be used to complete + * attributes that are deemed important enough to warrant an extra + * effort if not accessible via the file system attributes views + */ + Map<String, FileInfoExtractor<?>> FILEATTRS_RESOLVERS = + GenericUtils.<String, FileInfoExtractor<?>>mapBuilder(String.CASE_INSENSITIVE_ORDER) + .put("isRegularFile", FileInfoExtractor.ISREG) + .put("isDirectory", FileInfoExtractor.ISDIR) + .put("isSymbolicLink", FileInfoExtractor.ISSYMLINK) + .put("permissions", FileInfoExtractor.PERMISSIONS) + .put("size", FileInfoExtractor.SIZE) + .put("lastModifiedTime", FileInfoExtractor.LASTMODIFIED) + .immutable(); + SftpFileSystemAccessor DEFAULT = new SftpFileSystemAccessor() { @Override public String toString() {