ruby_smb 3.1.5 → 3.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/ruby_smb/dcerpc/dfsnm/netr_dfs_add_std_root_request.rb +24 -0
- data/lib/ruby_smb/dcerpc/dfsnm/netr_dfs_add_std_root_response.rb +21 -0
- data/lib/ruby_smb/dcerpc/dfsnm/netr_dfs_remove_std_root_request.rb +23 -0
- data/lib/ruby_smb/dcerpc/dfsnm/netr_dfs_remove_std_root_response.rb +21 -0
- data/lib/ruby_smb/dcerpc/dfsnm.rb +84 -0
- data/lib/ruby_smb/dcerpc/error.rb +11 -0
- data/lib/ruby_smb/dcerpc/request.rb +6 -1
- data/lib/ruby_smb/dcerpc.rb +1 -0
- data/lib/ruby_smb/error.rb +21 -11
- data/lib/ruby_smb/smb1/pipe.rb +2 -0
- data/lib/ruby_smb/smb2/pipe.rb +2 -0
- data/lib/ruby_smb/version.rb +1 -1
- data/spec/lib/ruby_smb/dcerpc/dfsnm/netr_dfs_add_std_root_request_spec.rb +57 -0
- data/spec/lib/ruby_smb/dcerpc/dfsnm/netr_dfs_add_std_root_response_spec.rb +34 -0
- data/spec/lib/ruby_smb/dcerpc/dfsnm/netr_dfs_remove_std_root_request_spec.rb +49 -0
- data/spec/lib/ruby_smb/dcerpc/dfsnm/netr_dfs_remove_std_root_response_spec.rb +34 -0
- data.tar.gz.sig +2 -4
- metadata +15 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 41dae2cdf118dfda8519ebf1a109c77e9396d9cda01c20e5a45a2fdd222ddb38
|
4
|
+
data.tar.gz: 37d8b0d88283c540ee074035cdc2728d9bd4bb2960f1d379d81d1a926cb11aa1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1de29406e9e28d9d47dddfaff03d81aeb10aa28c5bb827c3c81e52f6b3d42b302a22143a71c1a89db91968f6b33d2299658bfe04dcf4897e000bc9170c11318c
|
7
|
+
data.tar.gz: d2794e3f509f10e98e5914e03e499c4433f2a78070090cefe704528e573c8b50bf049f1bb2a34ff5a63d26af759ad6a24fad83f778064e8c2ab446c7ef2841f8
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module RubySMB
|
2
|
+
module Dcerpc
|
3
|
+
module Dfsnm
|
4
|
+
|
5
|
+
# [3.1.4.4.1 NetrDfsAddStdRoot (Opnum 12)](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dfsnm/b18ef17a-7a9c-4e22-b1bf-6a4d07e87b2d)
|
6
|
+
class NetrDfsAddStdRootRequest < BinData::Record
|
7
|
+
attr_reader :opnum
|
8
|
+
|
9
|
+
endian :little
|
10
|
+
|
11
|
+
ndr_conf_var_wide_stringz :server_name
|
12
|
+
ndr_conf_var_wide_stringz :root_share
|
13
|
+
ndr_conf_var_wide_stringz :comment
|
14
|
+
ndr_uint32 :api_flags
|
15
|
+
|
16
|
+
def initialize_instance
|
17
|
+
super
|
18
|
+
@opnum = NETR_DFS_ADD_STD_ROOT
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module RubySMB
|
2
|
+
module Dcerpc
|
3
|
+
module Dfsnm
|
4
|
+
|
5
|
+
# [3.1.4.4.1 NetrDfsAddStdRoot (Opnum 12)](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dfsnm/b18ef17a-7a9c-4e22-b1bf-6a4d07e87b2d)
|
6
|
+
class NetrDfsAddStdRootResponse < BinData::Record
|
7
|
+
attr_reader :opnum
|
8
|
+
|
9
|
+
endian :little
|
10
|
+
|
11
|
+
ndr_uint32 :error_status
|
12
|
+
|
13
|
+
def initialize_instance
|
14
|
+
super
|
15
|
+
@opnum = NETR_DFS_ADD_STD_ROOT
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module RubySMB
|
2
|
+
module Dcerpc
|
3
|
+
module Dfsnm
|
4
|
+
|
5
|
+
# [3.1.4.4.2 NetrDfsRemoveStdRoot (Opnum 13)](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dfsnm/e9da023d-554a-49bc-837a-69f22d59fd18)
|
6
|
+
class NetrDfsRemoveStdRootRequest < BinData::Record
|
7
|
+
attr_reader :opnum
|
8
|
+
|
9
|
+
endian :little
|
10
|
+
|
11
|
+
ndr_conf_var_wide_stringz :server_name
|
12
|
+
ndr_conf_var_wide_stringz :root_share
|
13
|
+
ndr_uint32 :api_flags
|
14
|
+
|
15
|
+
def initialize_instance
|
16
|
+
super
|
17
|
+
@opnum = NETR_DFS_REMOVE_STD_ROOT
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module RubySMB
|
2
|
+
module Dcerpc
|
3
|
+
module Dfsnm
|
4
|
+
|
5
|
+
# [3.1.4.4.2 NetrDfsRemoveStdRoot (Opnum 13)](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dfsnm/e9da023d-554a-49bc-837a-69f22d59fd18)
|
6
|
+
class NetrDfsRemoveStdRootResponse < BinData::Record
|
7
|
+
attr_reader :opnum
|
8
|
+
|
9
|
+
endian :little
|
10
|
+
|
11
|
+
ndr_uint32 :error_status
|
12
|
+
|
13
|
+
def initialize_instance
|
14
|
+
super
|
15
|
+
@opnum = NETR_DFS_REMOVE_STD_ROOT
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module RubySMB
|
2
|
+
module Dcerpc
|
3
|
+
module Dfsnm
|
4
|
+
|
5
|
+
UUID = '4fc742e0-4a10-11cf-8273-00aa004ae673'
|
6
|
+
VER_MAJOR = 3
|
7
|
+
VER_MINOR = 0
|
8
|
+
|
9
|
+
# Operation numbers
|
10
|
+
NETR_DFS_ADD_STD_ROOT = 0x000c
|
11
|
+
NETR_DFS_REMOVE_STD_ROOT = 0x000d
|
12
|
+
|
13
|
+
require 'ruby_smb/dcerpc/dfsnm/netr_dfs_add_std_root_request'
|
14
|
+
require 'ruby_smb/dcerpc/dfsnm/netr_dfs_add_std_root_response'
|
15
|
+
require 'ruby_smb/dcerpc/dfsnm/netr_dfs_remove_std_root_request'
|
16
|
+
require 'ruby_smb/dcerpc/dfsnm/netr_dfs_remove_std_root_response'
|
17
|
+
|
18
|
+
# Create a new stand-alone DFS namespace.
|
19
|
+
#
|
20
|
+
# @param server_name [String] The host name of the DFS root target.
|
21
|
+
# @param root_share [String] The DFS root target share name.
|
22
|
+
# @param comment [String] A comment associated with the DFS namespace.
|
23
|
+
# @return nothing is returned on success
|
24
|
+
# @raise [RubySMB::Dcerpc::Error::InvalidPacket] if the response is not a
|
25
|
+
# NetrDfsAddStdRootResponse packet
|
26
|
+
# @raise [RubySMB::Dcerpc::Error::DfsnmError] if the response error status
|
27
|
+
# is not ERROR_SUCCESS
|
28
|
+
def netr_dfs_add_std_root(server_name, root_share, comment: '')
|
29
|
+
netr_dfs_add_std_root_request = NetrDfsAddStdRootRequest.new(
|
30
|
+
server_name: server_name,
|
31
|
+
root_share: root_share,
|
32
|
+
comment: comment
|
33
|
+
)
|
34
|
+
response = dcerpc_request(netr_dfs_add_std_root_request)
|
35
|
+
begin
|
36
|
+
netr_dfs_add_std_root_response = NetrDfsAddStdRootResponse.read(response)
|
37
|
+
rescue IOError
|
38
|
+
raise RubySMB::Dcerpc::Error::InvalidPacket, 'Error reading NetrDfsAddStdRootResponse'
|
39
|
+
end
|
40
|
+
unless netr_dfs_add_std_root_response.error_status == WindowsError::Win32::ERROR_SUCCESS
|
41
|
+
status_code = WindowsError::Win32.find_by_retval(netr_dfs_add_std_root_response.error_status.value).first
|
42
|
+
raise RubySMB::Dcerpc::Error::DfsnmError.new(
|
43
|
+
"Error returned with netr_dfs_add_std_root: #{status_code}",
|
44
|
+
status_code: status_code
|
45
|
+
)
|
46
|
+
end
|
47
|
+
|
48
|
+
nil
|
49
|
+
end
|
50
|
+
|
51
|
+
# Delete the specified stand-alone DFS namespace.
|
52
|
+
#
|
53
|
+
# @param server_name [String] The host name of the DFS root target.
|
54
|
+
# @param root_share [String] The DFS root target share name.
|
55
|
+
# @return nothing is returned on success
|
56
|
+
# @raise [RubySMB::Dcerpc::Error::InvalidPacket] if the response is not a
|
57
|
+
# NetrDfsRemoveStdRootResponse packet
|
58
|
+
# @raise [RubySMB::Dcerpc::Error::DfsnmError] if the response error status
|
59
|
+
# is not ERROR_SUCCESS
|
60
|
+
def netr_dfs_remove_std_root(server_name, root_share)
|
61
|
+
netr_dfs_remove_std_root_request = NetrDfsRemoveStdRootRequest.new(
|
62
|
+
server_name: server_name,
|
63
|
+
root_share: root_share
|
64
|
+
)
|
65
|
+
response = dcerpc_request(netr_dfs_remove_std_root_request)
|
66
|
+
begin
|
67
|
+
netr_dfs_remove_std_root_response = NetrDfsRemoveStdRootResponse.read(response)
|
68
|
+
rescue IOError
|
69
|
+
raise RubySMB::Dcerpc::Error::InvalidPacket, 'Error reading NetrDfsRemoveStdRootResponse'
|
70
|
+
end
|
71
|
+
unless netr_dfs_remove_std_root_response.error_status == WindowsError::Win32::ERROR_SUCCESS
|
72
|
+
status_code = WindowsError::Win32.find_by_retval(netr_dfs_remove_std_root_response.error_status.value).first
|
73
|
+
raise RubySMB::Dcerpc::Error::DfsnmError.new(
|
74
|
+
"Error returned with netr_dfs_remove_std_root: #{status_code}",
|
75
|
+
status_code: status_code
|
76
|
+
)
|
77
|
+
end
|
78
|
+
|
79
|
+
nil
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -46,6 +46,17 @@ module RubySMB
|
|
46
46
|
|
47
47
|
# Raised when an error is returned during a Epm operation
|
48
48
|
class EpmError < DcerpcError; end
|
49
|
+
|
50
|
+
# Raised when an error is returned during a Dfsnm operation
|
51
|
+
class DfsnmError < DcerpcError
|
52
|
+
include RubySMB::Error::UnexpectedStatusCode::Mixin
|
53
|
+
|
54
|
+
def initialize(msg, status_code: nil)
|
55
|
+
self.status_code = status_code unless status_code.nil?
|
56
|
+
|
57
|
+
super(msg)
|
58
|
+
end
|
59
|
+
end
|
49
60
|
end
|
50
61
|
end
|
51
62
|
end
|
@@ -90,7 +90,12 @@ module RubySMB
|
|
90
90
|
drs_domain_controller_info_request Drsr::DRS_DOMAIN_CONTROLLER_INFO
|
91
91
|
drs_crack_names_request Drsr::DRS_CRACK_NAMES
|
92
92
|
drs_get_nc_changes_request Drsr::DRS_GET_NC_CHANGES
|
93
|
-
string
|
93
|
+
string :default
|
94
|
+
end
|
95
|
+
choice 'Dfsnm', selection: -> { opnum } do
|
96
|
+
netr_dfs_add_std_root_request Dfsnm::NETR_DFS_ADD_STD_ROOT
|
97
|
+
netr_dfs_remove_std_root_request Dfsnm::NETR_DFS_REMOVE_STD_ROOT
|
98
|
+
string :default
|
94
99
|
end
|
95
100
|
string :default
|
96
101
|
end
|
data/lib/ruby_smb/dcerpc.rb
CHANGED
@@ -46,6 +46,7 @@ module RubySMB
|
|
46
46
|
require 'ruby_smb/dcerpc/epm'
|
47
47
|
require 'ruby_smb/dcerpc/drsr'
|
48
48
|
require 'ruby_smb/dcerpc/sec_trailer'
|
49
|
+
require 'ruby_smb/dcerpc/dfsnm'
|
49
50
|
require 'ruby_smb/dcerpc/request'
|
50
51
|
require 'ruby_smb/dcerpc/response'
|
51
52
|
require 'ruby_smb/dcerpc/rpc_auth3'
|
data/lib/ruby_smb/error.rb
CHANGED
@@ -70,20 +70,30 @@ module RubySMB
|
|
70
70
|
|
71
71
|
# Raised when a response packet has a NTStatus code that was unexpected.
|
72
72
|
class UnexpectedStatusCode < RubySMBError
|
73
|
-
|
73
|
+
module Mixin
|
74
|
+
attr_reader :status_code
|
74
75
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
@status_code = WindowsError::
|
76
|
+
private
|
77
|
+
|
78
|
+
def status_code=(status_code)
|
79
|
+
case status_code
|
80
|
+
when WindowsError::ErrorCode
|
81
|
+
@status_code = status_code
|
82
|
+
when Integer
|
83
|
+
@status_code = WindowsError::NTStatus.find_by_retval(status_code).first
|
84
|
+
if @status_code.nil?
|
85
|
+
@status_code = WindowsError::ErrorCode.new("0x#{status_code.to_s(16).rjust(8, '0')}", status_code, "Unknown status: 0x#{status_code.to_s(16)}")
|
86
|
+
end
|
87
|
+
else
|
88
|
+
raise ArgumentError, "Status code must be a WindowsError::ErrorCode or an Integer, got #{status_code.class}"
|
83
89
|
end
|
84
|
-
else
|
85
|
-
raise ArgumentError, "Status code must be a WindowsError::ErrorCode or an Integer, got #{status_code.class}"
|
86
90
|
end
|
91
|
+
end
|
92
|
+
|
93
|
+
include Mixin
|
94
|
+
|
95
|
+
def initialize(status_code)
|
96
|
+
self.status_code = status_code
|
87
97
|
super
|
88
98
|
end
|
89
99
|
|
data/lib/ruby_smb/smb1/pipe.rb
CHANGED
data/lib/ruby_smb/smb2/pipe.rb
CHANGED
data/lib/ruby_smb/version.rb
CHANGED
@@ -0,0 +1,57 @@
|
|
1
|
+
RSpec.describe RubySMB::Dcerpc::Dfsnm::NetrDfsAddStdRootRequest do
|
2
|
+
subject(:packet) { described_class.new }
|
3
|
+
|
4
|
+
it { is_expected.to respond_to :server_name }
|
5
|
+
it { is_expected.to respond_to :root_share }
|
6
|
+
it { is_expected.to respond_to :comment }
|
7
|
+
it { is_expected.to respond_to :api_flags }
|
8
|
+
it { is_expected.to respond_to :opnum }
|
9
|
+
|
10
|
+
it 'is little endian' do
|
11
|
+
expect(described_class.fields.instance_variable_get(:@hints)[:endian]).to eq :little
|
12
|
+
end
|
13
|
+
it 'is a BinData::Record' do
|
14
|
+
expect(packet).to be_a(BinData::Record)
|
15
|
+
end
|
16
|
+
describe '#server_name' do
|
17
|
+
it 'is a NdrConfVarWideStringz structure' do
|
18
|
+
expect(packet.server_name).to be_a RubySMB::Dcerpc::Ndr::NdrConfVarWideStringz
|
19
|
+
end
|
20
|
+
end
|
21
|
+
describe '#root_share' do
|
22
|
+
it 'is a NdrConfVarWideStringz structure' do
|
23
|
+
expect(packet.root_share).to be_a RubySMB::Dcerpc::Ndr::NdrConfVarWideStringz
|
24
|
+
end
|
25
|
+
end
|
26
|
+
describe '#comment' do
|
27
|
+
it 'is a NdrConfVarWideStringz structure' do
|
28
|
+
expect(packet.comment).to be_a RubySMB::Dcerpc::Ndr::NdrConfVarWideStringz
|
29
|
+
end
|
30
|
+
end
|
31
|
+
describe '#api_flags' do
|
32
|
+
it 'is a NdrUint32 structure' do
|
33
|
+
expect(packet.api_flags).to be_a RubySMB::Dcerpc::Ndr::NdrUint32
|
34
|
+
end
|
35
|
+
end
|
36
|
+
describe '#initialize_instance' do
|
37
|
+
it 'sets #opnum to NETR_DFS_ADD_STD_ROOT constant' do
|
38
|
+
expect(packet.opnum).to eq(RubySMB::Dcerpc::Dfsnm::NETR_DFS_ADD_STD_ROOT)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
it 'reads itself' do
|
42
|
+
new_packet = described_class.new({
|
43
|
+
server_name: 'serverName',
|
44
|
+
root_share: 'rootShare',
|
45
|
+
comment: 'comment'
|
46
|
+
})
|
47
|
+
expected_output = {
|
48
|
+
server_name: 'serverName'.encode('utf-16le'),
|
49
|
+
root_share: 'rootShare'.encode('utf-16le'),
|
50
|
+
comment: 'comment'.encode('utf-16le'),
|
51
|
+
api_flags: 0
|
52
|
+
}
|
53
|
+
expect(packet.read(new_packet.to_binary_s)).to eq(expected_output)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
|
@@ -0,0 +1,34 @@
|
|
1
|
+
RSpec.describe RubySMB::Dcerpc::Dfsnm::NetrDfsAddStdRootResponse do
|
2
|
+
subject(:packet) { described_class.new }
|
3
|
+
|
4
|
+
it { is_expected.to respond_to :error_status }
|
5
|
+
it { is_expected.to respond_to :opnum }
|
6
|
+
|
7
|
+
it 'is little endian' do
|
8
|
+
expect(described_class.fields.instance_variable_get(:@hints)[:endian]).to eq :little
|
9
|
+
end
|
10
|
+
it 'is a BinData::Record' do
|
11
|
+
expect(packet).to be_a(BinData::Record)
|
12
|
+
end
|
13
|
+
describe '#error_status' do
|
14
|
+
it 'is a NdrUint32 structure' do
|
15
|
+
expect(packet.error_status).to be_a RubySMB::Dcerpc::Ndr::NdrUint32
|
16
|
+
end
|
17
|
+
end
|
18
|
+
describe '#initialize_instance' do
|
19
|
+
it 'sets #opnum to NETR_DFS_ADD_STD_ROOT constant' do
|
20
|
+
expect(packet.opnum).to eq(RubySMB::Dcerpc::Dfsnm::NETR_DFS_ADD_STD_ROOT)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
it 'reads itself' do
|
24
|
+
new_packet = described_class.new({
|
25
|
+
error_status: 0
|
26
|
+
})
|
27
|
+
expected_output = {
|
28
|
+
error_status: 0
|
29
|
+
}
|
30
|
+
expect(packet.read(new_packet.to_binary_s)).to eq(expected_output)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
|
@@ -0,0 +1,49 @@
|
|
1
|
+
RSpec.describe RubySMB::Dcerpc::Dfsnm::NetrDfsRemoveStdRootRequest do
|
2
|
+
subject(:packet) { described_class.new }
|
3
|
+
|
4
|
+
it { is_expected.to respond_to :server_name }
|
5
|
+
it { is_expected.to respond_to :root_share }
|
6
|
+
it { is_expected.to respond_to :api_flags }
|
7
|
+
it { is_expected.to respond_to :opnum }
|
8
|
+
|
9
|
+
it 'is little endian' do
|
10
|
+
expect(described_class.fields.instance_variable_get(:@hints)[:endian]).to eq :little
|
11
|
+
end
|
12
|
+
it 'is a BinData::Record' do
|
13
|
+
expect(packet).to be_a(BinData::Record)
|
14
|
+
end
|
15
|
+
describe '#server_name' do
|
16
|
+
it 'is a NdrConfVarWideStringz structure' do
|
17
|
+
expect(packet.server_name).to be_a RubySMB::Dcerpc::Ndr::NdrConfVarWideStringz
|
18
|
+
end
|
19
|
+
end
|
20
|
+
describe '#root_share' do
|
21
|
+
it 'is a NdrConfVarWideStringz structure' do
|
22
|
+
expect(packet.root_share).to be_a RubySMB::Dcerpc::Ndr::NdrConfVarWideStringz
|
23
|
+
end
|
24
|
+
end
|
25
|
+
describe '#api_flags' do
|
26
|
+
it 'is a NdrUint32 structure' do
|
27
|
+
expect(packet.api_flags).to be_a RubySMB::Dcerpc::Ndr::NdrUint32
|
28
|
+
end
|
29
|
+
end
|
30
|
+
describe '#initialize_instance' do
|
31
|
+
it 'sets #opnum to NETR_DFS_REMOVE_STD_ROOT constant' do
|
32
|
+
expect(packet.opnum).to eq(RubySMB::Dcerpc::Dfsnm::NETR_DFS_REMOVE_STD_ROOT)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
it 'reads itself' do
|
36
|
+
new_packet = described_class.new({
|
37
|
+
server_name: 'serverName',
|
38
|
+
root_share: 'rootShare',
|
39
|
+
})
|
40
|
+
expected_output = {
|
41
|
+
server_name: 'serverName'.encode('utf-16le'),
|
42
|
+
root_share: 'rootShare'.encode('utf-16le'),
|
43
|
+
api_flags: 0
|
44
|
+
}
|
45
|
+
expect(packet.read(new_packet.to_binary_s)).to eq(expected_output)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
|
@@ -0,0 +1,34 @@
|
|
1
|
+
RSpec.describe RubySMB::Dcerpc::Dfsnm::NetrDfsRemoveStdRootResponse do
|
2
|
+
subject(:packet) { described_class.new }
|
3
|
+
|
4
|
+
it { is_expected.to respond_to :error_status }
|
5
|
+
it { is_expected.to respond_to :opnum }
|
6
|
+
|
7
|
+
it 'is little endian' do
|
8
|
+
expect(described_class.fields.instance_variable_get(:@hints)[:endian]).to eq :little
|
9
|
+
end
|
10
|
+
it 'is a BinData::Record' do
|
11
|
+
expect(packet).to be_a(BinData::Record)
|
12
|
+
end
|
13
|
+
describe '#error_status' do
|
14
|
+
it 'is a NdrUint32 structure' do
|
15
|
+
expect(packet.error_status).to be_a RubySMB::Dcerpc::Ndr::NdrUint32
|
16
|
+
end
|
17
|
+
end
|
18
|
+
describe '#initialize_instance' do
|
19
|
+
it 'sets #opnum to NETR_DFS_REMOVE_STD_ROOT constant' do
|
20
|
+
expect(packet.opnum).to eq(RubySMB::Dcerpc::Dfsnm::NETR_DFS_REMOVE_STD_ROOT)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
it 'reads itself' do
|
24
|
+
new_packet = described_class.new({
|
25
|
+
error_status: 0
|
26
|
+
})
|
27
|
+
expected_output = {
|
28
|
+
error_status: 0
|
29
|
+
}
|
30
|
+
expect(packet.read(new_packet.to_binary_s)).to eq(expected_output)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
|
data.tar.gz.sig
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_smb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Metasploit Hackers
|
@@ -97,7 +97,7 @@ cert_chain:
|
|
97
97
|
EknWpNgVhohbot1lfVAMmIhdtOVaRVcQQixWPwprDj/ydB8ryDMDosIMcw+fkoXU
|
98
98
|
9GJsSaSRRYQ9UUkVL27b64okU8D48m8=
|
99
99
|
-----END CERTIFICATE-----
|
100
|
-
date: 2022-06
|
100
|
+
date: 2022-07-06 00:00:00.000000000 Z
|
101
101
|
dependencies:
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: redcarpet
|
@@ -298,6 +298,11 @@ files:
|
|
298
298
|
- lib/ruby_smb/dcerpc/bind.rb
|
299
299
|
- lib/ruby_smb/dcerpc/bind_ack.rb
|
300
300
|
- lib/ruby_smb/dcerpc/client.rb
|
301
|
+
- lib/ruby_smb/dcerpc/dfsnm.rb
|
302
|
+
- lib/ruby_smb/dcerpc/dfsnm/netr_dfs_add_std_root_request.rb
|
303
|
+
- lib/ruby_smb/dcerpc/dfsnm/netr_dfs_add_std_root_response.rb
|
304
|
+
- lib/ruby_smb/dcerpc/dfsnm/netr_dfs_remove_std_root_request.rb
|
305
|
+
- lib/ruby_smb/dcerpc/dfsnm/netr_dfs_remove_std_root_response.rb
|
301
306
|
- lib/ruby_smb/dcerpc/drsr.rb
|
302
307
|
- lib/ruby_smb/dcerpc/drsr/drs_bind_request.rb
|
303
308
|
- lib/ruby_smb/dcerpc/drsr/drs_bind_response.rb
|
@@ -672,6 +677,10 @@ files:
|
|
672
677
|
- spec/lib/ruby_smb/dcerpc/bind_ack_spec.rb
|
673
678
|
- spec/lib/ruby_smb/dcerpc/bind_spec.rb
|
674
679
|
- spec/lib/ruby_smb/dcerpc/client_spec.rb
|
680
|
+
- spec/lib/ruby_smb/dcerpc/dfsnm/netr_dfs_add_std_root_request_spec.rb
|
681
|
+
- spec/lib/ruby_smb/dcerpc/dfsnm/netr_dfs_add_std_root_response_spec.rb
|
682
|
+
- spec/lib/ruby_smb/dcerpc/dfsnm/netr_dfs_remove_std_root_request_spec.rb
|
683
|
+
- spec/lib/ruby_smb/dcerpc/dfsnm/netr_dfs_remove_std_root_response_spec.rb
|
675
684
|
- spec/lib/ruby_smb/dcerpc/drsr_spec.rb
|
676
685
|
- spec/lib/ruby_smb/dcerpc/encrypting_file_system/efs_rpc_encrypt_file_srv_request_spec.rb
|
677
686
|
- spec/lib/ruby_smb/dcerpc/encrypting_file_system/efs_rpc_encrypt_file_srv_response_spec.rb
|
@@ -994,6 +1003,10 @@ test_files:
|
|
994
1003
|
- spec/lib/ruby_smb/dcerpc/bind_ack_spec.rb
|
995
1004
|
- spec/lib/ruby_smb/dcerpc/bind_spec.rb
|
996
1005
|
- spec/lib/ruby_smb/dcerpc/client_spec.rb
|
1006
|
+
- spec/lib/ruby_smb/dcerpc/dfsnm/netr_dfs_add_std_root_request_spec.rb
|
1007
|
+
- spec/lib/ruby_smb/dcerpc/dfsnm/netr_dfs_add_std_root_response_spec.rb
|
1008
|
+
- spec/lib/ruby_smb/dcerpc/dfsnm/netr_dfs_remove_std_root_request_spec.rb
|
1009
|
+
- spec/lib/ruby_smb/dcerpc/dfsnm/netr_dfs_remove_std_root_response_spec.rb
|
997
1010
|
- spec/lib/ruby_smb/dcerpc/drsr_spec.rb
|
998
1011
|
- spec/lib/ruby_smb/dcerpc/encrypting_file_system/efs_rpc_encrypt_file_srv_request_spec.rb
|
999
1012
|
- spec/lib/ruby_smb/dcerpc/encrypting_file_system/efs_rpc_encrypt_file_srv_response_spec.rb
|
metadata.gz.sig
CHANGED
Binary file
|