net-tns 1.1.1 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/{tns_sid_enumeration.rb → tns_sid_probing.rb} +5 -3
- data/lib/net/tns/client.rb +3 -1
- data/lib/net/tns/connection.rb +7 -2
- data/lib/net/tns/gem_version.rb +1 -1
- data/lib/net/tns/packet.rb +1 -1
- data/lib/net/tns/packets/connect_packet.rb +1 -1
- data/lib/net/tti/capabilities.rb +40 -0
- data/lib/net/tti/client.rb +14 -6
- data/lib/net/tti/connection.rb +16 -6
- data/lib/net/tti/data_types/chunked_string.rb +1 -0
- data/lib/net/tti/data_types/flags.rb +36 -0
- data/lib/net/tti/data_types/key_value_pair.rb +14 -14
- data/lib/net/tti/exceptions.rb +6 -0
- data/lib/net/tti/message.rb +2 -2
- data/lib/net/tti/messages/data_type_negotiation_request.rb +50 -99
- data/lib/net/tti/messages/error_message.rb +10 -3
- data/lib/net/tti/messages/function_calls/authentication.rb +53 -20
- data/lib/net/tti/messages/function_calls/pre_authentication_response.rb +3 -2
- data/lib/net/tti/messages/protocol_negotiation_request.rb +3 -3
- data/lib/net/tti/messages/protocol_negotiation_response.rb +38 -27
- metadata +6 -6
- data/lib/net/tti/messages/function_calls/authentication_x64.rb +0 -42
- data/lib/net/tti/messages/function_calls/authentication_x86.rb +0 -53
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: abd5c0ddbf15b9a4e4c3c37795d88dfc92357a45
|
4
|
+
data.tar.gz: 83401b9ffebe9ad974a918443196f5bf1493b9a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0b363f8c3c8fb3a156e33f695d7b1220f296b809c787d9e25c66da3ff6ece1706138586fb01219280980e1efce901141dc4460876503631b718aa6a0fd8d34d
|
7
|
+
data.tar.gz: f943432ae2af1f05f1f2b7f9e66c53416ba585d99f5fdb63d30158dd3a1302aa6e1150e164738d8bdb221a34f531229dbec95b24e4ecc3eb7469a9adc743a18e
|
data/lib/net/tns/client.rb
CHANGED
@@ -47,7 +47,7 @@ module Net
|
|
47
47
|
begin
|
48
48
|
conn = Connection.new(opts)
|
49
49
|
conn.open_socket()
|
50
|
-
request = ConnectPacket.new(:data => "(CONNECT_DATA=(COMMAND=STATUS))")
|
50
|
+
request = ConnectPacket.new(:data => "(CONNECT_DATA=(COMMAND=STATUS)(VERSION=186647552))")
|
51
51
|
|
52
52
|
status_response_raw = ""
|
53
53
|
begin
|
@@ -58,6 +58,8 @@ module Net
|
|
58
58
|
# a data length that is greater than the available data.
|
59
59
|
end
|
60
60
|
|
61
|
+
response = conn.send_and_receive(ResendPacket.new())
|
62
|
+
status_response_raw += response.data
|
61
63
|
# Successful responses are typically spread across multiple Data packets.
|
62
64
|
while ( response = conn.receive_tns_packet() )
|
63
65
|
break unless response.is_a?(DataPacket)
|
data/lib/net/tns/connection.rb
CHANGED
@@ -5,6 +5,7 @@ module Net
|
|
5
5
|
module TNS
|
6
6
|
class Connection
|
7
7
|
attr_reader :tns_protocol_version
|
8
|
+
attr_reader :tns_sdu
|
8
9
|
|
9
10
|
def initialize(opts={})
|
10
11
|
@socket = nil
|
@@ -75,11 +76,15 @@ module Net
|
|
75
76
|
end
|
76
77
|
|
77
78
|
response = send_and_receive(connect_packet)
|
78
|
-
unless response.is_a?(AcceptPacket)
|
79
|
+
unless response.is_a?(AcceptPacket) || response.is_a?(RedirectPacket)
|
79
80
|
raise Exceptions::ProtocolException.new("Unexpected response to Connect packet: #{response.class}")
|
80
81
|
end
|
81
|
-
|
82
|
+
if response.is_a?(RedirectPacket)
|
83
|
+
# CLR extproc on 12c will end up here
|
84
|
+
return
|
85
|
+
end
|
82
86
|
@tns_protocol_version = response.version.to_i
|
87
|
+
@tns_sdu = response.sdu_size.to_i
|
83
88
|
negotiate_ano()
|
84
89
|
end
|
85
90
|
|
data/lib/net/tns/gem_version.rb
CHANGED
data/lib/net/tns/packet.rb
CHANGED
@@ -9,7 +9,7 @@ module Net
|
|
9
9
|
uint16be :minimum_version, :initial_value => Net::TNS::Version::ALL_VERSIONS.min
|
10
10
|
uint16be :service_flags
|
11
11
|
# session data unit size
|
12
|
-
uint16be :sdu_size, :initial_value =>
|
12
|
+
uint16be :sdu_size, :initial_value => Net::TNS::Packet::SESSION_DATA_UNIT_SIZE
|
13
13
|
# maximum transmission data unit size
|
14
14
|
uint16be :maximum_tdu_size, :initial_value => 0x7fff
|
15
15
|
uint16be :protocol_flags, :initial_value => 0xc608
|
@@ -0,0 +1,40 @@
|
|
1
|
+
|
2
|
+
module Net
|
3
|
+
module TTI
|
4
|
+
class Capabilities
|
5
|
+
def initialize(caps_bytes=[])
|
6
|
+
@caps_bytes = caps_bytes
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.from_byte_array(bytes)
|
10
|
+
Capabilities.new(bytes)
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.from_binary_string(string)
|
14
|
+
Capabilities.new( string.unpack("C*") )
|
15
|
+
end
|
16
|
+
|
17
|
+
def [](index)
|
18
|
+
@caps_bytes[index]
|
19
|
+
end
|
20
|
+
|
21
|
+
def []=(index, value)
|
22
|
+
@caps_bytes[index] = value
|
23
|
+
end
|
24
|
+
|
25
|
+
def length
|
26
|
+
@caps_bytes.length
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_binary_s
|
30
|
+
@caps_bytes.pack("C*")
|
31
|
+
end
|
32
|
+
|
33
|
+
# Returns hexified bytes, delimited by spaces
|
34
|
+
# e.g. [0x01,0x41,0x81,0xa1] -> "01 41 81 a1"
|
35
|
+
def to_hexified_s
|
36
|
+
to_binary_s.scan(/../).join(" ")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/net/tti/client.rb
CHANGED
@@ -56,8 +56,9 @@ module Net
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def get_pre_auth_request(username)
|
59
|
-
pre_auth_request = Authentication.create_pre_auth_request(
|
59
|
+
pre_auth_request = Authentication.create_pre_auth_request()
|
60
60
|
pre_auth_request.username = username
|
61
|
+
pre_auth_request.add_parameter("AUTH_TERMINAL", "unknown")
|
61
62
|
return pre_auth_request
|
62
63
|
end
|
63
64
|
|
@@ -68,17 +69,24 @@ module Net
|
|
68
69
|
when Net::TNS::Version::VERSION_10G
|
69
70
|
enc_password, enc_client_session_key = Net::TTI::Crypto.get_10g_auth_values( username, password, auth_sesskey )
|
70
71
|
when Net::TNS::Version::VERSION_11G
|
71
|
-
|
72
|
-
|
72
|
+
case auth_sesskey.length
|
73
|
+
when 32
|
74
|
+
enc_password, enc_client_session_key = Net::TTI::Crypto.get_10g_auth_values( username, password, auth_sesskey )
|
75
|
+
when 48
|
76
|
+
auth_vfr_data = pre_auth_response.auth_vfr_data
|
77
|
+
enc_password, enc_client_session_key = Net::TTI::Crypto.get_11g_auth_values( password, auth_sesskey, auth_vfr_data )
|
78
|
+
else
|
79
|
+
raise Exceptions::ProtocolException.new("Unexpected AUTH_SESSKEY length #{auth_sesskey.length}")
|
80
|
+
end
|
73
81
|
else
|
74
82
|
raise Exceptions::UnsupportedTNSVersion.new( @tti_conn.conn_params.tns_version )
|
75
83
|
end
|
76
84
|
|
77
|
-
auth_request = Authentication.create_auth_request(
|
85
|
+
auth_request = Authentication.create_auth_request()
|
78
86
|
auth_request.username = username
|
79
|
-
auth_request.enc_client_session_key = enc_client_session_key
|
80
87
|
auth_request.enc_password = enc_password
|
81
|
-
|
88
|
+
auth_request.enc_client_session_key = enc_client_session_key
|
89
|
+
auth_request.add_parameter("AUTH_TERMINAL", "unknown")
|
82
90
|
return auth_request
|
83
91
|
end
|
84
92
|
|
data/lib/net/tti/connection.rb
CHANGED
@@ -7,13 +7,23 @@ module Net
|
|
7
7
|
attr_accessor :platform
|
8
8
|
attr_accessor :architecture
|
9
9
|
attr_accessor :ttc_version
|
10
|
+
attr_accessor :ttc_server
|
10
11
|
attr_accessor :tns_version
|
12
|
+
attr_accessor :character_set
|
13
|
+
attr_accessor :server_flags
|
14
|
+
attr_accessor :server_compiletime_capabilities
|
15
|
+
attr_accessor :server_runtime_capabilities
|
11
16
|
|
12
17
|
def to_s
|
13
18
|
return "Platform: #{@platform||nil}" +
|
14
19
|
"; Architecture: #{@architecture||nil}" +
|
15
|
-
";
|
16
|
-
";
|
20
|
+
"; TNS Version: #{@tns_version||nil}" +
|
21
|
+
"; TTC server version: #{@ttc_version||nil}" +
|
22
|
+
"; TTC server string: #{@ttc_server||nil}" +
|
23
|
+
"; Server character set: #{@character_set||nil}" +
|
24
|
+
"; Server flags: #{@server_flags||nil}" +
|
25
|
+
"; Server Compiletime Capabilities: #{@server_compiletime_capabilities.to_hexified_s}" +
|
26
|
+
"; Server Runtime Capabilities: #{@server_runtime_capabilities.to_hexified_s}"
|
17
27
|
end
|
18
28
|
end
|
19
29
|
|
@@ -39,7 +49,7 @@ module Net
|
|
39
49
|
proto_nego_response.populate_connection_parameters( @conn_params )
|
40
50
|
|
41
51
|
Net::TTI.logger.debug("Sending data type negotiation request")
|
42
|
-
dt_nego_request = DataTypeNegotiationRequest.create_request( @conn_params
|
52
|
+
dt_nego_request = DataTypeNegotiationRequest.create_request( @conn_params )
|
43
53
|
dt_nego_response_raw = send_and_receive( dt_nego_request )
|
44
54
|
|
45
55
|
return nil
|
@@ -61,7 +71,7 @@ module Net
|
|
61
71
|
Net::TTI.logger.debug( "Connection#send_tti_message called with #{raw_message.length}-byte #{tti_message.class} message" )
|
62
72
|
|
63
73
|
# Split the message into multiple packets if necessary
|
64
|
-
max_data =
|
74
|
+
max_data = @tns_connection.tns_sdu - 12 # 12 = 10 (HEADER) + 2 (FLAGS)
|
65
75
|
raw_message.scan(/.{1,#{max_data}}/m).each do |raw_message_part|
|
66
76
|
tns_packet = Net::TNS::DataPacket.new()
|
67
77
|
tns_packet.data = raw_message_part
|
@@ -79,7 +89,7 @@ module Net
|
|
79
89
|
while ( true )
|
80
90
|
receive_count += 1
|
81
91
|
if ( receive_count >= 3 )
|
82
|
-
raise Exceptions::
|
92
|
+
raise Exceptions::ProtocolException.new( "Maximum receive attempts exceeded - too many Markers received." )
|
83
93
|
end
|
84
94
|
|
85
95
|
Net::TTI.logger.debug("Attempting to receive packet (try ##{receive_count})")
|
@@ -90,7 +100,7 @@ module Net
|
|
90
100
|
# carried into an additional packet. We wouldn't need to do this if
|
91
101
|
# we could fully parse every message (or at least know lengths to
|
92
102
|
# read). I'm looking at you, DataTypeNegotiationResponse.
|
93
|
-
if tns_packet.num_bytes >
|
103
|
+
if @tns_connection.tns_protocol_version <= 313 && tns_packet.num_bytes > 1900
|
94
104
|
begin
|
95
105
|
max_message_length -= message_data.length
|
96
106
|
message_data += receive_tti_message(waiting_for_error_message, max_message_length)
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require "bindata"
|
2
|
+
|
3
|
+
module Net
|
4
|
+
module TTI
|
5
|
+
module DataTypes
|
6
|
+
class Flags < BinData::Primitive
|
7
|
+
uint8 :value_length
|
8
|
+
choice :flag_value, :selection => :value_length do
|
9
|
+
virtual 0, :value => 0
|
10
|
+
uint8 1
|
11
|
+
uint16be 2
|
12
|
+
uint32be 4
|
13
|
+
end
|
14
|
+
|
15
|
+
def get
|
16
|
+
self.flag_value.to_i
|
17
|
+
end
|
18
|
+
|
19
|
+
def set(new_value)
|
20
|
+
if new_value > 0xffff
|
21
|
+
self.value_length = 4
|
22
|
+
self.flag_value = new_value
|
23
|
+
elsif new_value > 0xff
|
24
|
+
self.value_length = 2
|
25
|
+
self.flag_value = new_value
|
26
|
+
elsif new_value > 0
|
27
|
+
self.value_length = 1
|
28
|
+
self.flag_value = new_value
|
29
|
+
else
|
30
|
+
self.value_length = 0
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -1,24 +1,24 @@
|
|
1
1
|
require "bindata"
|
2
2
|
require "net/tti/data_types/chunked_string"
|
3
|
+
require "net/tti/data_types/flags"
|
3
4
|
|
4
5
|
module Net
|
5
6
|
module TTI
|
6
7
|
module DataTypes
|
7
8
|
class KeyValuePair < BinData::Record
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
chunked_string :
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
end
|
9
|
+
# Follows (simplified) format used by JDBC driver; other clients send
|
10
|
+
# KVPs with a longer, more opaque structure (e.g. each chunked string
|
11
|
+
# was preceded by a 4-byte value that, in earlier dialects appeared to
|
12
|
+
# contain the total length of the string, but in later dialects did not
|
13
|
+
# seem related to string length at all).
|
14
|
+
uint8 :unknown1, :initial_value => 0x01 # size in bytes of kvp_key_length OR boolean
|
15
|
+
uint8 :kvp_key_length, :onlyif => lambda {unknown1 != 0x00}, :value => lambda {kvp_key.length}
|
16
|
+
chunked_string :kvp_key, :onlyif => lambda {unknown1 != 0x00 && kvp_key_length != 0x00}
|
17
|
+
uint8 :unknown2, :initial_value => 0x01 # size in bytes of kvp_value_length
|
18
|
+
uint8 :kvp_value_length, :onlyif => lambda {unknown2 != 0x00}, :value => lambda {kvp_value.length}
|
19
|
+
chunked_string :kvp_value, :onlyif => lambda {unknown2 != 0x00 && kvp_value_length != 0x00}
|
20
|
+
# flags are used when AUTH_SESSKEY and AUTH_ALTER_SESSION are sent to the server
|
21
|
+
flags :flags
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
data/lib/net/tti/exceptions.rb
CHANGED
@@ -9,6 +9,12 @@ module Net::TTI
|
|
9
9
|
class UnsupportedTarget < TTIException
|
10
10
|
end
|
11
11
|
|
12
|
+
class UnsupportedArchitecture < TTIException
|
13
|
+
def initialize( architecture )
|
14
|
+
super( "Unsupported architecture: #{architecture}" )
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
12
18
|
class UnsupportedPlatform < UnsupportedTarget
|
13
19
|
def initialize( platform )
|
14
20
|
super( "Unsupported platform: #{platform}" )
|
data/lib/net/tti/message.rb
CHANGED
@@ -32,8 +32,8 @@ module Net
|
|
32
32
|
|
33
33
|
def self.from_data_string( raw_message )
|
34
34
|
ttc_code = raw_message[0].unpack("C").first
|
35
|
-
|
36
|
-
unless message_class = @@ttc_classes[
|
35
|
+
|
36
|
+
unless message_class = @@ttc_classes[ttc_code]
|
37
37
|
raise Net::TNS::Exceptions::TNSException.new( "Unknown TTC code: #{ttc_code}" )
|
38
38
|
end
|
39
39
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require "net/tti/capabilities"
|
2
|
+
|
1
3
|
module Net
|
2
4
|
module TTI
|
3
5
|
class DataTypeNegotiationRequest < Message
|
@@ -10,115 +12,64 @@ module Net
|
|
10
12
|
# 0x0369 (873) - UTF-8
|
11
13
|
uint16le :charset1
|
12
14
|
uint16le :charset2
|
13
|
-
uint8 :
|
14
|
-
uint8 :
|
15
|
+
uint8 :client_flags
|
16
|
+
uint8 :client_compiletime_capabilities_length, :value => lambda { client_compiletime_capabilities.length }
|
17
|
+
string :client_compiletime_capabilities
|
18
|
+
uint8 :client_runtime_capabilities_length, :value => lambda { client_runtime_capabilities.length }
|
19
|
+
string :client_runtime_capabilities
|
20
|
+
string :unknown1
|
15
21
|
string :unknown2
|
16
|
-
|
17
|
-
string :
|
18
|
-
string :unknown4
|
19
|
-
|
20
|
-
UNKNOWN4_LINUX = (
|
21
|
-
"800000003c3c3c80000000d007000100010001000000020002000a0000000800" +
|
22
|
-
"0800010000000c000c000a000000170017000100000018001800010000001900" +
|
23
|
-
"190018001900010000001a001a0019001a00010000001b001b000a001b000100" +
|
24
|
-
"00001c001c0016001c00010000001d001d0017001d00010000001e001e001700" +
|
25
|
-
"1e00010000001f001f0019001f0001000000200020000a002000010000002100" +
|
26
|
-
"21000a002100010000000a000a00010000000b000b0001000000280028000100" +
|
27
|
-
"0000290029000100000075007500010000007800780001000001220122000100" +
|
28
|
-
"0001230123000101230001000001240124000100000125012500010000012601" +
|
29
|
-
"2600010000012a012a00010000012b012b00010000012c012c00010000012d01" +
|
30
|
-
"2d00010000012e012e00010000012f012f000100000130013000010000013101" +
|
31
|
-
"3100010000013201320001000001330133000100000134013400010000013501" +
|
32
|
-
"3500010000013601360001000001370137000100000138013800010000013901" +
|
33
|
-
"3900010000013b013b00010000013c013c00010000013d013d00010000013e01" +
|
34
|
-
"3e00010000013f013f0001000001400140000100000141014100010000014201" +
|
35
|
-
"4200010000014301430001000001470147000100000148014800010000014901" +
|
36
|
-
"4900010000014b014b00010000014d014d00010000014e014e00010000014f01" +
|
37
|
-
"4f00010000015001500001000001510151000100000152015200010000015301" +
|
38
|
-
"5300010000015401540001000001550155000100000156015600010000015701" +
|
39
|
-
"57000101570001000001580158000100000159015900010000015a015a000100" +
|
40
|
-
"00015c015c00010000015d015d00010000016201620001000001630163000100" +
|
41
|
-
"000167016700010000016b016b00010000017c017c0001014200010000017d01" +
|
42
|
-
"7d00010000017e017e00010000017f017f000100000180018000010000018101" +
|
43
|
-
"8100010000018201820001000001830183000100000184018400010000018501" +
|
44
|
-
"8500010000018601860001000001870187000100000189018900010000018a01" +
|
45
|
-
"8a00010000018b018b00010000018c018c00010000018d018d00010000018e01" +
|
46
|
-
"8e00010000018f018f0001000001900190000100000191019100010000019401" +
|
47
|
-
"9400010125000100000195019500010000019601960001000001970197000100" +
|
48
|
-
"00019d019d00010000019e019e00010000019f019f0001000001a001a0000100" +
|
49
|
-
"0001a101a10001000001a201a20001000001a301a30001000001a401a4000100" +
|
50
|
-
"0001a501a50001000001a601a60001000001a701a70001000001a801a8000100" +
|
51
|
-
"0001a901a90001000001aa01aa0001000001ab01ab0001000001ad01ad000100" +
|
52
|
-
"0001ae01ae0001000001af01af0001000001b001b00001000001b101b1000100" +
|
53
|
-
"0001c101c10001000001c201c2000101250001000001c601c60001000001c701" +
|
54
|
-
"c70001000001c801c80001000001c901c90001000001ca01ca0001019f000100" +
|
55
|
-
"0001cb01cb000101a00001000001cc01cc000101a20001000001cd01cd000101" +
|
56
|
-
"a30001000001ce01ce000101b10001000001cf01cf000101220001000001d201" +
|
57
|
-
"d20001000001d301d3000101ab0001000001d401d40001000001d501d5000100" +
|
58
|
-
"0001d601d60001000001d701d70001000001d801d80001000001d901d9000100" +
|
59
|
-
"0001da01da0001000001db01db0001000001dc01dc0001000001dd01dd000100" +
|
60
|
-
"0001de01de0001000001df01df0001000001e001e00001000001e101e1000100" +
|
61
|
-
"0001e201e20001000001e301e30001016b0001000001e401e40001000001e501" +
|
62
|
-
"e50001000001e601e60001000001ea01ea0001000001eb01eb0001000001ec01" +
|
63
|
-
"ec0001000001ed01ed0001000001ee01ee0001000001ef01ef0001000001f001" +
|
64
|
-
"f00001000001f201f20001000001f301f30001000001f401f40001000001f501" +
|
65
|
-
"f50001000001f601f60001000001fd01fd0001000001fe01fe00010000020102" +
|
66
|
-
"0100010000020202020001000002040204000100000205020500010000020602" +
|
67
|
-
"0600010000020702070001000002080208000100000209020900010000020a02" +
|
68
|
-
"0a00010000020b020b00010000020c020c00010000020d020d00010000020e02" +
|
69
|
-
"0e00010000020f020f0001000002100210000100000211021100010000021202" +
|
70
|
-
"1200010000021302130001000002140214000100000215021500010000021602" +
|
71
|
-
"1600010000021702170001000002180218000100000219021900010000021a02" +
|
72
|
-
"1a00010000021b021b00010000021c021c00010000021d021d00010000021e02" +
|
73
|
-
"1e00010000021f021f0001000002200220000100000221022100010000022202" +
|
74
|
-
"2200010000022302230001000002240224000100000225022500010000022602" +
|
75
|
-
"2600010000022702270001000002280228000100000229022900010000022a02" +
|
76
|
-
"2a00010000022b022b00010000022c022c00010000022d022d00010000022e02" +
|
77
|
-
"2e00010000022f022f0001000002310231000100000232023200010000023302" +
|
78
|
-
"3300010000023402340001000002370237000100000238023800010000023902" +
|
79
|
-
"3900010000023a023a00010000023b023b00010000023c023c00010000023d02" +
|
80
|
-
"3d00010000023e023e00010000023f023f000100000240024000010000024102" +
|
81
|
-
"4100010000024202420001000002430243000100000244024400010000024502" +
|
82
|
-
"4500010000024602460001000002470247000100000248024800010000024902" +
|
83
|
-
"490001000000030002000a000000040002000a00000005000100010000000600" +
|
84
|
-
"02000a000000070002000a00000009000100010000000d0000000e0000000f00" +
|
85
|
-
"1700010000001000000011000000120000001300000014000000150000001600" +
|
86
|
-
"00002700780001015d0001012600010000003a003a0001000000440002000a00" +
|
87
|
-
"000045000000460000004a006d00010000004c0000005b0002000a0000005e00" +
|
88
|
-
"0100010000005f00170001000000600060000100000061006000010000006400" +
|
89
|
-
"6400010000006500650001000000660066000100000068000000690000006a00" +
|
90
|
-
"6a00010000006c006d00010000006d006d00010000006e006f00010000006f00" +
|
91
|
-
"6f00010000007000700001000000710071000100000072007200010000007300" +
|
92
|
-
"7300010000007400660001000000760000007700000079007900010000007a00" +
|
93
|
-
"7a00010000007b007b0001000000880000009200920001000000930093000100" +
|
94
|
-
"0000980002000a000000990002000a0000009a0002000a0000009b0001000100" +
|
95
|
-
"00009c000c000a000000ac0002000a000000b200b20001000000b300b3000100" +
|
96
|
-
"0000b400b40001000000b500b50001000000b600b60001000000b700b7000100" +
|
97
|
-
"0000b8000c000a000000b900b20001000000ba00b30001000000bb00b4000100" +
|
98
|
-
"0000bc00b50001000000bd00b60001000000be00b70001000000bf000000c000" +
|
99
|
-
"0000c300700001000000c400710001000000c500720001000000d000d0000100" +
|
100
|
-
"0000d1000000e700e70001000000e800e70001000000e900e90001000000f100" +
|
101
|
-
"6d0001000002030203000100000000").tns_unhexify
|
22
|
+
string :dty_body
|
23
|
+
string :fin
|
102
24
|
|
103
25
|
def _ttc_code()
|
104
26
|
TTC_CODE_DATA_TYPE_NEGOTIATION
|
105
27
|
end
|
106
28
|
private :_ttc_code
|
107
29
|
|
108
|
-
def self.create_request(
|
30
|
+
def self.create_request(conn_params)
|
109
31
|
request = self.new
|
110
|
-
request.character_set =
|
111
|
-
request.
|
112
|
-
|
113
|
-
|
32
|
+
request.character_set = conn_params.character_set
|
33
|
+
request.client_flags = conn_params.server_flags
|
34
|
+
|
35
|
+
client_ct_caps = Capabilities.from_binary_string( "060100000a0101060101010101010029900307030001004f013704010000000c000006000383".tns_unhexify )
|
36
|
+
client_rt_caps = Capabilities.from_binary_string( "02010000000001".tns_unhexify )
|
37
|
+
|
38
|
+
if(conn_params.server_runtime_capabilities.length <=1 or conn_params.server_runtime_capabilities[1] & 1 != 1)
|
39
|
+
client_rt_caps[1] &= 254
|
40
|
+
end
|
41
|
+
|
42
|
+
if(conn_params.server_compiletime_capabilities.length <= 37 or conn_params.server_compiletime_capabilities[37] & 2 != 2)
|
43
|
+
client_rt_caps[1] &= 254
|
44
|
+
client_ct_caps[37] &= 253
|
45
|
+
end
|
46
|
+
|
47
|
+
if(conn_params.server_compiletime_capabilities.length <= 27 or conn_params.server_compiletime_capabilities[27] == 0)
|
48
|
+
client_ct_caps[27] = 0
|
49
|
+
end
|
50
|
+
|
51
|
+
request.client_compiletime_capabilities = client_ct_caps.to_binary_s
|
52
|
+
request.client_runtime_capabilities = client_rt_caps.to_binary_s
|
53
|
+
|
54
|
+
if (client_rt_caps[1] & 1 == 1)
|
55
|
+
request.unknown1 = "800000003c3c8000000000".tns_unhexify
|
56
|
+
if(client_ct_caps[37] & 2 == 2)
|
57
|
+
request.unknown2 = "00000000".tns_unhexify
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
if(conn_params.server_compiletime_capabilities.length <= 7 or conn_params.server_compiletime_capabilities[7] != 5)
|
62
|
+
dty_body_bytes = [0x01, 0x01, 0x01, 0x00, 0x02, 0x02, 0x0a, 0x00, 0x08, 0x08, 0x01, 0x00, 0x0c, 0x0c, 0x0a, 0x00, 0x17, 0x17, 0x01, 0x00, 0x18, 0x18, 0x01, 0x00, 0x19, 0x19, 0x01, 0x00, 0x1a, 0x1a, 0x01, 0x00, 0x1b, 0x1b, 0x01, 0x00, 0x1c, 0x1c, 0x01, 0x00, 0x1d, 0x1d, 0x01, 0x00, 0x1e, 0x1e, 0x01, 0x00, 0x1f, 0x1f, 0x01, 0x00, 0x20, 0x20, 0x01, 0x00, 0x21, 0x21, 0x01, 0x00, 0x0a, 0x0a, 0x01, 0x00, 0xb, 0xb, 0x01, 0x00, 0x28, 0x28, 0x01, 0x00, 0x29, 0x29, 0x01, 0x00, 0x75, 0x75, 0x01, 0x00, 0x78, 0x78, 0x01, 0x00, 0x122, 0x122, 0x01, 0x00, 0x123, 0x123, 0x01, 0x00, 0x124, 0x124, 0x01, 0x00, 0x125, 0x125, 0x01, 0x00, 0x126, 0x126, 0x01, 0x00, 0x12a, 0x12a, 0x01, 0x00, 0x12b, 0x12b, 0x01, 0x00, 0x12c, 0x12c, 0x01, 0x00, 0x12d, 0x12d, 0x01, 0x00, 0x12e, 0x12e, 0x01, 0x00, 0x12f, 0x12f, 0x01, 0x00, 0x130, 0x130, 0x01, 0x00, 0x131, 0x131, 0x01, 0x00, 0x132, 0x132, 0x01, 0x00, 0x133, 0x133, 0x01, 0x00, 0x134, 0x134, 0x01, 0x00, 0x135, 0x135, 0x01, 0x00, 0x136, 0x136, 0x01, 0x00, 0x137, 0x137, 0x01, 0x00, 0x138, 0x138, 0x01, 0x00, 0x139, 0x139, 0x01, 0x00, 0x13b, 0x13b, 0x01, 0x00, 0x13c, 0x13c, 0x01, 0x00, 0x13d, 0x13d, 0x01, 0x00, 0x13e, 0x13e, 0x01, 0x00, 0x13f, 0x13f, 0x01, 0x00, 0x140, 0x140, 0x01, 0x00, 0x141, 0x141, 0x01, 0x00, 0x142, 0x142, 0x01, 0x00, 0x143, 0x143, 0x01, 0x00, 0x147, 0x147, 0x01, 0x00, 0x148, 0x148, 0x01, 0x00, 0x149, 0x149, 0x01, 0x00, 0x14b, 0x14b, 0x01, 0x00, 0x14d, 0x14d, 0x01, 0x00, 0x14e, 0x14e, 0x01, 0x00, 0x14f, 0x14f, 0x01, 0x00, 0x150, 0x150, 0x01, 0x00, 0x151, 0x151, 0x01, 0x00, 0x152, 0x152, 0x01, 0x00, 0x153, 0x153, 0x01, 0x00, 0x154, 0x154, 0x01, 0x00, 0x155, 0x155, 0x01, 0x00, 0x156, 0x156, 0x01, 0x00, 0x157, 0x157, 0x01, 0x00, 0x158, 0x158, 0x01, 0x00, 0x159, 0x159, 0x01, 0x00, 0x15a, 0x15a, 0x01, 0x00, 0x15c, 0x15c, 0x01, 0x00, 0x15d, 0x15d, 0x01, 0x00, 0x162, 0x162, 0x01, 0x00, 0x163, 0x163, 0x01, 0x00, 0x167, 0x167, 0x01, 0x00, 0x16b, 0x16b, 0x01, 0x00, 0x17c, 0x17c, 0x01, 0x00, 0x17d, 0x17d, 0x01, 0x00, 0x17e, 0x17e, 0x01, 0x00, 0x17f, 0x17f, 0x01, 0x00, 0x180, 0x180, 0x01, 0x00, 0x181, 0x181, 0x01, 0x00, 0x182, 0x182, 0x01, 0x00, 0x183, 0x183, 0x01, 0x00, 0x184, 0x184, 0x01, 0x00, 0x185, 0x185, 0x01, 0x00, 0x186, 0x186, 0x01, 0x00, 0x187, 0x187, 0x01, 0x00, 0x189, 0x189, 0x01, 0x00, 0x18a, 0x18a, 0x01, 0x00, 0x18b, 0x18b, 0x01, 0x00, 0x18c, 0x18c, 0x01, 0x00, 0x18d, 0x18d, 0x01, 0x00, 0x18e, 0x18e, 0x01, 0x00, 0x18f, 0x18f, 0x01, 0x00, 0x190, 0x190, 0x01, 0x00, 0x191, 0x191, 0x01, 0x00, 0x194, 0x194, 0x01, 0x00, 0x195, 0x195, 0x01, 0x00, 0x196, 0x196, 0x01, 0x00, 0x197, 0x197, 0x01, 0x00, 0x19d, 0x19d, 0x01, 0x00, 0x19e, 0x19e, 0x01, 0x00, 0x19f, 0x19f, 0x01, 0x00, 0x1a0, 0x1a0, 0x01, 0x00, 0x1a1, 0x1a1, 0x01, 0x00, 0x1a2, 0x1a2, 0x01, 0x00, 0x1a3, 0x1a3, 0x01, 0x00, 0x1a4, 0x1a4, 0x01, 0x00, 0x1a5, 0x1a5, 0x01, 0x00, 0x1a6, 0x1a6, 0x01, 0x00, 0x1a7, 0x1a7, 0x01, 0x00, 0x1a8, 0x1a8, 0x01, 0x00, 0x1a9, 0x1a9, 0x01, 0x00, 0x1aa, 0x1aa, 0x01, 0x00, 0x1ab, 0x1ab, 0x01, 0x00, 0x1ad, 0x1ad, 0x01, 0x00, 0x1ae, 0x1ae, 0x01, 0x00, 0x1af, 0x1af, 0x01, 0x00, 0x1b0, 0x1b0, 0x01, 0x00, 0x1b1, 0x1b1, 0x01, 0x00, 0x1c1, 0x1c1, 0x01, 0x00, 0x1c2, 0x1c2, 0x01, 0x00, 0x1c6, 0x1c6, 0x01, 0x00, 0x1c7, 0x1c7, 0x01, 0x00, 0x1c8, 0x1c8, 0x01, 0x00, 0x1c9, 0x1c9, 0x01, 0x00, 0x1ca, 0x1ca, 0x01, 0x00, 0x1cb, 0x1cb, 0x01, 0x00, 0x1cc, 0x1cc, 0x01, 0x00, 0x1cd, 0x1cd, 0x01, 0x00, 0x1ce, 0x1ce, 0x01, 0x00, 0x1cf, 0x1cf, 0x01, 0x00, 0x1d2, 0x1d2, 0x01, 0x00, 0x1d3, 0x1d3, 0x01, 0x00, 0x1d4, 0x1d4, 0x01, 0x00, 0x1d5, 0x1d5, 0x01, 0x00, 0x1d6, 0x1d6, 0x01, 0x00, 0x1d7, 0x1d7, 0x01, 0x00, 0x1d8, 0x1d8, 0x01, 0x00, 0x1d9, 0x1d9, 0x01, 0x00, 0x1da, 0x1da, 0x01, 0x00, 0x1db, 0x1db, 0x01, 0x00, 0x1dc, 0x1dc, 0x01, 0x00, 0x1dd, 0x1dd, 0x01, 0x00, 0x1de, 0x1de, 0x01, 0x00, 0x1df, 0x1df, 0x01, 0x00, 0x1e0, 0x1e0, 0x01, 0x00, 0x1e1, 0x1e1, 0x01, 0x00, 0x1e2, 0x1e2, 0x01, 0x00, 0x1e3, 0x1e3, 0x01, 0x00, 0x1e4, 0x1e4, 0x01, 0x00, 0x1e5, 0x1e5, 0x01, 0x00, 0x1e6, 0x1e6, 0x01, 0x00, 0x1ea, 0x1ea, 0x01, 0x00, 0x1eb, 0x1eb, 0x01, 0x00, 0x1ec, 0x1ec, 0x01, 0x00, 0x1ed, 0x1ed, 0x01, 0x00, 0x1ee, 0x1ee, 0x01, 0x00, 0x1ef, 0x1ef, 0x01, 0x00, 0x1f0, 0x1f0, 0x01, 0x00, 0x1f2, 0x1f2, 0x01, 0x00, 0x1f3, 0x1f3, 0x01, 0x00, 0x1f4, 0x1f4, 0x01, 0x00, 0x1f5, 0x1f5, 0x01, 0x00, 0x1f6, 0x1f6, 0x01, 0x00, 0x1fd, 0x1fd, 0x01, 0x00, 0x1fe, 0x1fe, 0x01, 0x00, 0x201, 0x201, 0x01, 0x00, 0x202, 0x202, 0x01, 0x00, 0x204, 0x204, 0x01, 0x00, 0x205, 0x205, 0x01, 0x00, 0x206, 0x206, 0x01, 0x00, 0x207, 0x207, 0x01, 0x00, 0x208, 0x208, 0x01, 0x00, 0x209, 0x209, 0x01, 0x00, 0x20a, 0x20a, 0x01, 0x00, 0x20b, 0x20b, 0x01, 0x00, 0x20c, 0x20c, 0x01, 0x00, 0x20d, 0x20d, 0x01, 0x00, 0x20e, 0x20e, 0x01, 0x00, 0x20f, 0x20f, 0x01, 0x00, 0x210, 0x210, 0x01, 0x00, 0x211, 0x211, 0x01, 0x00, 0x212, 0x212, 0x01, 0x00, 0x213, 0x213, 0x01, 0x00, 0x214, 0x214, 0x01, 0x00, 0x215, 0x215, 0x01, 0x00, 0x216, 0x216, 0x01, 0x00, 0x217, 0x217, 0x01, 0x00, 0x218, 0x218, 0x01, 0x00, 0x219, 0x219, 0x01, 0x00, 0x21a, 0x21a, 0x01, 0x00, 0x21b, 0x21b, 0x01, 0x00, 0x21c, 0x21c, 0x01, 0x00, 0x21d, 0x21d, 0x01, 0x00, 0x21e, 0x21e, 0x01, 0x00, 0x21f, 0x21f, 0x01, 0x00, 0x230, 0x230, 0x01, 0x00, 0x235, 0x235, 0x01, 0x00, 0x23c, 0x23c, 0x01, 0x00, 0x23d, 0x23d, 0x01, 0x00, 0x23e, 0x23e, 0x01, 0x00, 0x23f, 0x23f, 0x01, 0x00, 0x240, 0x240, 0x01, 0x00, 0x242, 0x242, 0x01, 0x00, 0x244, 0x244, 0x01, 0x00, 0x245, 0x245, 0x01, 0x00, 0x246, 0x246, 0x01, 0x00, 0x247, 0x247, 0x01, 0x00, 0x248, 0x248, 0x01, 0x00, 0x249, 0x249, 0x01, 0x00, 0x3, 0x02, 0x0a, 0x00, 0x4, 0x02, 0x0a, 0x00, 0x5, 0x01, 0x01, 0x00, 0x6, 0x02, 0x0a, 0x00, 0x7, 0x02, 0x0a, 0x00, 0x9, 0x01, 0x01, 0x00, 0xd, 0x00, 0xe, 0x00, 0xf, 0x17, 0x01, 0x00, 0x10, 0x00, 0x11, 0x00, 0x12, 0x00, 0x13, 0x00, 0x14, 0x00, 0x15, 0x00, 0x16, 0x00, 0x27, 0x78, 0x01, 0x00, 0x3a, 0x00, 0x44, 0x02, 0x0a, 0x00, 0x45, 0x00, 0x46, 0x00, 0x4a, 0x00, 0x4c, 0x00, 0x5b, 0x02, 0x0a, 0x00, 0x5e, 0x01, 0x01, 0x00, 0x5f, 0x17, 0x01, 0x00, 0x60, 0x60, 0x01, 0x00, 0x61, 0x60, 0x01, 0x00, 0x64, 0x64, 0x01, 0x00, 0x65, 0x65, 0x01, 0x00, 0x66, 0x66, 0x01, 0x00, 0x68, 0xb, 0x01, 0x00, 0x69, 0x00, 0x6a, 0x6a, 0x01, 0x00, 0x6c, 0x6d, 0x01, 0x00, 0x6d, 0x6d, 0x01, 0x00, 0x6e, 0x6f, 0x01, 0x00, 0x6f, 0x6f, 0x01, 0x00, 0x70, 0x70, 0x01, 0x00, 0x71, 0x71, 0x01, 0x00, 0x72, 0x72, 0x01, 0x00, 0x73, 0x73, 0x01, 0x00, 0x74, 0x66, 0x01, 0x00, 0x76, 0x00, 0x77, 0x00, 0x79, 0x00, 0x7a, 0x00, 0x7b, 0x00, 0x88, 0x00, 0x92, 0x92, 0x01, 0x00, 0x93, 0x00, 0x98, 0x02, 0x0a, 0x00, 0x99, 0x02, 0x0a, 0x00, 0x9a, 0x02, 0x0a, 0x00, 0x9b, 0x01, 0x01, 0x00, 0x9c, 0x0c, 0x0a, 0x00, 0xac, 0x02, 0x0a, 0x00, 0xb2, 0xb2, 0x01, 0x00, 0xb3, 0xb3, 0x01, 0x00, 0xb4, 0xb4, 0x01, 0x00, 0xb5, 0xb5, 0x01, 0x00, 0xb6, 0xb6, 0x01, 0x00, 0xb7, 0xb7, 0x01, 0x00, 0xb8, 0x0c, 0x0a, 0x00, 0xb9, 0xb9, 0x01, 0x00, 0xba, 0xba, 0x01, 0x00, 0xbb, 0xbb, 0x01, 0x00, 0xbc, 0xbc, 0x01, 0x00, 0xbd, 0xbd, 0x01, 0x00, 0xbe, 0xbe, 0x01, 0x00, 0xbf, 0x00, 0xc0, 0x00, 0xc3, 0x70, 0x01, 0x00, 0xc4, 0x71, 0x01, 0x00, 0xc5, 0x72, 0x01, 0x00, 0xd0, 0xd0, 0x01, 0x00, 0xd1, 0x00, 0xe7, 0xe7, 0x01, 0x00, 0xe8, 0xe7, 0x01, 0x00, 0xe9, 0xe9, 0x01, 0x00, 0xf1, 0x6d, 0x01, 0x00, 0x203, 0x00, 0x24e, 0x24e, 0x01, 0x00, 0x24f, 0x24f, 0x01, 0x00, 0x250, 0x250, 0x01, 0x00]
|
63
|
+
else
|
64
|
+
dty_body_bytes = [0x01, 0x01, 0x01, 0x00, 0x02, 0x02, 0x0a, 0x00, 0x08, 0x08, 0x01, 0x00, 0x0c, 0x0c, 0x0a, 0x00, 0x17, 0x17, 0x01, 0x00, 0x18, 0x18, 0x01, 0x00, 0x19, 0x19, 0x01, 0x00, 0x1a, 0x1a, 0x01, 0x00, 0x1b, 0x1b, 0x01, 0x00, 0x1c, 0x1c, 0x01, 0x00, 0x1d, 0x1d, 0x01, 0x00, 0x1e, 0x1e, 0x01, 0x00, 0x1f, 0x1f, 0x01, 0x00, 0x20, 0x20, 0x01, 0x00, 0x21, 0x21, 0x01, 0x00, 0x0a, 0x0a, 0x01, 0x00, 0xb, 0xb, 0x01, 0x00, 0x28, 0x28, 0x01, 0x00, 0x29, 0x29, 0x01, 0x00, 0x75, 0x75, 0x01, 0x00, 0x78, 0x78, 0x01, 0x00, 0x122, 0x122, 0x01, 0x00, 0x123, 0x123, 0x01, 0x00, 0x124, 0x124, 0x01, 0x00, 0x125, 0x125, 0x01, 0x00, 0x126, 0x126, 0x01, 0x00, 0x12a, 0x12a, 0x01, 0x00, 0x12b, 0x12b, 0x01, 0x00, 0x12c, 0x12c, 0x01, 0x00, 0x12d, 0x12d, 0x01, 0x00, 0x12e, 0x12e, 0x01, 0x00, 0x12f, 0x12f, 0x01, 0x00, 0x130, 0x130, 0x01, 0x00, 0x131, 0x131, 0x01, 0x00, 0x132, 0x132, 0x01, 0x00, 0x133, 0x133, 0x01, 0x00, 0x134, 0x134, 0x01, 0x00, 0x135, 0x135, 0x01, 0x00, 0x136, 0x136, 0x01, 0x00, 0x137, 0x137, 0x01, 0x00, 0x138, 0x138, 0x01, 0x00, 0x139, 0x139, 0x01, 0x00, 0x13b, 0x13b, 0x01, 0x00, 0x13c, 0x13c, 0x01, 0x00, 0x13d, 0x13d, 0x01, 0x00, 0x13e, 0x13e, 0x01, 0x00, 0x13f, 0x13f, 0x01, 0x00, 0x140, 0x140, 0x01, 0x00, 0x141, 0x141, 0x01, 0x00, 0x142, 0x142, 0x01, 0x00, 0x143, 0x143, 0x01, 0x00, 0x147, 0x147, 0x01, 0x00, 0x148, 0x148, 0x01, 0x00, 0x149, 0x149, 0x01, 0x00, 0x14b, 0x14b, 0x01, 0x00, 0x14d, 0x14d, 0x01, 0x00, 0x14e, 0x14e, 0x01, 0x00, 0x14f, 0x14f, 0x01, 0x00, 0x150, 0x150, 0x01, 0x00, 0x151, 0x151, 0x01, 0x00, 0x152, 0x152, 0x01, 0x00, 0x153, 0x153, 0x01, 0x00, 0x154, 0x154, 0x01, 0x00, 0x155, 0x155, 0x01, 0x00, 0x156, 0x156, 0x01, 0x00, 0x157, 0x157, 0x01, 0x00, 0x158, 0x158, 0x01, 0x00, 0x159, 0x159, 0x01, 0x00, 0x15a, 0x15a, 0x01, 0x00, 0x15c, 0x15c, 0x01, 0x00, 0x15d, 0x15d, 0x01, 0x00, 0x162, 0x162, 0x01, 0x00, 0x163, 0x163, 0x01, 0x00, 0x167, 0x167, 0x01, 0x00, 0x16b, 0x16b, 0x01, 0x00, 0x17c, 0x17c, 0x01, 0x00, 0x17d, 0x17d, 0x01, 0x00, 0x17e, 0x17e, 0x01, 0x00, 0x17f, 0x17f, 0x01, 0x00, 0x180, 0x180, 0x01, 0x00, 0x181, 0x181, 0x01, 0x00, 0x182, 0x182, 0x01, 0x00, 0x183, 0x183, 0x01, 0x00, 0x184, 0x184, 0x01, 0x00, 0x185, 0x185, 0x01, 0x00, 0x186, 0x186, 0x01, 0x00, 0x187, 0x187, 0x01, 0x00, 0x189, 0x189, 0x01, 0x00, 0x18a, 0x18a, 0x01, 0x00, 0x18b, 0x18b, 0x01, 0x00, 0x18c, 0x18c, 0x01, 0x00, 0x18d, 0x18d, 0x01, 0x00, 0x18e, 0x18e, 0x01, 0x00, 0x18f, 0x18f, 0x01, 0x00, 0x190, 0x190, 0x01, 0x00, 0x191, 0x191, 0x01, 0x00, 0x194, 0x194, 0x01, 0x00, 0x195, 0x195, 0x01, 0x00, 0x196, 0x196, 0x01, 0x00, 0x197, 0x197, 0x01, 0x00, 0x19d, 0x19d, 0x01, 0x00, 0x19e, 0x19e, 0x01, 0x00, 0x19f, 0x19f, 0x01, 0x00, 0x1a0, 0x1a0, 0x01, 0x00, 0x1a1, 0x1a1, 0x01, 0x00, 0x1a2, 0x1a2, 0x01, 0x00, 0x1a3, 0x1a3, 0x01, 0x00, 0x1a4, 0x1a4, 0x01, 0x00, 0x1a5, 0x1a5, 0x01, 0x00, 0x1a6, 0x1a6, 0x01, 0x00, 0x1a7, 0x1a7, 0x01, 0x00, 0x1a8, 0x1a8, 0x01, 0x00, 0x1a9, 0x1a9, 0x01, 0x00, 0x1aa, 0x1aa, 0x01, 0x00, 0x1ab, 0x1ab, 0x01, 0x00, 0x1ad, 0x1ad, 0x01, 0x00, 0x1ae, 0x1ae, 0x01, 0x00, 0x1af, 0x1af, 0x01, 0x00, 0x1b0, 0x1b0, 0x01, 0x00, 0x1b1, 0x1b1, 0x01, 0x00, 0x1c1, 0x1c1, 0x01, 0x00, 0x1c2, 0x1c2, 0x01, 0x00, 0x1c6, 0x1c6, 0x01, 0x00, 0x1c7, 0x1c7, 0x01, 0x00, 0x1c8, 0x1c8, 0x01, 0x00, 0x1c9, 0x1c9, 0x01, 0x00, 0x1ca, 0x1ca, 0x01, 0x00, 0x1cb, 0x1cb, 0x01, 0x00, 0x1cc, 0x1cc, 0x01, 0x00, 0x1cd, 0x1cd, 0x01, 0x00, 0x1ce, 0x1ce, 0x01, 0x00, 0x1cf, 0x1cf, 0x01, 0x00, 0x1d2, 0x1d2, 0x01, 0x00, 0x1d3, 0x1d3, 0x01, 0x00, 0x1d4, 0x1d4, 0x01, 0x00, 0x1d5, 0x1d5, 0x01, 0x00, 0x1d6, 0x1d6, 0x01, 0x00, 0x1d7, 0x1d7, 0x01, 0x00, 0x1d8, 0x1d8, 0x01, 0x00, 0x1d9, 0x1d9, 0x01, 0x00, 0x1da, 0x1da, 0x01, 0x00, 0x1db, 0x1db, 0x01, 0x00, 0x1dc, 0x1dc, 0x01, 0x00, 0x1dd, 0x1dd, 0x01, 0x00, 0x1de, 0x1de, 0x01, 0x00, 0x1df, 0x1df, 0x01, 0x00, 0x1e0, 0x1e0, 0x01, 0x00, 0x1e1, 0x1e1, 0x01, 0x00, 0x1e2, 0x1e2, 0x01, 0x00, 0x1e3, 0x1e3, 0x01, 0x00, 0x1e4, 0x1e4, 0x01, 0x00, 0x1e5, 0x1e5, 0x01, 0x00, 0x1e6, 0x1e6, 0x01, 0x00, 0x1ea, 0x1ea, 0x01, 0x00, 0x1eb, 0x1eb, 0x01, 0x00, 0x1ec, 0x1ec, 0x01, 0x00, 0x1ed, 0x1ed, 0x01, 0x00, 0x1ee, 0x1ee, 0x01, 0x00, 0x1ef, 0x1ef, 0x01, 0x00, 0x1f0, 0x1f0, 0x01, 0x00, 0x1f2, 0x1f2, 0x01, 0x00, 0x1f3, 0x1f3, 0x01, 0x00, 0x1f4, 0x1f4, 0x01, 0x00, 0x1f5, 0x1f5, 0x01, 0x00, 0x1f6, 0x1f6, 0x01, 0x00, 0x1fd, 0x1fd, 0x01, 0x00, 0x1fe, 0x1fe, 0x01, 0x00, 0x201, 0x201, 0x01, 0x00, 0x202, 0x202, 0x01, 0x00, 0x204, 0x204, 0x01, 0x00, 0x205, 0x205, 0x01, 0x00, 0x206, 0x206, 0x01, 0x00, 0x207, 0x207, 0x01, 0x00, 0x208, 0x208, 0x01, 0x00, 0x209, 0x209, 0x01, 0x00, 0x20a, 0x20a, 0x01, 0x00, 0x20b, 0x20b, 0x01, 0x00, 0x20c, 0x20c, 0x01, 0x00, 0x20d, 0x20d, 0x01, 0x00, 0x20e, 0x20e, 0x01, 0x00, 0x20f, 0x20f, 0x01, 0x00, 0x210, 0x210, 0x01, 0x00, 0x211, 0x211, 0x01, 0x00, 0x212, 0x212, 0x01, 0x00, 0x213, 0x213, 0x01, 0x00, 0x214, 0x214, 0x01, 0x00, 0x215, 0x215, 0x01, 0x00, 0x216, 0x216, 0x01, 0x00, 0x217, 0x217, 0x01, 0x00, 0x218, 0x218, 0x01, 0x00, 0x219, 0x219, 0x01, 0x00, 0x21a, 0x21a, 0x01, 0x00, 0x21b, 0x21b, 0x01, 0x00, 0x21c, 0x21c, 0x01, 0x00, 0x21d, 0x21d, 0x01, 0x00, 0x21e, 0x21e, 0x01, 0x00, 0x21f, 0x21f, 0x01, 0x00, 0x230, 0x230, 0x01, 0x00, 0x235, 0x235, 0x01, 0x00, 0x23c, 0x23c, 0x01, 0x00, 0x23d, 0x23d, 0x01, 0x00, 0x23e, 0x23e, 0x01, 0x00, 0x23f, 0x23f, 0x01, 0x00, 0x240, 0x240, 0x01, 0x00, 0x242, 0x242, 0x01, 0x00, 0x244, 0x244, 0x01, 0x00, 0x245, 0x245, 0x01, 0x00, 0x246, 0x246, 0x01, 0x00, 0x247, 0x247, 0x01, 0x00, 0x248, 0x248, 0x01, 0x00, 0x249, 0x249, 0x01, 0x00, 0x3, 0x02, 0x0a, 0x00, 0x4, 0x02, 0x0a, 0x00, 0x5, 0x01, 0x01, 0x00, 0x6, 0x02, 0x0a, 0x00, 0x7, 0x02, 0x0a, 0x00, 0x9, 0x01, 0x01, 0x00, 0xd, 0x00, 0xe, 0x00, 0xf, 0x17, 0x01, 0x00, 0x10, 0x00, 0x11, 0x00, 0x12, 0x00, 0x13, 0x00, 0x14, 0x00, 0x15, 0x00, 0x16, 0x00, 0x27, 0x78, 0x01, 0x00, 0x3a, 0x00, 0x44, 0x02, 0x0a, 0x00, 0x45, 0x00, 0x46, 0x00, 0x4a, 0x00, 0x4c, 0x00, 0x5b, 0x02, 0x0a, 0x00, 0x5e, 0x01, 0x01, 0x00, 0x5f, 0x17, 0x01, 0x00, 0x60, 0x60, 0x01, 0x00, 0x61, 0x60, 0x01, 0x00, 0x64, 0x64, 0x01, 0x00, 0x65, 0x65, 0x01, 0x00, 0x66, 0x66, 0x01, 0x00, 0x68, 0xb, 0x01, 0x00, 0x69, 0x00, 0x6a, 0x6a, 0x01, 0x00, 0x6c, 0x6d, 0x01, 0x00, 0x6d, 0x6d, 0x01, 0x00, 0x6e, 0x6f, 0x01, 0x00, 0x6f, 0x6f, 0x01, 0x00, 0x70, 0x70, 0x01, 0x00, 0x71, 0x71, 0x01, 0x00, 0x72, 0x72, 0x01, 0x00, 0x73, 0x73, 0x01, 0x00, 0x74, 0x66, 0x01, 0x00, 0x76, 0x00, 0x77, 0x00, 0x79, 0x00, 0x7a, 0x00, 0x7b, 0x00, 0x88, 0x00, 0x92, 0x92, 0x01, 0x00, 0x93, 0x00, 0x98, 0x02, 0x0a, 0x00, 0x99, 0x02, 0x0a, 0x00, 0x9a, 0x02, 0x0a, 0x00, 0x9b, 0x01, 0x01, 0x00, 0x9c, 0x0c, 0x0a, 0x00, 0xac, 0x02, 0x0a, 0x00, 0xb2, 0xb2, 0x01, 0x00, 0xb3, 0xb3, 0x01, 0x00, 0xb4, 0xb4, 0x01, 0x00, 0xb5, 0xb5, 0x01, 0x00, 0xb6, 0xb6, 0x01, 0x00, 0xb7, 0xb7, 0x01, 0x00, 0xb8, 0x0c, 0x0a, 0x00, 0xb9, 0xb9, 0x01, 0x00, 0xba, 0xba, 0x01, 0x00, 0xbb, 0xbb, 0x01, 0x00, 0xbc, 0xbc, 0x01, 0x00, 0xbd, 0xbd, 0x01, 0x00, 0xbe, 0xbe, 0x01, 0x00, 0xbf, 0x00, 0xc0, 0x00, 0xc3, 0x70, 0x01, 0x00, 0xc4, 0x71, 0x01, 0x00, 0xc5, 0x72, 0x01, 0x00, 0xd0, 0xd0, 0x01, 0x00, 0xd1, 0x00, 0xe7, 0xe7, 0x01, 0x00, 0xe8, 0xe7, 0x01, 0x00, 0xe9, 0xe9, 0x01, 0x00, 0xf1, 0x6d, 0x01, 0x00, 0x203, 0x00]
|
65
|
+
end
|
114
66
|
|
115
|
-
|
116
|
-
|
117
|
-
request.
|
118
|
-
when :windows
|
119
|
-
request.unknown4 = "800000003c3c3c80000000d007".tns_unhexify
|
67
|
+
if(client_ct_caps[27] == 0)
|
68
|
+
request.dty_body = dty_body_bytes.map { |m| m & 0xff }.pack('C*')
|
69
|
+
request.fin = [0x00].pack('C')
|
120
70
|
else
|
121
|
-
|
71
|
+
request.dty_body = dty_body_bytes.pack('n*')
|
72
|
+
request.fin = [0x00].pack('n')
|
122
73
|
end
|
123
74
|
|
124
75
|
return request
|
@@ -4,9 +4,16 @@ module Net
|
|
4
4
|
handles_response_for_ttc_code TTC_CODE_ERROR
|
5
5
|
|
6
6
|
# BinData fields
|
7
|
-
|
8
|
-
|
9
|
-
string :
|
7
|
+
|
8
|
+
uint8 :ucaeocs_length
|
9
|
+
string :ucaeocs, :read_length => lambda { ucaeocs_length }
|
10
|
+
uint8 :oerrdd_length
|
11
|
+
string :oerrdd, :read_length => lambda { oerrdd_length }
|
12
|
+
uint8 :current_row_number_length
|
13
|
+
string :current_row_number, :read_length => lambda { current_row_number_length }
|
14
|
+
uint8 :retcode_length
|
15
|
+
string :retcode, :read_length => lambda { retcode_length }
|
16
|
+
string :unknown1, :read_length => 24
|
10
17
|
uint8 :message_length
|
11
18
|
string :message, :read_length => lambda { message_length }
|
12
19
|
end
|
@@ -3,30 +3,51 @@ require "net/tti/data_types"
|
|
3
3
|
module Net
|
4
4
|
module TTI
|
5
5
|
class Authentication < FunctionCall
|
6
|
-
LOGON_MODE_PRE_AUTH =
|
7
|
-
LOGON_MODE_AUTH =
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
6
|
+
LOGON_MODE_PRE_AUTH = 0x01
|
7
|
+
LOGON_MODE_AUTH = 0x0101
|
8
|
+
uint8 :unknown1, :initial_value => 0x01
|
9
|
+
uint8 :username_length_length, :initial_value => 0x01
|
10
|
+
uint8 :username_length, :value => lambda { username.length }
|
11
|
+
uint8 :logon_mode_length, :initial_value => lambda { _logon_mode_length }
|
12
|
+
choice :logon_mode, :selection => :_logon_mode do
|
13
|
+
uint8 LOGON_MODE_PRE_AUTH, :initial_value => lambda { _logon_mode }
|
14
|
+
uint16le LOGON_MODE_AUTH, :initial_value => lambda { _logon_mode }
|
15
|
+
end
|
16
|
+
uint8 :unknown2, :initial_value => 0x01
|
17
|
+
uint8 :parameters_count_length, :initial_value => 0x01
|
18
|
+
uint8 :parameters_count, :value => lambda {parameters.count}
|
19
|
+
uint8 :unknown3, :initial_value => 0x01
|
20
|
+
uint8 :unknown4, :initial_value => 0x01
|
21
|
+
string :username
|
22
|
+
array :parameters, :type => :key_value_pair, :read_until => lambda {index == parameters_count - 1}
|
23
|
+
|
24
|
+
def _function_code
|
25
|
+
return FUNCTION_CODE_AUTH
|
18
26
|
end
|
27
|
+
private :_function_code
|
19
28
|
|
20
|
-
def
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
29
|
+
def _logon_mode
|
30
|
+
return Authentication::LOGON_MODE_AUTH
|
31
|
+
end
|
32
|
+
private :_logon_mode
|
33
|
+
|
34
|
+
def _logon_mode_length
|
35
|
+
case _logon_mode
|
36
|
+
when Authentication::LOGON_MODE_PRE_AUTH
|
37
|
+
return 1
|
38
|
+
when Authentication::LOGON_MODE_AUTH
|
39
|
+
return 2
|
28
40
|
end
|
29
41
|
end
|
42
|
+
private :_logon_mode
|
43
|
+
|
44
|
+
def self.create_pre_auth_request()
|
45
|
+
return PreAuthentication.new
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.create_auth_request()
|
49
|
+
return Authentication.new
|
50
|
+
end
|
30
51
|
|
31
52
|
def add_parameter( key, value, flags=0 )
|
32
53
|
kvp = DataTypes::KeyValuePair.new( :kvp_key => key, :kvp_value => value, :flags => flags )
|
@@ -41,5 +62,17 @@ module Net
|
|
41
62
|
add_parameter( "AUTH_PASSWORD", enc_password.tns_hexify.upcase )
|
42
63
|
end
|
43
64
|
end
|
65
|
+
|
66
|
+
class PreAuthentication < Authentication
|
67
|
+
def _function_code
|
68
|
+
return FUNCTION_CODE_PRE_AUTH
|
69
|
+
end
|
70
|
+
private :_function_code
|
71
|
+
|
72
|
+
def _logon_mode
|
73
|
+
return Authentication::LOGON_MODE_PRE_AUTH
|
74
|
+
end
|
75
|
+
private :_logon_mode
|
76
|
+
end
|
44
77
|
end
|
45
78
|
end
|
@@ -3,8 +3,9 @@ require "net/tti/data_types"
|
|
3
3
|
module Net
|
4
4
|
module TTI
|
5
5
|
class PreAuthenticationResponse < Message
|
6
|
-
|
7
|
-
|
6
|
+
uint8 :unknown1
|
7
|
+
uint8 :parameter_count
|
8
|
+
array :parameters, :type => :key_value_pair, :read_until => lambda {index == parameter_count - 1}
|
8
9
|
|
9
10
|
def _ttc_code
|
10
11
|
return TTC_CODE_OK
|
@@ -6,17 +6,17 @@ module Net
|
|
6
6
|
# response, this will be the version the server chooses. These are a
|
7
7
|
# concatenated string of version numbers (e.g. 060504).
|
8
8
|
stringz :client_versions_string
|
9
|
-
stringz :
|
9
|
+
stringz :client_string
|
10
10
|
|
11
11
|
def _ttc_code
|
12
12
|
TTC_CODE_PROTOCOL_NEGOTIATION
|
13
13
|
end
|
14
14
|
private :_ttc_code
|
15
15
|
|
16
|
-
def self.create_request(client_versions=[6],
|
16
|
+
def self.create_request(client_versions=[6, 5, 4, 3, 2, 1, 0], client_string = "Java_TTC-8.2.0")
|
17
17
|
request = self.new
|
18
18
|
request.client_versions = client_versions
|
19
|
-
request.
|
19
|
+
request.client_string = client_string
|
20
20
|
|
21
21
|
return request
|
22
22
|
end
|
@@ -4,39 +4,50 @@ module Net
|
|
4
4
|
handles_response_for_ttc_code TTC_CODE_PROTOCOL_NEGOTIATION
|
5
5
|
|
6
6
|
# BinData fields
|
7
|
-
|
8
|
-
|
7
|
+
uint8 :ttc_version
|
8
|
+
# TODO throw if ttc_version is not in (4, 5, 6)
|
9
|
+
uint8 :unknown1
|
10
|
+
stringz :ttc_server
|
9
11
|
uint16le :character_set
|
12
|
+
uint8 :server_flags
|
13
|
+
uint16le :character_set_elements_length
|
14
|
+
string :character_set_elements, :read_length => lambda {character_set_elements_length * 5}
|
15
|
+
# TODO stop parsing here if ttc_version = 4
|
16
|
+
uint16be :fdo_length
|
17
|
+
string :fdo, :read_length => :fdo_length
|
18
|
+
# TODO stop parsing here is ttc_version < 6
|
19
|
+
uint8 :server_compiletime_capabilities_length
|
20
|
+
string :server_compiletime_capabilities, :read_length => :server_compiletime_capabilities_length
|
21
|
+
uint8 :server_runtime_capabilities_length
|
22
|
+
string :server_runtime_capabilities, :read_length => :server_runtime_capabilities_length
|
10
23
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
uint8 :unknown5_length
|
19
|
-
string :unknown5, :read_length => :unknown5_length
|
24
|
+
def populate_connection_parameters( conn_params )
|
25
|
+
conn_params.ttc_version = self.ttc_version
|
26
|
+
conn_params.ttc_server = self.ttc_server
|
27
|
+
conn_params.character_set = self.character_set
|
28
|
+
conn_params.server_flags = self.server_flags
|
29
|
+
conn_params.server_compiletime_capabilities = Capabilities.from_binary_string( server_compiletime_capabilities )
|
30
|
+
conn_params.server_runtime_capabilities = Capabilities.from_binary_string( server_runtime_capabilities )
|
20
31
|
|
21
|
-
|
22
|
-
|
23
|
-
|
32
|
+
ttc_server_map = {
|
33
|
+
# (start of) protocol handler string => {params}
|
34
|
+
"IBMPC/WIN_NT-" => {:architecture => :x86, :platform => :windows},
|
35
|
+
"IBMPC/WIN_NT64" => {:architecture => :x64, :platform => :windows},
|
36
|
+
"Linuxi386/Linux" => {:architecture => :x86, :platform => :linux},
|
37
|
+
"x86_64/Linux" => {:architecture => :x64, :platform => :linux},
|
38
|
+
"Sun386i/SunOS" => {:architecture => :x86, :platform => :solaris},
|
39
|
+
"AMD64/SunOS" => {:architecture => :x64, :platform => :solaris},
|
40
|
+
}
|
24
41
|
|
25
|
-
|
26
|
-
|
42
|
+
ph_match, match_params = ttc_server_map.find do |ph_start, params|
|
43
|
+
ttc_server.start_with?(ph_start)
|
44
|
+
end
|
27
45
|
|
28
|
-
|
29
|
-
|
30
|
-
conn_params.
|
31
|
-
conn_params.platform = :windows
|
32
|
-
when "Linuxi386/Linux-2.0.34-8.1.0"
|
33
|
-
conn_params.architecture = :x86
|
34
|
-
conn_params.platform = :linux
|
35
|
-
when "x86_64/Linux 2.4.xx"
|
36
|
-
conn_params.architecture = :x64
|
37
|
-
conn_params.platform = :linux
|
46
|
+
if ph_match
|
47
|
+
conn_params.architecture = match_params[:architecture]
|
48
|
+
conn_params.platform = match_params[:platform]
|
38
49
|
else
|
39
|
-
raise Net::TTI::Exceptions::UnsupportedPlatform.new(
|
50
|
+
raise Net::TTI::Exceptions::UnsupportedPlatform.new( ttc_server )
|
40
51
|
end
|
41
52
|
end
|
42
53
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: net-tns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Woodbury
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2017-01-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bindata
|
@@ -75,8 +75,8 @@ extra_rdoc_files: []
|
|
75
75
|
files:
|
76
76
|
- LICENSE
|
77
77
|
- bin/tns_oradb_version.rb
|
78
|
-
- bin/tns_sid_enumeration.rb
|
79
78
|
- bin/tns_sid_list.rb
|
79
|
+
- bin/tns_sid_probing.rb
|
80
80
|
- lib/net/tns.rb
|
81
81
|
- lib/net/tns/client.rb
|
82
82
|
- lib/net/tns/connection.rb
|
@@ -98,11 +98,13 @@ files:
|
|
98
98
|
- lib/net/tns/packets/resend_packet.rb
|
99
99
|
- lib/net/tns/version.rb
|
100
100
|
- lib/net/tti.rb
|
101
|
+
- lib/net/tti/capabilities.rb
|
101
102
|
- lib/net/tti/client.rb
|
102
103
|
- lib/net/tti/connection.rb
|
103
104
|
- lib/net/tti/crypto.rb
|
104
105
|
- lib/net/tti/data_types.rb
|
105
106
|
- lib/net/tti/data_types/chunked_string.rb
|
107
|
+
- lib/net/tti/data_types/flags.rb
|
106
108
|
- lib/net/tti/data_types/key_value_pair.rb
|
107
109
|
- lib/net/tti/exceptions.rb
|
108
110
|
- lib/net/tti/message.rb
|
@@ -111,8 +113,6 @@ files:
|
|
111
113
|
- lib/net/tti/messages/error_message.rb
|
112
114
|
- lib/net/tti/messages/function_call.rb
|
113
115
|
- lib/net/tti/messages/function_calls/authentication.rb
|
114
|
-
- lib/net/tti/messages/function_calls/authentication_x64.rb
|
115
|
-
- lib/net/tti/messages/function_calls/authentication_x86.rb
|
116
116
|
- lib/net/tti/messages/function_calls/pre_authentication_response.rb
|
117
117
|
- lib/net/tti/messages/protocol_negotiation_request.rb
|
118
118
|
- lib/net/tti/messages/protocol_negotiation_response.rb
|
@@ -136,7 +136,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
136
|
version: '0'
|
137
137
|
requirements: []
|
138
138
|
rubyforge_project:
|
139
|
-
rubygems_version: 2.
|
139
|
+
rubygems_version: 2.6.7
|
140
140
|
signing_key:
|
141
141
|
specification_version: 4
|
142
142
|
summary: Ruby implementation of the Oracle TNS protocol
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require_relative "authentication"
|
2
|
-
|
3
|
-
module Net
|
4
|
-
module TTI
|
5
|
-
class AuthenticationX64 < Authentication
|
6
|
-
uint32le :unknown2, :initial_value => 0x00001201
|
7
|
-
uint8 :unknown3, :initial_value => 0x00
|
8
|
-
uint32le :logon_mode, :initial_value => :_logon_mode
|
9
|
-
uint8 :unknown4, :initial_value => 0x01
|
10
|
-
uint32le :parameter_count, :value => lambda {parameters.count}
|
11
|
-
uint16le :unknown5, :initial_value => 0x0101
|
12
|
-
# username_length and username might be a chunked string, but we
|
13
|
-
# don't need to worry about chunking since Oracle usernames can't
|
14
|
-
# be longer than 30 characters.
|
15
|
-
uint8 :username_length, :value => lambda { username.length }
|
16
|
-
string :username
|
17
|
-
array :parameters, :type => :key_value_pair, :read_until => lambda {index == parameter_count-1}
|
18
|
-
|
19
|
-
def _function_code
|
20
|
-
return FUNCTION_CODE_AUTH
|
21
|
-
end
|
22
|
-
private :_function_code
|
23
|
-
|
24
|
-
def _logon_mode
|
25
|
-
return Authentication::LOGON_MODE_AUTH
|
26
|
-
end
|
27
|
-
private :_logon_mode
|
28
|
-
end
|
29
|
-
|
30
|
-
class PreAuthenticationX64 < AuthenticationX64
|
31
|
-
def _function_code
|
32
|
-
return FUNCTION_CODE_PRE_AUTH
|
33
|
-
end
|
34
|
-
private :_function_code
|
35
|
-
|
36
|
-
def _logon_mode
|
37
|
-
return Authentication::LOGON_MODE_PRE_AUTH
|
38
|
-
end
|
39
|
-
private :_logon_mode
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
require_relative "authentication"
|
2
|
-
|
3
|
-
module Net
|
4
|
-
module TTI
|
5
|
-
class AuthenticationX86 < Authentication
|
6
|
-
# Clients seem to change this without any effect on the server. It looks
|
7
|
-
# like it's probably 4 8-bit values, but if we're ignoring them all, we
|
8
|
-
# can ignore them as one structure
|
9
|
-
uint32le :unknown2, :initial_value => 0xFFFFFFFE
|
10
|
-
# Some Oracle clients instead send username.length*3 here to 11g servers,
|
11
|
-
# but it doesn't seem to matter
|
12
|
-
uint32le :unknown3, :value => lambda { username.length }
|
13
|
-
# 0x1 => preauth, 0x101 => auth
|
14
|
-
uint32le :logon_mode, :initial_value => :_logon_mode
|
15
|
-
# Ditto for unknown2. Oracle clients put the same value into the upper
|
16
|
-
# 16 bits of unknown4, unknown5 and unknown6 in each request, but I can't
|
17
|
-
# figure out its meaning
|
18
|
-
uint32le :unknown4, :initial_value => 0xFFFFFFFE
|
19
|
-
uint32le :parameter_count, :value => lambda {parameters.count}
|
20
|
-
# See unknown4
|
21
|
-
uint32le :unknown5, :initial_value => 0xFFFFFFFE
|
22
|
-
uint32le :unknown6, :initial_value => 0xFFFFFFFE
|
23
|
-
# username_length and username might be a chunked string, but we
|
24
|
-
# don't need to worry about chunking since Oracle usernames can't
|
25
|
-
# be longer than 30 characters
|
26
|
-
uint8 :username_length, :value => lambda { username.length }
|
27
|
-
string :username
|
28
|
-
array :parameters, :type => :key_value_pair, :read_until => lambda {index == parameter_count-1}
|
29
|
-
|
30
|
-
def _function_code
|
31
|
-
return FUNCTION_CODE_AUTH
|
32
|
-
end
|
33
|
-
private :_function_code
|
34
|
-
|
35
|
-
def _logon_mode
|
36
|
-
return Authentication::LOGON_MODE_AUTH
|
37
|
-
end
|
38
|
-
private :_logon_mode
|
39
|
-
end
|
40
|
-
|
41
|
-
class PreAuthenticationX86 < AuthenticationX86
|
42
|
-
def _function_code
|
43
|
-
return FUNCTION_CODE_PRE_AUTH
|
44
|
-
end
|
45
|
-
private :_function_code
|
46
|
-
|
47
|
-
def _logon_mode
|
48
|
-
return Authentication::LOGON_MODE_PRE_AUTH
|
49
|
-
end
|
50
|
-
private :_logon_mode
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|