1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 """
20 Common constants and global variables.
21 """
22
23 MSG_DISCONNECT, MSG_IGNORE, MSG_UNIMPLEMENTED, MSG_DEBUG, MSG_SERVICE_REQUEST, \
24 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 HIGHEST_USERAUTH_MESSAGE_ID = 79
31 MSG_GLOBAL_REQUEST, MSG_REQUEST_SUCCESS, MSG_REQUEST_FAILURE = range(80, 83)
32 MSG_CHANNEL_OPEN, MSG_CHANNEL_OPEN_SUCCESS, MSG_CHANNEL_OPEN_FAILURE, \
33 MSG_CHANNEL_WINDOW_ADJUST, MSG_CHANNEL_DATA, MSG_CHANNEL_EXTENDED_DATA, \
34 MSG_CHANNEL_EOF, MSG_CHANNEL_CLOSE, MSG_CHANNEL_REQUEST, \
35 MSG_CHANNEL_SUCCESS, MSG_CHANNEL_FAILURE = range(90, 101)
36
37
38
39 MSG_NAMES = {
40 MSG_DISCONNECT: 'disconnect',
41 MSG_IGNORE: 'ignore',
42 MSG_UNIMPLEMENTED: 'unimplemented',
43 MSG_DEBUG: 'debug',
44 MSG_SERVICE_REQUEST: 'service-request',
45 MSG_SERVICE_ACCEPT: 'service-accept',
46 MSG_KEXINIT: 'kexinit',
47 MSG_NEWKEYS: 'newkeys',
48 30: 'kex30',
49 31: 'kex31',
50 32: 'kex32',
51 33: 'kex33',
52 34: 'kex34',
53 MSG_USERAUTH_REQUEST: 'userauth-request',
54 MSG_USERAUTH_FAILURE: 'userauth-failure',
55 MSG_USERAUTH_SUCCESS: 'userauth-success',
56 MSG_USERAUTH_BANNER: 'userauth--banner',
57 MSG_USERAUTH_PK_OK: 'userauth-60(pk-ok/info-request)',
58 MSG_USERAUTH_INFO_RESPONSE: 'userauth-info-response',
59 MSG_GLOBAL_REQUEST: 'global-request',
60 MSG_REQUEST_SUCCESS: 'request-success',
61 MSG_REQUEST_FAILURE: 'request-failure',
62 MSG_CHANNEL_OPEN: 'channel-open',
63 MSG_CHANNEL_OPEN_SUCCESS: 'channel-open-success',
64 MSG_CHANNEL_OPEN_FAILURE: 'channel-open-failure',
65 MSG_CHANNEL_WINDOW_ADJUST: 'channel-window-adjust',
66 MSG_CHANNEL_DATA: 'channel-data',
67 MSG_CHANNEL_EXTENDED_DATA: 'channel-extended-data',
68 MSG_CHANNEL_EOF: 'channel-eof',
69 MSG_CHANNEL_CLOSE: 'channel-close',
70 MSG_CHANNEL_REQUEST: 'channel-request',
71 MSG_CHANNEL_SUCCESS: 'channel-success',
72 MSG_CHANNEL_FAILURE: 'channel-failure'
73 }
74
75
76
77 AUTH_SUCCESSFUL, AUTH_PARTIALLY_SUCCESSFUL, AUTH_FAILED = range(3)
78
79
80
81 (OPEN_SUCCEEDED,
82 OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED,
83 OPEN_FAILED_CONNECT_FAILED,
84 OPEN_FAILED_UNKNOWN_CHANNEL_TYPE,
85 OPEN_FAILED_RESOURCE_SHORTAGE) = range(0, 5)
86
87
88 CONNECTION_FAILED_CODE = {
89 1: 'Administratively prohibited',
90 2: 'Connect failed',
91 3: 'Unknown channel type',
92 4: 'Resource shortage'
93 }
94
95
96 DISCONNECT_SERVICE_NOT_AVAILABLE, DISCONNECT_AUTH_CANCELLED_BY_USER, \
97 DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE = 7, 13, 14
98
99 from Crypto import Random
100
101
102 rng = Random.new()
103
104 import sys
105 if sys.version_info < (2, 3):
106 try:
107 import logging
108 except:
109 import logging22 as logging
110 import select
111 PY22 = True
112
113 import socket
114 if not hasattr(socket, 'timeout'):
116 socket.timeout = timeout
117 del timeout
118 else:
119 import logging
120 PY22 = False
121
122
123 DEBUG = logging.DEBUG
124 INFO = logging.INFO
125 WARNING = logging.WARNING
126 ERROR = logging.ERROR
127 CRITICAL = logging.CRITICAL
128
129
130 io_sleep = 0.01
131