Package org.apache.sshd.sftp.common
Class SftpHelper
- java.lang.Object
-
- org.apache.sshd.sftp.common.SftpHelper
-
public final class SftpHelper extends java.lang.Object
-
-
Field Summary
Fields Modifier and Type Field Description static java.util.Map<java.lang.Integer,java.lang.String>DEFAULT_SUBSTATUS_MESSAGEprivate static java.util.regex.PatternUNIX_PERMISSIONS_START
-
Constructor Summary
Constructors Modifier Constructor Description privateSftpHelper()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static intattributesToPermissions(boolean isReg, boolean isDir, boolean isLnk, java.util.Collection<java.nio.file.attribute.PosixFilePermission> perms)Converts a file / folder's attributes into a maskstatic java.nio.file.attribute.AclEntrybuildAclEntry(int aclType, int aclFlag, int aclMask, java.lang.String aclWho)static SftpClient.Attributescomplete(SftpClient.Attributes attrs, java.lang.String longName)Fills in missing information in the attributes if an SFTP v3 long name is available.static java.nio.file.attribute.AclEntryTypedecodeAclEntryType(int aclType)static java.util.Set<java.nio.file.attribute.AclEntryFlag>decodeAclFlags(int aclFlag)static java.util.Set<java.nio.file.attribute.AclEntryPermission>decodeAclMask(int aclMask)static java.util.List<java.nio.file.attribute.AclEntry>decodeACLs(Buffer buffer, int version)static intencodeAclEntryType(java.nio.file.attribute.AclEntryType type)Returns the equivalent SFTP value for the ACL typestatic longencodeAclFlags(java.util.Collection<java.nio.file.attribute.AclEntryFlag> flags)static longencodeAclMask(java.util.Collection<java.nio.file.attribute.AclEntryPermission> mask)static <B extends Buffer>
BencodeACLs(B buffer, int version, java.util.Collection<java.nio.file.attribute.AclEntry> acl)static intfileTypeFromChar(char ch)Converts a POSIX/Linux file type indicator (as if obtained by "ls -l") to a file type.static intfileTypeToPermission(int type)Converts a file type into a POSIX permission mask valuestatic booleangetBool(java.lang.Boolean bool)static java.lang.BooleangetEndOfFileIndicatorValue(Buffer buffer, int version)Retrieves the end-of-file indicator forSSH_FXP_DATAresponses, provided the version is at least 6, and the buffer has enough available datastatic java.lang.BooleangetEndOfListIndicatorValue(Buffer buffer, int version)Retrieves the end-of-list indicator forSSH_FXP_NAMEresponses, provided the version is at least 6, and the buffer has enough available datastatic java.lang.StringgetLongName(java.lang.String shortName, java.util.Map<java.lang.String,?> attributes)Creates an "ls -l" compatible long name stringstatic java.lang.BooleanindicateEndOfNamesList(Buffer buffer, int version, PropertyResolver resolver)Appends the end-of-list=TRUEindicator forSSH_FXP_NAMEresponses, provided the version is at least 6 and the feature is enabledstatic java.lang.BooleanindicateEndOfNamesList(Buffer buffer, int version, PropertyResolver resolver, boolean indicatorValue)Appends the end-of-list indicator forSSH_FXP_NAMEresponses, provided the version is at least 6, the feature is enabled and the indicator value is notnullprivate static booleanisUnixPermissions(java.lang.String longName)static java.util.Set<java.nio.file.attribute.PosixFilePermission>permissionsToAttributes(int perms)Translates a mask of permissions into its enumeration values equivalentsstatic intpermissionsToFileType(int perms)Converts a POSIX permissions mask to a file type valuestatic java.util.List<java.nio.file.attribute.AclEntry>readACLs(Buffer buffer, int version)static java.util.NavigableMap<java.lang.String,java.lang.Object>readAttrs(Buffer buffer, int version)static java.util.NavigableMap<java.lang.String,byte[]>readExtensions(Buffer buffer)static java.nio.file.attribute.FileTimereadTime(Buffer buffer, int version, int flags)Decodes aFileTimevalue from a bufferstatic java.lang.StringresolveStatusMessage(int subStatus)static intresolveSubstatus(java.lang.Throwable t)Returns the most adequate sub-status for the provided exceptionstatic java.util.NavigableMap<java.lang.String,byte[]>toBinaryExtensions(java.util.Map<java.lang.String,java.lang.String> extensions)static java.util.NavigableMap<java.lang.String,java.lang.String>toStringExtensions(java.util.Map<java.lang.String,?> extensions)static <B extends Buffer>
BwriteAclEntry(B buffer, java.nio.file.attribute.AclEntry acl)static <B extends Buffer>
BwriteACLs(B buffer, int version, java.util.Collection<java.nio.file.attribute.AclEntry> acl)static <B extends Buffer>
BwriteAttributes(B buffer, SftpClient.Attributes attributes, int sftpVersion)static <B extends Buffer>
BwriteAttrs(B buffer, int version, java.util.Map<java.lang.String,?> attributes)Writes a file / folder's attributes to a bufferstatic <B extends Buffer>
BwriteAttrsV3(B buffer, int version, java.util.Map<java.lang.String,?> attributes)Writes the retrieved file / directory attributes in V3 formatstatic <B extends Buffer>
BwriteAttrsV4(B buffer, int version, java.util.Map<java.lang.String,?> attributes)Writes the retrieved file / directory attributes in V4+ formatstatic <B extends Buffer>
BwriteExtensions(B buffer, java.util.Map<?,?> extensions)static <B extends Buffer>
BwriteTime(B buffer, int version, int flags, java.nio.file.attribute.FileTime time)Encodes aFileTimevalue into a buffer
-
-
-
Method Detail
-
getEndOfFileIndicatorValue
public static java.lang.Boolean getEndOfFileIndicatorValue(Buffer buffer, int version)
Retrieves the end-of-file indicator forSSH_FXP_DATAresponses, provided the version is at least 6, and the buffer has enough available data- Parameters:
buffer- TheBufferto retrieve the data fromversion- The SFTP version being used- Returns:
- The indicator value -
nullif none retrieved - See Also:
- SFTP v6 - section 9.3
-
getEndOfListIndicatorValue
public static java.lang.Boolean getEndOfListIndicatorValue(Buffer buffer, int version)
Retrieves the end-of-list indicator forSSH_FXP_NAMEresponses, provided the version is at least 6, and the buffer has enough available data- Parameters:
buffer- TheBufferto retrieve the data fromversion- The SFTP version being used- Returns:
- The indicator value -
nullif none retrieved - See Also:
- SFTP v6 - section
9.4,
indicateEndOfNamesList(Buffer, int, PropertyResolver, boolean)
-
indicateEndOfNamesList
public static java.lang.Boolean indicateEndOfNamesList(Buffer buffer, int version, PropertyResolver resolver)
Appends the end-of-list=TRUEindicator forSSH_FXP_NAMEresponses, provided the version is at least 6 and the feature is enabled- Parameters:
buffer- TheBufferto append the indicatorversion- The SFTP version being usedresolver- ThePropertyResolverto query whether to enable the feature- Returns:
- The actual indicator value used -
nullif none appended - See Also:
indicateEndOfNamesList(Buffer, int, PropertyResolver, boolean)
-
indicateEndOfNamesList
public static java.lang.Boolean indicateEndOfNamesList(Buffer buffer, int version, PropertyResolver resolver, boolean indicatorValue)
Appends the end-of-list indicator forSSH_FXP_NAMEresponses, provided the version is at least 6, the feature is enabled and the indicator value is notnull- Parameters:
buffer- TheBufferto append the indicatorversion- The SFTP version being usedresolver- ThePropertyResolverto query whether to enable the featureindicatorValue- The indicator value -nullmeans don't append the indicator- Returns:
- The actual indicator value used -
nullif none appended - See Also:
- SFTP v6 -
section 9.4,
SftpModuleProperties.APPEND_END_OF_LIST_INDICATOR
-
writeAttrs
public static <B extends Buffer> B writeAttrs(B buffer, int version, java.util.Map<java.lang.String,?> attributes)
Writes a file / folder's attributes to a buffer- Type Parameters:
B- Type ofBufferbeing updated- Parameters:
buffer- The target buffer instanceversion- The output encoding versionattributes- TheMapof attributes- Returns:
- The updated buffer
- See Also:
writeAttrsV3(Buffer, int, Map),writeAttrsV4(Buffer, int, Map)
-
writeAttrsV3
public static <B extends Buffer> B writeAttrsV3(B buffer, int version, java.util.Map<java.lang.String,?> attributes)
Writes the retrieved file / directory attributes in V3 format- Type Parameters:
B- Type ofBufferbeing updated- Parameters:
buffer- The target buffer instanceversion- The actual version - must beSftpConstants.SFTP_V3attributes- TheMapof attributes- Returns:
- The updated buffer
-
writeAttrsV4
public static <B extends Buffer> B writeAttrsV4(B buffer, int version, java.util.Map<java.lang.String,?> attributes)
Writes the retrieved file / directory attributes in V4+ format- Type Parameters:
B- Type ofBufferbeing updated- Parameters:
buffer- The target buffer instanceversion- The actual version - must be at leastSftpConstants.SFTP_V4attributes- TheMapof attributes- Returns:
- The updated buffer
-
writeAttributes
public static <B extends Buffer> B writeAttributes(B buffer, SftpClient.Attributes attributes, int sftpVersion)
-
getBool
public static boolean getBool(java.lang.Boolean bool)
- Parameters:
bool- TheBooleanvalue- Returns:
trueit the argument is non-nulland itsBoolean.booleanValue()istrue
-
attributesToPermissions
public static int attributesToPermissions(boolean isReg, boolean isDir, boolean isLnk, java.util.Collection<java.nio.file.attribute.PosixFilePermission> perms)Converts a file / folder's attributes into a mask- Parameters:
isReg-trueif this is a normal fileisDir-trueif this is a directoryisLnk-trueif this is a symbolic linkperms- The file / folder's accessPosixFilePermissions- Returns:
- A mask encoding the file / folder's attributes
-
permissionsToFileType
public static int permissionsToFileType(int perms)
Converts a POSIX permissions mask to a file type value- Parameters:
perms- The POSIX permissions mask- Returns:
- The file type - see
SSH_FILEXFER_TYPE_xxxvalues
-
fileTypeToPermission
public static int fileTypeToPermission(int type)
Converts a file type into a POSIX permission mask value- Parameters:
type- File type - seeSSH_FILEXFER_TYPE_xxxvalues- Returns:
- The matching POSIX permission mask value
-
fileTypeFromChar
public static int fileTypeFromChar(char ch)
Converts a POSIX/Linux file type indicator (as if obtained by "ls -l") to a file type.- Parameters:
ch- character to convert- Returns:
- the file type
-
complete
public static SftpClient.Attributes complete(SftpClient.Attributes attrs, java.lang.String longName)
Fills in missing information in the attributes if an SFTP v3 long name is available. If missing information cannot be extracted from the long name, it is not filled in, but no error or exception is generated.The SFTP draft RFC discourages parsing a long name to extract information and states the attributes should be used instead. But some SFTP v3 servers do not send all information in the attributes... for instance the SolarWinds SFTP server on Windows does not include the file type flags in the permissions. The only way to determine the file type is then to look at the permissions string in the long name.
- Parameters:
attrs-SftpClient.Attributesto complete, if necessarylongName- to use to find missing information, may benullor empty.- Returns:
attrs
-
isUnixPermissions
private static boolean isUnixPermissions(java.lang.String longName)
-
permissionsToAttributes
public static java.util.Set<java.nio.file.attribute.PosixFilePermission> permissionsToAttributes(int perms)
Translates a mask of permissions into its enumeration values equivalents- Parameters:
perms- The permissions mask- Returns:
- A
Setof the equivalentPosixFilePermissions
-
resolveSubstatus
public static int resolveSubstatus(java.lang.Throwable t)
Returns the most adequate sub-status for the provided exception- Parameters:
t- The thrownThrowable- Returns:
- The matching sub-status
-
resolveStatusMessage
public static java.lang.String resolveStatusMessage(int subStatus)
-
readAttrs
public static java.util.NavigableMap<java.lang.String,java.lang.Object> readAttrs(Buffer buffer, int version)
-
readExtensions
public static java.util.NavigableMap<java.lang.String,byte[]> readExtensions(Buffer buffer)
-
writeExtensions
public static <B extends Buffer> B writeExtensions(B buffer, java.util.Map<?,?> extensions)
-
toStringExtensions
public static java.util.NavigableMap<java.lang.String,java.lang.String> toStringExtensions(java.util.Map<java.lang.String,?> extensions)
-
toBinaryExtensions
public static java.util.NavigableMap<java.lang.String,byte[]> toBinaryExtensions(java.util.Map<java.lang.String,java.lang.String> extensions)
-
readACLs
public static java.util.List<java.nio.file.attribute.AclEntry> readACLs(Buffer buffer, int version)
-
decodeACLs
public static java.util.List<java.nio.file.attribute.AclEntry> decodeACLs(Buffer buffer, int version)
-
buildAclEntry
public static java.nio.file.attribute.AclEntry buildAclEntry(int aclType, int aclFlag, int aclMask, java.lang.String aclWho)
-
decodeAclEntryType
public static java.nio.file.attribute.AclEntryType decodeAclEntryType(int aclType)
- Parameters:
aclType- TheACE4_ACCESS_xxx_ACE_TYPEvalue- Returns:
- The matching
AclEntryTypeornullif unknown value
-
decodeAclFlags
public static java.util.Set<java.nio.file.attribute.AclEntryFlag> decodeAclFlags(int aclFlag)
-
decodeAclMask
public static java.util.Set<java.nio.file.attribute.AclEntryPermission> decodeAclMask(int aclMask)
-
writeACLs
public static <B extends Buffer> B writeACLs(B buffer, int version, java.util.Collection<java.nio.file.attribute.AclEntry> acl)
-
encodeACLs
public static <B extends Buffer> B encodeACLs(B buffer, int version, java.util.Collection<java.nio.file.attribute.AclEntry> acl)
-
writeAclEntry
public static <B extends Buffer> B writeAclEntry(B buffer, java.nio.file.attribute.AclEntry acl)
-
encodeAclEntryType
public static int encodeAclEntryType(java.nio.file.attribute.AclEntryType type)
Returns the equivalent SFTP value for the ACL type- Parameters:
type- TheAclEntryType- Returns:
- The equivalent
ACE_SYSTEM_xxx_TYPEor negative ifnullor unknown type
-
encodeAclFlags
public static long encodeAclFlags(java.util.Collection<java.nio.file.attribute.AclEntryFlag> flags)
-
encodeAclMask
public static long encodeAclMask(java.util.Collection<java.nio.file.attribute.AclEntryPermission> mask)
-
writeTime
public static <B extends Buffer> B writeTime(B buffer, int version, int flags, java.nio.file.attribute.FileTime time)
Encodes aFileTimevalue into a buffer- Type Parameters:
B- Type ofBufferbeing updated- Parameters:
buffer- The target buffer instanceversion- The encoding versionflags- The encoding flagstime- The value to encode- Returns:
- The updated buffer
-
readTime
public static java.nio.file.attribute.FileTime readTime(Buffer buffer, int version, int flags)
Decodes aFileTimevalue from a buffer- Parameters:
buffer- The sourceBufferversion- The encoding versionflags- The encoding flags- Returns:
- The decoded value
-
getLongName
public static java.lang.String getLongName(java.lang.String shortName, java.util.Map<java.lang.String,?> attributes)Creates an "ls -l" compatible long name string- Parameters:
shortName- The short file name - can also be "." or ".."attributes- The file's attributes - e.g., size, owner, permissions, etc.- Returns:
- A
Stringrepresenting the "long" file name as per SFTP version 3 - section 7
-
-