You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

209 lines
7.6 KiB

7 years ago
  1. # Copyright (C) 2003-2007 Robey Pointer <robeypointer@gmail.com>
  2. #
  3. # This file is part of paramiko.
  4. #
  5. # Paramiko is free software; you can redistribute it and/or modify it under the
  6. # terms of the GNU Lesser General Public License as published by the Free
  7. # Software Foundation; either version 2.1 of the License, or (at your option)
  8. # any later version.
  9. #
  10. # Paramiko is distributed in the hope that it will be useful, but WITHOUT ANY
  11. # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
  12. # A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
  13. # details.
  14. #
  15. # You should have received a copy of the GNU Lesser General Public License
  16. # along with Paramiko; if not, write to the Free Software Foundation, Inc.,
  17. # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  18. """
  19. Common constants and global variables.
  20. """
  21. import logging
  22. from paramiko.py3compat import byte_chr, PY2, bytes_types, text_type, long
  23. MSG_DISCONNECT, MSG_IGNORE, MSG_UNIMPLEMENTED, MSG_DEBUG, \
  24. MSG_SERVICE_REQUEST, MSG_SERVICE_ACCEPT = range(1, 7)
  25. MSG_KEXINIT, MSG_NEWKEYS = range(20, 22)
  26. MSG_USERAUTH_REQUEST, MSG_USERAUTH_FAILURE, MSG_USERAUTH_SUCCESS, \
  27. MSG_USERAUTH_BANNER = range(50, 54)
  28. MSG_USERAUTH_PK_OK = 60
  29. MSG_USERAUTH_INFO_REQUEST, MSG_USERAUTH_INFO_RESPONSE = range(60, 62)
  30. MSG_USERAUTH_GSSAPI_RESPONSE, MSG_USERAUTH_GSSAPI_TOKEN = range(60, 62)
  31. MSG_USERAUTH_GSSAPI_EXCHANGE_COMPLETE, MSG_USERAUTH_GSSAPI_ERROR,\
  32. MSG_USERAUTH_GSSAPI_ERRTOK, MSG_USERAUTH_GSSAPI_MIC = range(63, 67)
  33. MSG_GLOBAL_REQUEST, MSG_REQUEST_SUCCESS, MSG_REQUEST_FAILURE = range(80, 83)
  34. MSG_CHANNEL_OPEN, MSG_CHANNEL_OPEN_SUCCESS, MSG_CHANNEL_OPEN_FAILURE, \
  35. MSG_CHANNEL_WINDOW_ADJUST, MSG_CHANNEL_DATA, MSG_CHANNEL_EXTENDED_DATA, \
  36. MSG_CHANNEL_EOF, MSG_CHANNEL_CLOSE, MSG_CHANNEL_REQUEST, \
  37. MSG_CHANNEL_SUCCESS, MSG_CHANNEL_FAILURE = range(90, 101)
  38. cMSG_DISCONNECT = byte_chr(MSG_DISCONNECT)
  39. cMSG_IGNORE = byte_chr(MSG_IGNORE)
  40. cMSG_UNIMPLEMENTED = byte_chr(MSG_UNIMPLEMENTED)
  41. cMSG_DEBUG = byte_chr(MSG_DEBUG)
  42. cMSG_SERVICE_REQUEST = byte_chr(MSG_SERVICE_REQUEST)
  43. cMSG_SERVICE_ACCEPT = byte_chr(MSG_SERVICE_ACCEPT)
  44. cMSG_KEXINIT = byte_chr(MSG_KEXINIT)
  45. cMSG_NEWKEYS = byte_chr(MSG_NEWKEYS)
  46. cMSG_USERAUTH_REQUEST = byte_chr(MSG_USERAUTH_REQUEST)
  47. cMSG_USERAUTH_FAILURE = byte_chr(MSG_USERAUTH_FAILURE)
  48. cMSG_USERAUTH_SUCCESS = byte_chr(MSG_USERAUTH_SUCCESS)
  49. cMSG_USERAUTH_BANNER = byte_chr(MSG_USERAUTH_BANNER)
  50. cMSG_USERAUTH_PK_OK = byte_chr(MSG_USERAUTH_PK_OK)
  51. cMSG_USERAUTH_INFO_REQUEST = byte_chr(MSG_USERAUTH_INFO_REQUEST)
  52. cMSG_USERAUTH_INFO_RESPONSE = byte_chr(MSG_USERAUTH_INFO_RESPONSE)
  53. cMSG_USERAUTH_GSSAPI_RESPONSE = byte_chr(MSG_USERAUTH_GSSAPI_RESPONSE)
  54. cMSG_USERAUTH_GSSAPI_TOKEN = byte_chr(MSG_USERAUTH_GSSAPI_TOKEN)
  55. cMSG_USERAUTH_GSSAPI_EXCHANGE_COMPLETE = \
  56. byte_chr(MSG_USERAUTH_GSSAPI_EXCHANGE_COMPLETE)
  57. cMSG_USERAUTH_GSSAPI_ERROR = byte_chr(MSG_USERAUTH_GSSAPI_ERROR)
  58. cMSG_USERAUTH_GSSAPI_ERRTOK = byte_chr(MSG_USERAUTH_GSSAPI_ERRTOK)
  59. cMSG_USERAUTH_GSSAPI_MIC = byte_chr(MSG_USERAUTH_GSSAPI_MIC)
  60. cMSG_GLOBAL_REQUEST = byte_chr(MSG_GLOBAL_REQUEST)
  61. cMSG_REQUEST_SUCCESS = byte_chr(MSG_REQUEST_SUCCESS)
  62. cMSG_REQUEST_FAILURE = byte_chr(MSG_REQUEST_FAILURE)
  63. cMSG_CHANNEL_OPEN = byte_chr(MSG_CHANNEL_OPEN)
  64. cMSG_CHANNEL_OPEN_SUCCESS = byte_chr(MSG_CHANNEL_OPEN_SUCCESS)
  65. cMSG_CHANNEL_OPEN_FAILURE = byte_chr(MSG_CHANNEL_OPEN_FAILURE)
  66. cMSG_CHANNEL_WINDOW_ADJUST = byte_chr(MSG_CHANNEL_WINDOW_ADJUST)
  67. cMSG_CHANNEL_DATA = byte_chr(MSG_CHANNEL_DATA)
  68. cMSG_CHANNEL_EXTENDED_DATA = byte_chr(MSG_CHANNEL_EXTENDED_DATA)
  69. cMSG_CHANNEL_EOF = byte_chr(MSG_CHANNEL_EOF)
  70. cMSG_CHANNEL_CLOSE = byte_chr(MSG_CHANNEL_CLOSE)
  71. cMSG_CHANNEL_REQUEST = byte_chr(MSG_CHANNEL_REQUEST)
  72. cMSG_CHANNEL_SUCCESS = byte_chr(MSG_CHANNEL_SUCCESS)
  73. cMSG_CHANNEL_FAILURE = byte_chr(MSG_CHANNEL_FAILURE)
  74. # for debugging:
  75. MSG_NAMES = {
  76. MSG_DISCONNECT: 'disconnect',
  77. MSG_IGNORE: 'ignore',
  78. MSG_UNIMPLEMENTED: 'unimplemented',
  79. MSG_DEBUG: 'debug',
  80. MSG_SERVICE_REQUEST: 'service-request',
  81. MSG_SERVICE_ACCEPT: 'service-accept',
  82. MSG_KEXINIT: 'kexinit',
  83. MSG_NEWKEYS: 'newkeys',
  84. 30: 'kex30',
  85. 31: 'kex31',
  86. 32: 'kex32',
  87. 33: 'kex33',
  88. 34: 'kex34',
  89. 40: 'kex40',
  90. 41: 'kex41',
  91. MSG_USERAUTH_REQUEST: 'userauth-request',
  92. MSG_USERAUTH_FAILURE: 'userauth-failure',
  93. MSG_USERAUTH_SUCCESS: 'userauth-success',
  94. MSG_USERAUTH_BANNER: 'userauth--banner',
  95. MSG_USERAUTH_PK_OK: 'userauth-60(pk-ok/info-request)',
  96. MSG_USERAUTH_INFO_RESPONSE: 'userauth-info-response',
  97. MSG_GLOBAL_REQUEST: 'global-request',
  98. MSG_REQUEST_SUCCESS: 'request-success',
  99. MSG_REQUEST_FAILURE: 'request-failure',
  100. MSG_CHANNEL_OPEN: 'channel-open',
  101. MSG_CHANNEL_OPEN_SUCCESS: 'channel-open-success',
  102. MSG_CHANNEL_OPEN_FAILURE: 'channel-open-failure',
  103. MSG_CHANNEL_WINDOW_ADJUST: 'channel-window-adjust',
  104. MSG_CHANNEL_DATA: 'channel-data',
  105. MSG_CHANNEL_EXTENDED_DATA: 'channel-extended-data',
  106. MSG_CHANNEL_EOF: 'channel-eof',
  107. MSG_CHANNEL_CLOSE: 'channel-close',
  108. MSG_CHANNEL_REQUEST: 'channel-request',
  109. MSG_CHANNEL_SUCCESS: 'channel-success',
  110. MSG_CHANNEL_FAILURE: 'channel-failure',
  111. MSG_USERAUTH_GSSAPI_RESPONSE: 'userauth-gssapi-response',
  112. MSG_USERAUTH_GSSAPI_TOKEN: 'userauth-gssapi-token',
  113. MSG_USERAUTH_GSSAPI_EXCHANGE_COMPLETE: 'userauth-gssapi-exchange-complete',
  114. MSG_USERAUTH_GSSAPI_ERROR: 'userauth-gssapi-error',
  115. MSG_USERAUTH_GSSAPI_ERRTOK: 'userauth-gssapi-error-token',
  116. MSG_USERAUTH_GSSAPI_MIC: 'userauth-gssapi-mic'
  117. }
  118. # authentication request return codes:
  119. AUTH_SUCCESSFUL, AUTH_PARTIALLY_SUCCESSFUL, AUTH_FAILED = range(3)
  120. # channel request failed reasons:
  121. (OPEN_SUCCEEDED,
  122. OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED,
  123. OPEN_FAILED_CONNECT_FAILED,
  124. OPEN_FAILED_UNKNOWN_CHANNEL_TYPE,
  125. OPEN_FAILED_RESOURCE_SHORTAGE) = range(0, 5)
  126. CONNECTION_FAILED_CODE = {
  127. 1: 'Administratively prohibited',
  128. 2: 'Connect failed',
  129. 3: 'Unknown channel type',
  130. 4: 'Resource shortage'
  131. }
  132. DISCONNECT_SERVICE_NOT_AVAILABLE, DISCONNECT_AUTH_CANCELLED_BY_USER, \
  133. DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE = 7, 13, 14
  134. zero_byte = byte_chr(0)
  135. one_byte = byte_chr(1)
  136. four_byte = byte_chr(4)
  137. max_byte = byte_chr(0xff)
  138. cr_byte = byte_chr(13)
  139. linefeed_byte = byte_chr(10)
  140. crlf = cr_byte + linefeed_byte
  141. if PY2:
  142. cr_byte_value = cr_byte
  143. linefeed_byte_value = linefeed_byte
  144. else:
  145. cr_byte_value = 13
  146. linefeed_byte_value = 10
  147. def asbytes(s):
  148. """Coerce to bytes if possible or return unchanged."""
  149. if isinstance(s, bytes_types):
  150. return s
  151. if isinstance(s, text_type):
  152. # Accept text and encode as utf-8 for compatibility only.
  153. return s.encode("utf-8")
  154. asbytes = getattr(s, "asbytes", None)
  155. if asbytes is not None:
  156. return asbytes()
  157. # May be an object that implements the buffer api, let callers handle.
  158. return s
  159. xffffffff = long(0xffffffff)
  160. x80000000 = long(0x80000000)
  161. o666 = 438
  162. o660 = 432
  163. o644 = 420
  164. o600 = 384
  165. o777 = 511
  166. o700 = 448
  167. o70 = 56
  168. DEBUG = logging.DEBUG
  169. INFO = logging.INFO
  170. WARNING = logging.WARNING
  171. ERROR = logging.ERROR
  172. CRITICAL = logging.CRITICAL
  173. # Common IO/select/etc sleep period, in seconds
  174. io_sleep = 0.01
  175. DEFAULT_WINDOW_SIZE = 64 * 2 ** 15
  176. DEFAULT_MAX_PACKET_SIZE = 2 ** 15
  177. # lower bound on the max packet size we'll accept from the remote host
  178. # Minimum packet size is 32768 bytes according to
  179. # http://www.ietf.org/rfc/rfc4254.txt
  180. MIN_WINDOW_SIZE = 2 ** 15
  181. # However, according to http://www.ietf.org/rfc/rfc4253.txt it is perfectly
  182. # legal to accept a size much smaller, as OpenSSH client does as size 16384.
  183. MIN_PACKET_SIZE = 2 ** 12
  184. # Max windows size according to http://www.ietf.org/rfc/rfc4254.txt
  185. MAX_WINDOW_SIZE = 2 ** 32 - 1

Powered by TurnKey Linux.