364 lines
13 KiB
Python
364 lines
13 KiB
Python
# Copyright (c) 2013-2021 by Ron Frederick <ronf@timeheart.net> and others.
|
|
#
|
|
# This program and the accompanying materials are made available under
|
|
# the terms of the Eclipse Public License v2.0 which accompanies this
|
|
# distribution and is available at:
|
|
#
|
|
# http://www.eclipse.org/legal/epl-2.0/
|
|
#
|
|
# This program may also be made available under the following secondary
|
|
# licenses when the conditions for such availability set forth in the
|
|
# Eclipse Public License v2.0 are satisfied:
|
|
#
|
|
# GNU General Public License, Version 2.0, or any later versions of
|
|
# that license
|
|
#
|
|
# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
|
|
#
|
|
# Contributors:
|
|
# Ron Frederick - initial implementation, API, and documentation
|
|
|
|
"""SSH constants"""
|
|
|
|
# Default language for error messages
|
|
DEFAULT_LANG = 'en-US'
|
|
|
|
# Default SSH listening port
|
|
DEFAULT_PORT = 22
|
|
|
|
# SSH message codes
|
|
MSG_DISCONNECT = 1
|
|
MSG_IGNORE = 2
|
|
MSG_UNIMPLEMENTED = 3
|
|
MSG_DEBUG = 4
|
|
MSG_SERVICE_REQUEST = 5
|
|
MSG_SERVICE_ACCEPT = 6
|
|
MSG_EXT_INFO = 7
|
|
|
|
MSG_KEXINIT = 20
|
|
MSG_NEWKEYS = 21
|
|
|
|
MSG_KEX_FIRST = 30
|
|
MSG_KEX_LAST = 49
|
|
|
|
MSG_USERAUTH_REQUEST = 50
|
|
MSG_USERAUTH_FAILURE = 51
|
|
MSG_USERAUTH_SUCCESS = 52
|
|
MSG_USERAUTH_BANNER = 53
|
|
|
|
MSG_USERAUTH_FIRST = 60
|
|
MSG_USERAUTH_LAST = 79
|
|
|
|
MSG_GLOBAL_REQUEST = 80
|
|
MSG_REQUEST_SUCCESS = 81
|
|
MSG_REQUEST_FAILURE = 82
|
|
|
|
MSG_CHANNEL_OPEN = 90
|
|
MSG_CHANNEL_OPEN_CONFIRMATION = 91
|
|
MSG_CHANNEL_OPEN_FAILURE = 92
|
|
|
|
MSG_CHANNEL_WINDOW_ADJUST = 93
|
|
MSG_CHANNEL_DATA = 94
|
|
MSG_CHANNEL_EXTENDED_DATA = 95
|
|
MSG_CHANNEL_EOF = 96
|
|
MSG_CHANNEL_CLOSE = 97
|
|
MSG_CHANNEL_REQUEST = 98
|
|
MSG_CHANNEL_SUCCESS = 99
|
|
MSG_CHANNEL_FAILURE = 100
|
|
|
|
# Messages 90-92 are excluded here as they relate to opening a new channel
|
|
MSG_CHANNEL_FIRST = 93
|
|
MSG_CHANNEL_LAST = 127
|
|
|
|
# SSH disconnect reason codes
|
|
DISC_HOST_NOT_ALLOWED_TO_CONNECT = 1
|
|
DISC_PROTOCOL_ERROR = 2
|
|
DISC_KEY_EXCHANGE_FAILED = 3
|
|
DISC_RESERVED = 4
|
|
DISC_MAC_ERROR = 5
|
|
DISC_COMPRESSION_ERROR = 6
|
|
DISC_SERVICE_NOT_AVAILABLE = 7
|
|
DISC_PROTOCOL_VERSION_NOT_SUPPORTED = 8
|
|
DISC_HOST_KEY_NOT_VERIFIABLE = 9
|
|
DISC_CONNECTION_LOST = 10
|
|
DISC_BY_APPLICATION = 11
|
|
DISC_TOO_MANY_CONNECTIONS = 12
|
|
DISC_AUTH_CANCELLED_BY_USER = 13
|
|
DISC_NO_MORE_AUTH_METHODS_AVAILABLE = 14
|
|
DISC_ILLEGAL_USER_NAME = 15
|
|
|
|
DISC_HOST_KEY_NOT_VERIFYABLE = 9 # Error in naming, left here to not
|
|
# break backward compatibility
|
|
|
|
# SSH channel open failure reason codes
|
|
OPEN_ADMINISTRATIVELY_PROHIBITED = 1
|
|
OPEN_CONNECT_FAILED = 2
|
|
OPEN_UNKNOWN_CHANNEL_TYPE = 3
|
|
OPEN_RESOURCE_SHORTAGE = 4
|
|
|
|
# Internal failure reason codes
|
|
OPEN_REQUEST_X11_FORWARDING_FAILED = 0xfffffffd
|
|
OPEN_REQUEST_PTY_FAILED = 0xfffffffe
|
|
OPEN_REQUEST_SESSION_FAILED = 0xffffffff
|
|
|
|
# SFTPv3-v5 packet types
|
|
FXP_INIT = 1
|
|
FXP_VERSION = 2
|
|
FXP_OPEN = 3
|
|
FXP_CLOSE = 4
|
|
FXP_READ = 5
|
|
FXP_WRITE = 6
|
|
FXP_LSTAT = 7
|
|
FXP_FSTAT = 8
|
|
FXP_SETSTAT = 9
|
|
FXP_FSETSTAT = 10
|
|
FXP_OPENDIR = 11
|
|
FXP_READDIR = 12
|
|
FXP_REMOVE = 13
|
|
FXP_MKDIR = 14
|
|
FXP_RMDIR = 15
|
|
FXP_REALPATH = 16
|
|
FXP_STAT = 17
|
|
FXP_RENAME = 18
|
|
FXP_READLINK = 19
|
|
FXP_SYMLINK = 20
|
|
FXP_STATUS = 101
|
|
FXP_HANDLE = 102
|
|
FXP_DATA = 103
|
|
FXP_NAME = 104
|
|
FXP_ATTRS = 105
|
|
FXP_EXTENDED = 200
|
|
FXP_EXTENDED_REPLY = 201
|
|
|
|
# SFTPv6 packet types
|
|
FXP_LINK = 21
|
|
FXP_BLOCK = 22
|
|
FXP_UNBLOCK = 23
|
|
|
|
# SFTPv3 open flags
|
|
FXF_READ = 0x00000001
|
|
FXF_WRITE = 0x00000002
|
|
FXF_APPEND = 0x00000004
|
|
FXF_CREAT = 0x00000008
|
|
FXF_TRUNC = 0x00000010
|
|
FXF_EXCL = 0x00000020
|
|
|
|
# SFTPv4 open flags
|
|
FXF_TEXT = 0x00000040
|
|
|
|
# SFTPv5 open flags
|
|
FXF_ACCESS_DISPOSITION = 0x00000007
|
|
FXF_CREATE_NEW = 0x00000000
|
|
FXF_CREATE_TRUNCATE = 0x00000001
|
|
FXF_OPEN_EXISTING = 0x00000002
|
|
FXF_OPEN_OR_CREATE = 0x00000003
|
|
FXF_TRUNCATE_EXISTING = 0x00000004
|
|
FXF_APPEND_DATA = 0x00000008
|
|
FXF_APPEND_DATA_ATOMIC = 0x00000010
|
|
FXF_TEXT_MODE = 0x00000020
|
|
FXF_BLOCK_READ = 0x00000040
|
|
FXF_BLOCK_WRITE = 0x00000080
|
|
FXF_BLOCK_DELETE = 0x00000100
|
|
|
|
# SFTPv6 open flags
|
|
FXF_BLOCK_ADVISORY = 0x00000200
|
|
FXF_NOFOLLOW = 0x00000400
|
|
FXF_DELETE_ON_CLOSE = 0x00000800
|
|
FXF_ACCESS_AUDIT_ALARM_INFO = 0x00001000
|
|
FXF_ACCESS_BACKUP = 0x00002000
|
|
FXF_BACKUP_STREAM = 0x00004000
|
|
FXF_OVERRIDE_OWNER = 0x00008000
|
|
|
|
# SFTPv5-v6 ACE mask values used in desired-access
|
|
ACE4_READ_DATA = 0x00000001
|
|
ACE4_WRITE_DATA = 0x00000002
|
|
ACE4_APPEND_DATA = 0x00000004
|
|
ACE4_READ_ATTRIBUTES = 0x00000080
|
|
ACE4_WRITE_ATTRIBUTES = 0x00000100
|
|
|
|
# SFTPv3 attribute flags
|
|
FILEXFER_ATTR_SIZE = 0x00000001
|
|
FILEXFER_ATTR_UIDGID = 0x00000002
|
|
FILEXFER_ATTR_PERMISSIONS = 0x00000004
|
|
FILEXFER_ATTR_ACMODTIME = 0x00000008
|
|
FILEXFER_ATTR_EXTENDED = 0x80000000
|
|
FILEXFER_ATTR_DEFINED_V3 = 0x8000000f
|
|
|
|
# SFTPv4 attribute flags
|
|
FILEXFER_ATTR_ACCESSTIME = 0x00000008
|
|
FILEXFER_ATTR_CREATETIME = 0x00000010
|
|
FILEXFER_ATTR_MODIFYTIME = 0x00000020
|
|
FILEXFER_ATTR_ACL = 0x00000040
|
|
FILEXFER_ATTR_OWNERGROUP = 0x00000080
|
|
FILEXFER_ATTR_SUBSECOND_TIMES = 0x00000100
|
|
FILEXFER_ATTR_DEFINED_V4 = 0x800001fd
|
|
|
|
# SFTPv5 attribute flags
|
|
FILEXFER_ATTR_BITS = 0x00000200
|
|
FILEXFER_ATTR_DEFINED_V5 = 0x800003fd
|
|
|
|
# SFTPv6 attribute flags
|
|
FILEXFER_ATTR_ALLOCATION_SIZE = 0x00000400
|
|
FILEXFER_ATTR_TEXT_HINT = 0x00000800
|
|
FILEXFER_ATTR_MIME_TYPE = 0x00001000
|
|
FILEXFER_ATTR_LINK_COUNT = 0x00002000
|
|
FILEXFER_ATTR_UNTRANSLATED_NAME = 0x00004000
|
|
FILEXFER_ATTR_CTIME = 0x00008000
|
|
FILEXFER_ATTR_DEFINED_V6 = 0x8000fffd
|
|
|
|
# SFTPv4 file types
|
|
FILEXFER_TYPE_REGULAR = 1
|
|
FILEXFER_TYPE_DIRECTORY = 2
|
|
FILEXFER_TYPE_SYMLINK = 3
|
|
FILEXFER_TYPE_SPECIAL = 4
|
|
FILEXFER_TYPE_UNKNOWN = 5
|
|
|
|
# SFTPv5 file types
|
|
FILEXFER_TYPE_SOCKET = 6
|
|
FILEXFER_TYPE_CHAR_DEVICE = 7
|
|
FILEXFER_TYPE_BLOCK_DEVICE = 8
|
|
FILEXFER_TYPE_FIFO = 9
|
|
|
|
# SFTPv5 attrib bits
|
|
FILEXFER_ATTR_BITS_READONLY = 0x00000001
|
|
FILEXFER_ATTR_BITS_SYSTEM = 0x00000002
|
|
FILEXFER_ATTR_BITS_HIDDEN = 0x00000004
|
|
FILEXFER_ATTR_BITS_CASE_INSENSITIVE = 0x00000008
|
|
FILEXFER_ATTR_BITS_ARCHIVE = 0x00000010
|
|
FILEXFER_ATTR_BITS_ENCRYPTED = 0x00000020
|
|
FILEXFER_ATTR_BITS_COMPRESSED = 0x00000040
|
|
FILEXFER_ATTR_BITS_SPARSE = 0x00000080
|
|
FILEXFER_ATTR_BITS_APPEND_ONLY = 0x00000100
|
|
FILEXFER_ATTR_BITS_IMMUTABLE = 0x00000200
|
|
FILEXFER_ATTR_BITS_SYNC = 0x00000400
|
|
|
|
# SFTPv6 attrib bits
|
|
FILEXFER_ATTR_BITS_TRANSLATION_ERR = 0x00000800
|
|
|
|
# SFTPv6 text hint flags
|
|
FILEXFER_ATTR_KNOWN_TEXT = 0
|
|
FILEXFER_ATTR_GUESSED_TEXT = 1
|
|
FILEXFER_ATTR_KNOWN_BINARY = 2
|
|
FILEXFER_ATTR_GUESSED_BINARY = 3
|
|
|
|
# SFTPv5 rename flags
|
|
FXR_OVERWRITE = 0x00000001
|
|
FXR_ATOMIC = 0x00000002
|
|
FXR_NATIVE = 0x00000004
|
|
|
|
# SFTPv6 realpath control byte
|
|
FXRP_NO_CHECK = 1
|
|
FXRP_STAT_IF_EXISTS = 2
|
|
FXRP_STAT_ALWAYS = 3
|
|
|
|
# OpenSSH statvfs attribute flags
|
|
FXE_STATVFS_ST_RDONLY = 0x1
|
|
FXE_STATVFS_ST_NOSUID = 0x2
|
|
|
|
# SFTPv3 error codes
|
|
FX_OK = 0
|
|
FX_EOF = 1
|
|
FX_NO_SUCH_FILE = 2
|
|
FX_PERMISSION_DENIED = 3
|
|
FX_FAILURE = 4
|
|
FX_BAD_MESSAGE = 5
|
|
FX_NO_CONNECTION = 6
|
|
FX_CONNECTION_LOST = 7
|
|
FX_OP_UNSUPPORTED = 8
|
|
FX_V3_END = FX_OP_UNSUPPORTED
|
|
|
|
# SFTPv4 error codes
|
|
FX_INVALID_HANDLE = 9
|
|
FX_NO_SUCH_PATH = 10
|
|
FX_FILE_ALREADY_EXISTS = 11
|
|
FX_WRITE_PROTECT = 12
|
|
FX_NO_MEDIA = 13
|
|
FX_V4_END = FX_NO_MEDIA
|
|
|
|
# SFTPv5 error codes
|
|
FX_NO_SPACE_ON_FILESYSTEM = 14
|
|
FX_QUOTA_EXCEEDED = 15
|
|
FX_UNKNOWN_PRINCIPAL = 16
|
|
FX_LOCK_CONFLICT = 17
|
|
FX_V5_END = FX_LOCK_CONFLICT
|
|
|
|
# SFTPv6 error codes
|
|
FX_DIR_NOT_EMPTY = 18
|
|
FX_NOT_A_DIRECTORY = 19
|
|
FX_INVALID_FILENAME = 20
|
|
FX_LINK_LOOP = 21
|
|
FX_CANNOT_DELETE = 22
|
|
FX_INVALID_PARAMETER = 23
|
|
FX_FILE_IS_A_DIRECTORY = 24
|
|
FX_BYTE_RANGE_LOCK_CONFLICT = 25
|
|
FX_BYTE_RANGE_LOCK_REFUSED = 26
|
|
FX_DELETE_PENDING = 27
|
|
FX_FILE_CORRUPT = 28
|
|
FX_OWNER_INVALID = 29
|
|
FX_GROUP_INVALID = 30
|
|
FX_NO_MATCHING_BYTE_RANGE_LOCK = 31
|
|
FX_V6_END = FX_NO_MATCHING_BYTE_RANGE_LOCK
|
|
|
|
# SSH channel data type codes
|
|
EXTENDED_DATA_STDERR = 1
|
|
|
|
# SSH pty mode opcodes
|
|
PTY_OP_END = 0
|
|
PTY_VINTR = 1
|
|
PTY_VQUIT = 2
|
|
PTY_VERASE = 3
|
|
PTY_VKILL = 4
|
|
PTY_VEOF = 5
|
|
PTY_VEOL = 6
|
|
PTY_VEOL2 = 7
|
|
PTY_VSTART = 8
|
|
PTY_VSTOP = 9
|
|
PTY_VSUSP = 10
|
|
PTY_VDSUSP = 11
|
|
PTY_VREPRINT = 12
|
|
PTY_WERASE = 13
|
|
PTY_VLNEXT = 14
|
|
PTY_VFLUSH = 15
|
|
PTY_VSWTCH = 16
|
|
PTY_VSTATUS = 17
|
|
PTY_VDISCARD = 18
|
|
PTY_IGNPAR = 30
|
|
PTY_PARMRK = 31
|
|
PTY_INPCK = 32
|
|
PTY_ISTRIP = 33
|
|
PTY_INLCR = 34
|
|
PTY_IGNCR = 35
|
|
PTY_ICRNL = 36
|
|
PTY_IUCLC = 37
|
|
PTY_IXON = 38
|
|
PTY_IXANY = 39
|
|
PTY_IXOFF = 40
|
|
PTY_IMAXBEL = 41
|
|
PTY_IUTF8 = 42
|
|
PTY_ISIG = 50
|
|
PTY_ICANON = 51
|
|
PTY_XCASE = 52
|
|
PTY_ECHO = 53
|
|
PTY_ECHOE = 54
|
|
PTY_ECHOK = 55
|
|
PTY_ECHONL = 56
|
|
PTY_NOFLSH = 57
|
|
PTY_TOSTOP = 58
|
|
PTY_IEXTEN = 59
|
|
PTY_ECHOCTL = 60
|
|
PTY_ECHOKE = 61
|
|
PTY_PENDIN = 62
|
|
PTY_OPOST = 70
|
|
PTY_OLCUC = 71
|
|
PTY_ONLCR = 72
|
|
PTY_OCRNL = 73
|
|
PTY_ONOCR = 74
|
|
PTY_ONLRET = 75
|
|
PTY_CS7 = 90
|
|
PTY_CS8 = 91
|
|
PTY_PARENB = 92
|
|
PTY_PARODD = 93
|
|
PTY_OP_ISPEED = 128
|
|
PTY_OP_OSPEED = 129
|
|
PTY_OP_RESERVED = 160
|