ruby_smb 3.3.13 → 3.3.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3c74027d4436875845c9d219abd7cb3243d80acd61fbaeabb9c1256571354634
4
- data.tar.gz: 8dbe5857343dbb8e1b163c29a7d3ef8d8e30aa06dc7527195772a058f4022321
3
+ metadata.gz: c0e82037a7cede300c72e18aca227e16dd6f6c67c46e739aae546ff990562a20
4
+ data.tar.gz: ac24976008cf479989fbea0edc88ceafec163c998a7d5a87ea4b085ae1f6fcd6
5
5
  SHA512:
6
- metadata.gz: 5ed11e51a9babe4a7e478e4903dd4c201c8e714288ab49766e62ba3c01cf9b8358899276ecece683dbb586777739a016579e06a9dd9e6581e03a408a6a27cf5c
7
- data.tar.gz: a7bf609a4b94040075adda0c17728ef306d780d28db06f47fa2d1c9b6729821309c3c5395c5bb8d22ad76fe693f7f7b21a2de9f9239211af64417ef35da16e37
6
+ metadata.gz: c9f2bae08d955e0a977b5614a577ff1801f8b977a675f21a70ec7dac2b695d6215d91cd3f69b37b354022aba93494be64687b90e96c8a7b75390384eb7dd0b99
7
+ data.tar.gz: de80907d4e9d1d91de05ca1b363ba94da81f2f39fd089bad724d1b6c2b5fae8ed8048b66ac84238174f573dbb362e49d809734446e5381b1914bc5cd9b8286ce
data/cortex.yaml CHANGED
@@ -10,6 +10,8 @@ info:
10
10
  x-cortex-type: service
11
11
  x-cortex-domain-parents:
12
12
  - tag: metasploit
13
+ x-cortex-groups:
14
+ - exposure:external-ship
13
15
  openapi: 3.0.1
14
16
  servers:
15
17
  - url: "/"
@@ -70,6 +70,16 @@ module RubySMB
70
70
  super(msg)
71
71
  end
72
72
  end
73
+
74
+ class GkdiError < DcerpcError
75
+ include RubySMB::Error::UnexpectedStatusCode::Mixin
76
+
77
+ def initialize(msg, status_code: nil)
78
+ self.status_code = status_code unless status_code.nil?
79
+
80
+ super(msg)
81
+ end
82
+ end
73
83
  end
74
84
  end
75
85
  end
@@ -0,0 +1,17 @@
1
+ module RubySMB
2
+ module Dcerpc
3
+ module Gkdi
4
+
5
+ # [2.2.3.1 FFC DH Key](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-gkdi/f8770f01-036d-4bf6-a4cf-1bd0e3913404)
6
+ class GkdiFfcDhKey < BinData::Record
7
+ endian :little
8
+
9
+ uint8_array :magic, initial_length: 4, initial_value: [ 0x44, 0x48, 0x50, 0x42 ]
10
+ uint32 :key_length
11
+ uint8_array :field_order, initial_length: :key_length
12
+ uint8_array :generator, initial_length: :key_length
13
+ uint8_array :public_key, initial_length: :key_length
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module RubySMB
2
+ module Dcerpc
3
+ module Gkdi
4
+
5
+ # [2.2.2 FFC DH Parameters](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-gkdi/e15ae269-ee21-446a-a480-de3ea243db5f)
6
+ class GkdiFfcDhParameters < BinData::Record
7
+ endian :little
8
+
9
+ uint32 :parameters_length, initial_value: -> { (key_length * 2) + offset_of(generator) }
10
+ uint8_array :magic, initial_length: 4, initial_value: [ 0x44, 0x48, 0x50, 0x4d ]
11
+ uint32 :key_length
12
+ uint8_array :field_order, initial_length: :key_length
13
+ uint8_array :generator, initial_length: :key_length
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,26 @@
1
+ module RubySMB
2
+ module Dcerpc
3
+ module Gkdi
4
+
5
+ # [3.1.4.1 GetKey (Opnum 0)](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-gkdi/4cac87a3-521e-4918-a272-240f8fabed39)
6
+ class GkdiGetKeyRequest < BinData::Record
7
+ attr_reader :opnum
8
+
9
+ endian :little
10
+
11
+ ndr_uint32 :cb_target_sd
12
+ ndr_conf_array :pb_target_sd, type: :ndr_uint8
13
+ uuid_ptr :p_root_key_id
14
+ ndr_int32 :l0_key_id
15
+ ndr_int32 :l1_key_id
16
+ ndr_int32 :l2_key_id
17
+
18
+ def initialize_instance
19
+ super
20
+ @opnum = GKDI_GET_KEY
21
+ end
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,23 @@
1
+ module RubySMB
2
+ module Dcerpc
3
+ module Gkdi
4
+
5
+ # [3.1.4.1 GetKey (Opnum 0)](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-gkdi/4cac87a3-521e-4918-a272-240f8fabed39)
6
+ class GkdiGetKeyResponse < BinData::Record
7
+ attr_reader :opnum
8
+
9
+ endian :little
10
+
11
+ ndr_uint32 :pcb_out
12
+ ndr_byte_conf_array_ptr :pbb_out
13
+ ndr_uint32 :error_status
14
+
15
+ def initialize_instance
16
+ super
17
+ @opnum = GKDI_GET_KEY
18
+ end
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,51 @@
1
+ module RubySMB
2
+ module Dcerpc
3
+ module Gkdi
4
+
5
+ # [2.2.4 Group Key Envelope](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-gkdi/192c061c-e740-4aa0-ab1d-6954fb3e58f7)
6
+ class GkdiGroupKeyEnvelope < BinData::Record
7
+ endian :little
8
+
9
+ uint32 :version
10
+ uint8_array :magic, initial_length: 4, initial_value: [ 0x4b, 0x44, 0x53, 0x5b ]
11
+ uint32 :dw_flags
12
+ uint32 :l0_index
13
+ uint32 :l1_index
14
+ uint32 :l2_index
15
+ uuid :root_key_identifier
16
+ uint32 :cb_kdf_algorithm
17
+ uint32 :cb_kdf_parameters, initial_value: -> { kdf_parameters.length }
18
+ uint32 :cb_secret_agreement_algorithm
19
+ uint32 :cb_secret_agreement_parameters
20
+ uint32 :private_key_length
21
+ uint32 :public_key_length
22
+ uint32 :cb_l1_key
23
+ uint32 :cb_l2_key
24
+ uint32 :cb_domain_name
25
+ uint32 :cb_forest_name
26
+ stringz16 :kdf_algorithm
27
+ struct :kdf_parameters, only_if: -> { cb_kdf_parameters > 0 } do
28
+ uint8_array :block0, initial_length: 8, initial_value: [ 0, 0, 0, 0, 1, 0, 0, 0 ]
29
+ uint32 :length_of_hash_name, initial_value: -> { hash_algorithm_name.length }
30
+ uint8_array :block1, initial_length: 4, initial_value: [ 0, 0, 0, 0 ]
31
+ stringz16 :hash_algorithm_name
32
+ end
33
+ stringz16 :secret_agreement_algorithm
34
+ uint8_array :secret_agreement_parameters, initial_length: :cb_secret_agreement_parameters
35
+ stringz16 :domain_name
36
+ stringz16 :forest_name
37
+ uint8_array :l1_key, initial_length: 64, only_if: -> { cb_l1_key != 0 }
38
+ uint8_array :l2_key, initial_length: :l2_key_length, only_if: -> { cb_l2_key != 0 }
39
+
40
+ private
41
+
42
+ def l2_key_length
43
+ return 0 if cb_l2_key == 0
44
+ return 64 if (dw_flags & (1 << 31)) == 0
45
+
46
+ public_key_length
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,54 @@
1
+ module RubySMB
2
+ module Dcerpc
3
+ module Gkdi
4
+
5
+ # [2.1 Transport](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-gkdi/2ca63ad2-2464-4a41-ba84-2e0270e95e86)
6
+ UUID = 'b9785960-524f-11df-8b6d-83dcded72085'
7
+ VER_MAJOR = 1
8
+ VER_MINOR = 0
9
+
10
+ # Operation numbers
11
+ GKDI_GET_KEY = 0x0000
12
+
13
+ require 'ruby_smb/dcerpc/gkdi/gkdi_get_key_request'
14
+ require 'ruby_smb/dcerpc/gkdi/gkdi_get_key_response'
15
+ require 'ruby_smb/dcerpc/gkdi/gkdi_ffc_dh_key'
16
+ require 'ruby_smb/dcerpc/gkdi/gkdi_ffc_dh_parameters'
17
+ require 'ruby_smb/dcerpc/gkdi/gkdi_group_key_envelope'
18
+
19
+ def gkdi_get_key(target_sd, root_key_id, l0_key_id, l1_key_id, l2_key_id)
20
+ target_sd = target_sd.to_binary_s if target_sd.respond_to?(:to_binary_s)
21
+
22
+ gkdi_get_key_request = GkdiGetKeyRequest.new(
23
+ cb_target_sd: target_sd.length,
24
+ pb_target_sd: target_sd.unpack('C*'),
25
+ p_root_key_id: root_key_id,
26
+ l0_key_id: l0_key_id,
27
+ l1_key_id: l1_key_id,
28
+ l2_key_id: l2_key_id
29
+ )
30
+
31
+ response = dcerpc_request(
32
+ gkdi_get_key_request,
33
+ auth_level: @auth_level,
34
+ auth_type: @auth_type
35
+ )
36
+ begin
37
+ gkdi_get_key_response = GkdiGetKeyResponse.read(response)
38
+ rescue IOError
39
+ raise RubySMB::Dcerpc::Error::InvalidPacket, 'Error reading CertServerRequestResponse'
40
+ end
41
+ unless gkdi_get_key_response.error_status == WindowsError::NTStatus::STATUS_SUCCESS
42
+ status_code = WindowsError::Win32.find_by_retval(gkdi_get_key_response.error_status.value).first
43
+ raise RubySMB::Dcerpc::Error::GkdiError.new(
44
+ "Error returned with gkdi_get_key: #{status_code}",
45
+ status_code: status_code
46
+ )
47
+ end
48
+
49
+ GkdiGroupKeyEnvelope.read(gkdi_get_key_response.pbb_out.snapshot.pack('C*'))
50
+ end
51
+
52
+ end
53
+ end
54
+ end
@@ -124,6 +124,9 @@ module RubySMB
124
124
  lsar_close_handle_request Lsarpc::LSAR_CLOSE_HANDLE
125
125
  lsar_lookup_sids_request Lsarpc::LSAR_LOOKUP_SIDS
126
126
  end
127
+ choice 'Gkdi', selection: -> { opnum } do
128
+ gkdi_get_key_request Gkdi::GKDI_GET_KEY
129
+ end
127
130
  string :default
128
131
  end
129
132
 
@@ -522,16 +522,25 @@ module RubySMB
522
522
  # [2.2.10.1 USER_PROPERTIES](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-samr/8263e7ab-aba9-43d2-8a36-3a9cb2dd3dad)
523
523
  class UserProperties < BinData::Record
524
524
  endian :little
525
+ hide :bytes_remaining
525
526
 
526
527
  uint32 :reserved1
527
- uint32 :struct_length, initial_value: -> { num_bytes - 12 }
528
+ # Length, in bytes, of the entire structure, starting from the :reserved4 field (offset 12):
529
+ uint32 :struct_length, value: -> { num_bytes - 12}
528
530
  uint16 :reserved2
529
531
  uint16 :reserved3
530
532
  string :reserved4, length: 96
531
533
  uint16 :property_signature, initial_value: 0x50
532
- uint16 :property_count, initial_value: -> { user_properties.size }, onlyif: -> { struct_length > 111 }
533
- array :user_properties, type: :user_property, initial_length: :property_count, onlyif: :property_count?
534
+ count_bytes_remaining :bytes_remaining
535
+ # When there are zero `user_property` elements in the `:user_properties` field, this field MUST be omitted;
536
+ # the resultant `UserProperties` structure has a constant size of 0x6F bytes.
537
+ uint16 :property_count, value: -> { user_properties.size }, onlyif: :display_user_properties?
538
+ array :user_properties, type: :user_property, read_until: -> { array.size == property_count }, onlyif: :display_user_properties?
534
539
  uint8 :reserved5
540
+
541
+ def display_user_properties?
542
+ (bytes_remaining > 1 && reading?) || user_properties.size > 0
543
+ end
535
544
  end
536
545
 
537
546
  # [2.2.10.7 KERB_KEY_DATA_NEW](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-samr/447520a5-e1cc-48cc-8fdc-b90db57f7eac)
@@ -50,6 +50,7 @@ module RubySMB
50
50
  require 'ruby_smb/dcerpc/icpr'
51
51
  require 'ruby_smb/dcerpc/efsrpc'
52
52
  require 'ruby_smb/dcerpc/lsarpc'
53
+ require 'ruby_smb/dcerpc/gkdi'
53
54
  require 'ruby_smb/dcerpc/request'
54
55
  require 'ruby_smb/dcerpc/response'
55
56
  require 'ruby_smb/dcerpc/rpc_auth3'
@@ -1,3 +1,3 @@
1
1
  module RubySMB
2
- VERSION = '3.3.13'.freeze
2
+ VERSION = '3.3.14'.freeze
3
3
  end
@@ -0,0 +1,76 @@
1
+ RSpec.describe RubySMB::Dcerpc::Samr::UserProperties do
2
+ describe '#read' do
3
+ context 'when reading a structure with no user properties' do
4
+ let(:binary) { [ 0, 0x63, 0, 0, 0x50, 0].pack('L<L<S<S<x96<SC') }
5
+ let(:subject) { described_class.read(binary) }
6
+
7
+ it 'does not include the property_count' do
8
+ expect(subject.property_count?).to be_falsey
9
+ expect(subject.snapshot).to_not include(:property_count)
10
+ end
11
+
12
+ it 'does not include the user_properties' do
13
+ expect(subject.user_properties?).to be_falsey
14
+ expect(subject.snapshot).to_not include(:user_properties)
15
+ end
16
+
17
+ it 'serializes to the value that was read' do
18
+ expect(subject.to_binary_s).to eq(binary)
19
+ end
20
+ end
21
+
22
+ context 'when reading a structure with two user properties' do
23
+ let(:user_property1) { RubySMB::Dcerpc::Samr::UserProperty.new(property_name: 'key1', property_value: 'value1') }
24
+ let(:user_property2) { RubySMB::Dcerpc::Samr::UserProperty.new(property_name: 'key2', property_value: 'value2') }
25
+ let(:user_properties) { user_property1.to_binary_s + user_property2.to_binary_s }
26
+ let(:binary) { [ 0, 0x63 + 2 + user_properties.length, 0, 0, 0x50, 2].pack('L<L<S<S<x96<S<S') + user_properties + "\x00".b }
27
+ let(:subject) { described_class.read(binary) }
28
+
29
+ it 'includes the property_count' do
30
+ expect(subject.property_count?).to be_truthy
31
+ expect(subject.property_count).to eq(2)
32
+ expect(subject.snapshot).to include(:property_count)
33
+ end
34
+
35
+ it 'includes the user_properties' do
36
+ expect(subject.user_properties?).to be_truthy
37
+ expect(subject.user_properties).to eq([user_property1, user_property2])
38
+ expect(subject.snapshot).to include(:user_properties)
39
+ end
40
+
41
+ it 'serializes to the value that was read' do
42
+ expect(subject.to_binary_s).to eq(binary)
43
+ end
44
+
45
+ context 'when #user_properties is cleared' do
46
+ before(:each) { subject.user_properties.clear }
47
+
48
+ it 'does not include the property_count' do
49
+ expect(subject.property_count?).to be_falsey
50
+ expect(subject.snapshot).to_not include(:property_count)
51
+ end
52
+
53
+ it 'does not include the user_properties' do
54
+ expect(subject.user_properties?).to be_falsey
55
+ expect(subject.snapshot).to_not include(:user_properties)
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ describe '#initialize' do
62
+ let(:subject) { described_class.new }
63
+
64
+ it 'initializes #struct_length to 0x63' do
65
+ expect(subject.struct_length).to eq(0x63)
66
+ end
67
+
68
+ it 'initializes #property_signature to 0x50' do
69
+ expect(subject.property_signature).to eq(0x50)
70
+ end
71
+
72
+ it 'does not include user_properties' do
73
+ expect(subject.user_properties).to be_empty
74
+ end
75
+ end
76
+ end
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.3.13
4
+ version: 3.3.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Metasploit Hackers
@@ -10,36 +10,10 @@ authors:
10
10
  - Dev Mohanty
11
11
  - Christophe De La Fuente
12
12
  - Spencer McIntyre
13
- autorequire:
13
+ autorequire:
14
14
  bindir: bin
15
- cert_chain:
16
- - |
17
- -----BEGIN CERTIFICATE-----
18
- MIIERDCCAqygAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDDBttc2Zk
19
- ZXYvREM9bWV0YXNwbG9pdC9EQz1jb20wHhcNMjMxMDMwMTYwNDI1WhcNMjUxMDI5
20
- MTYwNDI1WjAmMSQwIgYDVQQDDBttc2ZkZXYvREM9bWV0YXNwbG9pdC9EQz1jb20w
21
- ggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDZN/EKv+yVjwiKWvjAVhjF
22
- aWNYI0E9bJ5d1qKd29omRYX9a+OOKBCu5+394fyF5RjwU4mYGr2iopX9ixRJrWXH
23
- ojs70tEvV1CmvP9rhz7JKzQQoJOkinrz4d+StIylxVxVdgm7DeiB3ruTwvl7qKUv
24
- piWzhrBFiVU6XIEAwq6wNEmnv2D+Omyf4h0Tf99hc6G0QmBnU3XydqvnZ+AzUbBV
25
- 24RH3+NQoigLbvK4M5aOeYhk19di58hznebOw6twHzNczshrBeMFQp985ScNgsvF
26
- rL+7HNNwpcpngERwZfzDNn7iYN5X3cyvTcykShtsuPMa5zXsYo42LZrsTF87DW38
27
- D8sxL6Dgdqu25Mltdw9m+iD4rHSfb1KJYEoNO+WwBJLO2Y4d6G1CR66tVeWsZspb
28
- zneOVC+sDuil7hOm+6a7Y2yrrRyT6IfL/07DywjPAIRUp5+Jn8ZrkWRNo2AOwWBG
29
- k5gz7SfJPHuyVnPlxoMA0MTFCUnnnbyHu882TGoJGgMCAwEAAaN9MHswCQYDVR0T
30
- BAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFIQfNa4E889ZE334cwU7eNu2hScH
31
- MCAGA1UdEQQZMBeBFW1zZmRldkBtZXRhc3Bsb2l0LmNvbTAgBgNVHRIEGTAXgRVt
32
- c2ZkZXZAbWV0YXNwbG9pdC5jb20wDQYJKoZIhvcNAQELBQADggGBAMfzvKcV27p7
33
- pctmpW2JmIXLMrjNLyGJAxELH/t9pJueXdga7uj2fJkYQDbwGw5x4MGyFqhqJLH4
34
- l/qsUF3PyAXDTSWLVaqXQVWO+IIHxecG0XjPXTNudzMU0hzqbqiBKvsW7/a3V5BP
35
- SWlFzrFkoXWlPouFpoakyYMJjpW4SGdPzRv7pM4OhXtkXpHiRvx5985FrHgHlI89
36
- NSIuIUbp8zqk4hP1i9MV0Lc/vTf2gOmo+RHnjqG1NiYfMCYyY/Mcd4W36kGOl468
37
- I8VDTwgCufkAzFu7BJ5yCOueqtDcuq+d3YhAyU7NI4+Ja8EwazOnB+07sWhKpg7z
38
- yuQ1mWYPmZfVQpoSVv1CvXsoqJYXVPBBLOacKKSj8ArVG6pPn9Bej7IOQdblaFjl
39
- DgscAao7wB3xW2BWEp1KnaDWkf1x9ttgoBEYyuYwU7uatB67kBQG1PKvLt79wHvz
40
- Dxs+KOjGbBRfMnPgVGYkORKVrZIwlaboHbDKxcVW5xv+oZc7KYXWGg==
41
- -----END CERTIFICATE-----
42
- date: 2024-12-06 00:00:00.000000000 Z
15
+ cert_chain: []
16
+ date: 2025-04-30 00:00:00.000000000 Z
43
17
  dependencies:
44
18
  - !ruby/object:Gem::Dependency
45
19
  name: redcarpet
@@ -279,6 +253,12 @@ files:
279
253
  - lib/ruby_smb/dcerpc/epm/epm_twrt.rb
280
254
  - lib/ruby_smb/dcerpc/error.rb
281
255
  - lib/ruby_smb/dcerpc/fault.rb
256
+ - lib/ruby_smb/dcerpc/gkdi.rb
257
+ - lib/ruby_smb/dcerpc/gkdi/gkdi_ffc_dh_key.rb
258
+ - lib/ruby_smb/dcerpc/gkdi/gkdi_ffc_dh_parameters.rb
259
+ - lib/ruby_smb/dcerpc/gkdi/gkdi_get_key_request.rb
260
+ - lib/ruby_smb/dcerpc/gkdi/gkdi_get_key_response.rb
261
+ - lib/ruby_smb/dcerpc/gkdi/gkdi_group_key_envelope.rb
282
262
  - lib/ruby_smb/dcerpc/icpr.rb
283
263
  - lib/ruby_smb/dcerpc/icpr/cert_server_request_request.rb
284
264
  - lib/ruby_smb/dcerpc/icpr/cert_server_request_response.rb
@@ -746,6 +726,7 @@ files:
746
726
  - spec/lib/ruby_smb/dcerpc/samr/samr_set_information_user2_response_spec.rb
747
727
  - spec/lib/ruby_smb/dcerpc/samr/samr_unicode_change_password_user2_request_spec.rb
748
728
  - spec/lib/ruby_smb/dcerpc/samr/samr_unicode_change_password_user2_response_spec.rb
729
+ - spec/lib/ruby_smb/dcerpc/samr/user_properties_spec.rb
749
730
  - spec/lib/ruby_smb/dcerpc/samr_spec.rb
750
731
  - spec/lib/ruby_smb/dcerpc/sec_trailer_spec.rb
751
732
  - spec/lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all_spec.rb
@@ -995,7 +976,7 @@ homepage: https://github.com/rapid7/ruby_smb
995
976
  licenses:
996
977
  - BSD-3-clause
997
978
  metadata: {}
998
- post_install_message:
979
+ post_install_message:
999
980
  rdoc_options: []
1000
981
  require_paths:
1001
982
  - lib
@@ -1010,8 +991,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1010
991
  - !ruby/object:Gem::Version
1011
992
  version: '0'
1012
993
  requirements: []
1013
- rubygems_version: 3.5.22
1014
- signing_key:
994
+ rubygems_version: 3.4.19
995
+ signing_key:
1015
996
  specification_version: 4
1016
997
  summary: A pure Ruby implementation of the SMB Protocol Family
1017
998
  test_files:
@@ -1096,6 +1077,7 @@ test_files:
1096
1077
  - spec/lib/ruby_smb/dcerpc/samr/samr_set_information_user2_response_spec.rb
1097
1078
  - spec/lib/ruby_smb/dcerpc/samr/samr_unicode_change_password_user2_request_spec.rb
1098
1079
  - spec/lib/ruby_smb/dcerpc/samr/samr_unicode_change_password_user2_response_spec.rb
1080
+ - spec/lib/ruby_smb/dcerpc/samr/user_properties_spec.rb
1099
1081
  - spec/lib/ruby_smb/dcerpc/samr_spec.rb
1100
1082
  - spec/lib/ruby_smb/dcerpc/sec_trailer_spec.rb
1101
1083
  - spec/lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all_spec.rb
checksums.yaml.gz.sig DELETED
Binary file
data.tar.gz.sig DELETED
Binary file
metadata.gz.sig DELETED
Binary file