sys-admin 1.8.2-universal-mingw32 → 1.8.3-universal-mingw32
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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGES.md +7 -0
- data/README.md +1 -1
- data/lib/bsd/sys/admin.rb +9 -2
- data/lib/darwin/sys/admin.rb +9 -2
- data/lib/linux/sys/admin.rb +9 -2
- data/lib/sys/admin.rb +1 -1
- data/spec/sys_admin_shared.rb +1 -1
- data/spec/sys_admin_unix_spec.rb +29 -0
- data/sys-admin.gemspec +1 -1
- data.tar.gz.sig +0 -0
- metadata +3 -3
- 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: c3a9114756676fa5db9d9b64c90faf8a95210ce70963da3e497c6911c6d4476d
|
4
|
+
data.tar.gz: 499b4f25b5412aec43fddb603d0d55de967ed7873ff55f332a67854041037d71
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f65bb12071960dd2fa940a379965bdad5cc5552e67db4c79a61be77394078cf867367b1c17152e67b470ea6b3da6d93e26b4a179f059b22bc8db2b1b509cfe2b
|
7
|
+
data.tar.gz: 1e8a54333ab37374d4f6f6bbd675d5fe5bb91b15d5600d980e4a74e7215e78cf7b2658e4f0232e52128fe6082a1b1ffbeb1a03ff6598746aa6555fb48259560c
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
## 1.8.3 - 20-Apr-2024
|
2
|
+
* Fixed up the get_group method on most platforms. Previously it was allocating
|
3
|
+
slightly more memory than it needed (wrong struct, oops). In addition, the
|
4
|
+
error handling wasn't consistent because I can't read a man page properly.
|
5
|
+
* More specs were added to properly test the get_group updates.
|
6
|
+
* The github actions test matrix was updated.
|
7
|
+
|
1
8
|
## 1.8.2 - 9-Apr-2023
|
2
9
|
* Lots of rubocop related updates.
|
3
10
|
* Refactored specs to use shared specs.
|
data/README.md
CHANGED
data/lib/bsd/sys/admin.rb
CHANGED
@@ -131,7 +131,7 @@ module Sys
|
|
131
131
|
def self.get_group(gid)
|
132
132
|
size = 1024
|
133
133
|
buf = FFI::MemoryPointer.new(:char, size)
|
134
|
-
pbuf = FFI::MemoryPointer.new(
|
134
|
+
pbuf = FFI::MemoryPointer.new(GroupStruct)
|
135
135
|
temp = GroupStruct.new
|
136
136
|
|
137
137
|
begin
|
@@ -142,7 +142,14 @@ module Sys
|
|
142
142
|
val = getgrgid_r(gid, temp, buf, buf.size, pbuf)
|
143
143
|
fun = 'getgrgid_r'
|
144
144
|
end
|
145
|
-
|
145
|
+
|
146
|
+
if pbuf.null?
|
147
|
+
if val != 0
|
148
|
+
raise SystemCallError.new(fun, val)
|
149
|
+
else
|
150
|
+
raise Error, "group '#{gid}' not found"
|
151
|
+
end
|
152
|
+
end
|
146
153
|
rescue Errno::ERANGE
|
147
154
|
size += 1024
|
148
155
|
raise if size > BUF_MAX
|
data/lib/darwin/sys/admin.rb
CHANGED
@@ -125,7 +125,7 @@ module Sys
|
|
125
125
|
def self.get_group(gid)
|
126
126
|
size = 1024
|
127
127
|
buf = FFI::MemoryPointer.new(:char, size)
|
128
|
-
pbuf = FFI::MemoryPointer.new(
|
128
|
+
pbuf = FFI::MemoryPointer.new(GroupStruct)
|
129
129
|
temp = GroupStruct.new
|
130
130
|
|
131
131
|
begin
|
@@ -136,7 +136,14 @@ module Sys
|
|
136
136
|
val = getgrgid_r(gid, temp, buf, buf.size, pbuf)
|
137
137
|
fun = 'getgrgid_r'
|
138
138
|
end
|
139
|
-
|
139
|
+
|
140
|
+
if pbuf.null?
|
141
|
+
if val != 0
|
142
|
+
raise SystemCallError.new(fun, val)
|
143
|
+
else
|
144
|
+
raise Error, "group '#{gid}' not found"
|
145
|
+
end
|
146
|
+
end
|
140
147
|
rescue Errno::ERANGE
|
141
148
|
size += 1024
|
142
149
|
raise if size > BUF_MAX
|
data/lib/linux/sys/admin.rb
CHANGED
@@ -120,7 +120,7 @@ module Sys
|
|
120
120
|
def self.get_group(gid)
|
121
121
|
size = 1024
|
122
122
|
buf = FFI::MemoryPointer.new(:char, size)
|
123
|
-
pbuf = FFI::MemoryPointer.new(
|
123
|
+
pbuf = FFI::MemoryPointer.new(GroupStruct)
|
124
124
|
temp = GroupStruct.new
|
125
125
|
|
126
126
|
begin
|
@@ -131,7 +131,14 @@ module Sys
|
|
131
131
|
val = getgrgid_r(gid, temp, buf, buf.size, pbuf)
|
132
132
|
fun = 'getgrgid_r'
|
133
133
|
end
|
134
|
-
|
134
|
+
|
135
|
+
if pbuf.null?
|
136
|
+
if val != 0
|
137
|
+
raise SystemCallError.new(fun, val)
|
138
|
+
else
|
139
|
+
raise Error, "group '#{gid}' not found"
|
140
|
+
end
|
141
|
+
end
|
135
142
|
rescue Errno::ERANGE # Large groups
|
136
143
|
size += 1024
|
137
144
|
raise if size > BUF_MAX
|
data/lib/sys/admin.rb
CHANGED
data/spec/sys_admin_shared.rb
CHANGED
data/spec/sys_admin_unix_spec.rb
CHANGED
@@ -76,6 +76,12 @@ RSpec.describe Sys::Admin, :unix do
|
|
76
76
|
end
|
77
77
|
|
78
78
|
describe 'get_group' do
|
79
|
+
before do
|
80
|
+
described_class.class_eval do
|
81
|
+
public :getgrgid_r
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
79
85
|
example 'get_group basic functionality' do
|
80
86
|
expect(described_class).to respond_to(:get_group)
|
81
87
|
expect{ described_class.get_group(group) }.not_to raise_error
|
@@ -100,8 +106,31 @@ RSpec.describe Sys::Admin, :unix do
|
|
100
106
|
end
|
101
107
|
|
102
108
|
example 'get_group raises an Error if the group cannot be found' do
|
109
|
+
expect{ described_class.get_group(123456789) }.to raise_error(Sys::Admin::Error)
|
103
110
|
expect{ described_class.get_group('foofoofoo') }.to raise_error(Sys::Admin::Error)
|
104
111
|
end
|
112
|
+
|
113
|
+
example 'get_group handles large groups and will retry an ERANGE' do
|
114
|
+
allow(Sys::Admin).to receive(:getgrgid_r).with(any_args).and_return(34)
|
115
|
+
allow(Sys::Admin).to receive(:getgrgid_r).with(any_args).and_call_original
|
116
|
+
expect{ described_class.get_group(group_id) }.not_to raise_error
|
117
|
+
end
|
118
|
+
|
119
|
+
example 'get_group will raise the expected error for an ENOENT' do
|
120
|
+
allow(Sys::Admin).to receive(:getgrgid_r).with(any_args).and_return(2)
|
121
|
+
expect{ described_class.get_group(group_id) }.to raise_error(Sys::Admin::Error)
|
122
|
+
end
|
123
|
+
|
124
|
+
example 'get_group will raise the expected error for a failed getgrxxx function call' do
|
125
|
+
allow(Sys::Admin).to receive(:getgrgid_r).with(any_args).and_return(22)
|
126
|
+
allow_any_instance_of(FFI::MemoryPointer).to receive(:null?).and_return(true)
|
127
|
+
expect{ described_class.get_group(group_id) }.to raise_error(Errno::EINVAL)
|
128
|
+
end
|
129
|
+
|
130
|
+
example 'get_group will not retry failures other than an ERANGE' do
|
131
|
+
allow(Sys::Admin).to receive(:getgrgid_r).with(any_args).and_return(35)
|
132
|
+
expect{ described_class.get_group(group_id) }.to raise_error(Sys::Admin::Error)
|
133
|
+
end
|
105
134
|
end
|
106
135
|
|
107
136
|
describe 'groups' do
|
data/sys-admin.gemspec
CHANGED
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sys-admin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.8.
|
4
|
+
version: 1.8.3
|
5
5
|
platform: universal-mingw32
|
6
6
|
authors:
|
7
7
|
- Daniel J. Berger
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
ORVCZpRuCPpmC8qmqxUnARDArzucjaclkxjLWvCVHeFa9UP7K3Nl9oTjJNv+7/jM
|
36
36
|
WZs4eecIcUc4tKdHxcAJ0MO/Dkqq7hGaiHpwKY76wQ1+8xAh
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date:
|
38
|
+
date: 2024-04-20 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: ffi
|
@@ -185,7 +185,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
185
185
|
- !ruby/object:Gem::Version
|
186
186
|
version: '0'
|
187
187
|
requirements: []
|
188
|
-
rubygems_version: 3.
|
188
|
+
rubygems_version: 3.5.7
|
189
189
|
signing_key:
|
190
190
|
specification_version: 4
|
191
191
|
summary: A unified, cross platform replacement for the "etc" library.
|
metadata.gz.sig
CHANGED
Binary file
|