sys-admin 1.7.6 → 1.8.0

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: 4d87741306e11fa28da2582a0c3bd0ba994cbeaea92744afa894bc07e996b975
4
- data.tar.gz: 2c2d445e5b58d5298741bb33e1ffdaa12b509e092ea8d5ee1c7139ff6afa84b6
3
+ metadata.gz: 72d00ed279d1871b324cf2819ba90432093b8063a30e0bbdc9fa66111b588538
4
+ data.tar.gz: 31bc4f2515a391ba43c1bc9ce0b3bdeffacd6d758b7e98a29a111ced2ab14e85
5
5
  SHA512:
6
- metadata.gz: de6f1e3e923441b4be9a73c4c9a93509d75a546c7a8b0a9e0681b161fa72332f859d498aa46fee36c60ebdc01c651dca10a89f93d4c3fe198a00eb73f7865d54
7
- data.tar.gz: 87375e7a062284f4713accc6e8b9ad245f9d0c66184d614789cef89b9a0e20b6ed1272b9cd8ad7e25f7d118e1100ba4d71f0c69aadead4e4e5b859fc330f84ed
6
+ metadata.gz: 36c4dc086a9929e998695ed02ce9cb89b5bd487cc4cb42aacccc26aab8a3fa3f62fde29a2bbb0792fd6657278fbe874e3366e3dc08a29c2ebc99e087bb1ea939
7
+ data.tar.gz: 3f9c593cd1b2008966524683d511c1c5e7e6ada91298516adc46afe948dd39cad7da069b426f268376493e6eb28934f020d55be60c73fca2bb756cf885d1e245
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGES.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 1.8.0 - 26-Aug-2021
2
+ * Switched from test-unit to rspec, with some tests refactored. The Rakefile
3
+ and gemspec files were updated accordingly.
4
+ * The User and Group classes for the Windows implementation are now properly
5
+ scoped under Sys::Admin instead of just Sys.
6
+ * Fixed a bug in the get_user and get_group methods on Winodws where the WQL
7
+ it generates internally might not be correct.
8
+
1
9
  ## 1.7.6 - 24-Mar-2021
2
10
  * Changed the implementation for `Admin.get_login` on Linux since the
3
11
  underlying `getlogin` C function is unreliable, especially in certain
data/Gemfile CHANGED
@@ -1,3 +1,2 @@
1
- source 'https://rubygems.org' do
2
- gemspec
3
- end
1
+ source 'https://rubygems.org'
2
+ gemspec
data/README.md CHANGED
@@ -4,6 +4,9 @@ The sys-admin library is a unified, cross platform replacement for the Etc modul
4
4
  ## Installation
5
5
  `gem install sys-admin`
6
6
 
7
+ ## Adding the trusted cert
8
+ `gem cert --add <(curl -Ls https://raw.githubusercontent.com/djberg96/sys-admin/main/certs/djberg96_pub.pem)`
9
+
7
10
  ## Synopsis
8
11
  ```ruby
9
12
  require 'sys/admin' # or sys-admin
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'rake'
2
2
  require 'rake/clean'
3
- require 'rake/testtask'
3
+ require 'rspec/core/rake_task'
4
4
  require 'rbconfig'
5
5
 
6
6
  CLEAN.include("**/*.gem", "**/*.rbx", "**/*.rbc", "ruby.core", "**/*.lock")
@@ -9,7 +9,7 @@ namespace :gem do
9
9
  desc "Create the sys-uname gem"
10
10
  task :create => [:clean] do
11
11
  require 'rubygems/package'
12
- spec = eval(IO.read('sys-admin.gemspec'))
12
+ spec = Gem::Specification.load('sys-admin.gemspec')
13
13
  spec.signing_key = File.join(Dir.home, '.ssh', 'gem-private_key.pem')
14
14
  Gem::Package.build(spec)
15
15
  end
@@ -21,27 +21,24 @@ namespace :gem do
21
21
  end
22
22
  end
23
23
 
24
- Rake::TestTask.new('test') do |t|
24
+ desc "Run the specs for the sys-admin library"
25
+ RSpec::Core::RakeTask.new(:spec) do |t|
26
+ t.pattern = 'spec/sys_admin_unix_spec.rb'
25
27
  case RbConfig::CONFIG['host_os']
26
28
  when /darwin|osx/i
27
- t.libs << 'lib/darwin'
29
+ t.rspec_opts = '-Ilib/darwin'
28
30
  when /linux/i
29
- t.libs << 'lib/linux'
31
+ t.rspec_opts = '-Ilib/linux'
30
32
  when /sunos|solaris/i
31
- t.libs << 'lib/sunos'
33
+ t.rspec_opts = '-Ilib/sunos'
32
34
  when /bsd/i
33
- t.libs << 'lib/bsd'
35
+ t.rspec_opts = '-Ilib/bsd'
34
36
  when /windows|win32|mingw|cygwin|dos/i
35
- t.libs << 'lib/windows'
37
+ t.rspec_opts = '-Ilib/windows'
38
+ t.pattern = 'spec/sys_admin_windows_spec.rb'
36
39
  else
37
- t.libs << 'lib/unix'
40
+ t.rspec_opts = '-Ilib/unix'
38
41
  end
39
-
40
- t.warning = true
41
- t.verbose = true
42
-
43
- t.libs << 'test'
44
- t.test_files = FileList['test/test_sys_admin.rb']
45
42
  end
46
43
 
47
- task :default => :test
44
+ task :default => :spec
@@ -14,7 +14,6 @@ module Sys
14
14
  attach_function :pread_c, :pread, [:int, :pointer, :size_t, :off_t], :size_t
15
15
  attach_function :close_c, :close, [:int], :int
16
16
 
17
- attach_function :getlogin_r, [:pointer, :size_t], :int
18
17
  attach_function :getpwnam_r, [:string, :pointer, :pointer, :size_t, :pointer], :int
19
18
  attach_function :getpwuid_r, [:long, :pointer, :pointer, :size_t, :pointer], :int
20
19
  attach_function :getpwent_r, [:pointer, :pointer, :size_t, :pointer], :int
@@ -22,7 +21,6 @@ module Sys
22
21
  attach_function :getgrnam_r, [:string, :pointer, :pointer, :size_t, :pointer], :int
23
22
  attach_function :getgrgid_r, [:long, :pointer, :pointer, :size_t, :pointer], :int
24
23
 
25
- private_class_method :getlogin_r, :getpwnam_r, :getpwuid_r, :getpwent_r
26
24
  private_class_method :getgrent_r, :getgrnam_r, :getgrgid_r
27
25
  private_class_method :open_c, :pread_c, :close_c
28
26
 
data/lib/sys/admin.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Sys
2
2
  class Admin
3
3
  # The version of the sys-admin library.
4
- VERSION = '1.7.6'.freeze
4
+ VERSION = '1.8.0'.freeze
5
5
  end
6
6
  end
7
7
 
@@ -5,295 +5,6 @@ require 'win32/registry'
5
5
  require 'socket'
6
6
 
7
7
  module Sys
8
- class Group
9
- # Short description of the object.
10
- attr_accessor :caption
11
-
12
- # Description of the group.
13
- attr_accessor :description
14
-
15
- # Name of the Windows domain to which the group account belongs.
16
- attr_accessor :domain
17
-
18
- # Date the group was added.
19
- attr_accessor :install_date
20
-
21
- # Name of the Windows group account on the Group#domain specified.
22
- attr_accessor :name
23
-
24
- # Security identifier for this group.
25
- attr_accessor :sid
26
-
27
- # Current status for the group, such as "ok", "error", etc.
28
- attr_accessor :status
29
-
30
- # The group ID.
31
- attr_accessor :gid
32
-
33
- # Sets whether or not the group is local (as opposed to global).
34
- attr_writer :local
35
-
36
- # An array of members for that group. May contain SID's.
37
- attr_accessor :members
38
-
39
- # Creates and returns a new Group object. This class encapsulates
40
- # the information for a group account, whether it be global or local.
41
- #
42
- # Yields +self+ if a block is given.
43
- #
44
- def initialize
45
- yield self if block_given?
46
- end
47
-
48
- # Returns whether or not the group is a local group.
49
- #
50
- def local?
51
- @local
52
- end
53
-
54
- # Returns the type of SID (Security Identifier) as a stringified value.
55
- #
56
- def sid_type
57
- @sid_type
58
- end
59
-
60
- # Sets the SID (Security Identifier) type to +stype+, which can be
61
- # one of the following constant values:
62
- #
63
- # * Admin::SidTypeUser
64
- # * Admin::SidTypeGroup
65
- # * Admin::SidTypeDomain
66
- # * Admin::SidTypeAlias
67
- # * Admin::SidTypeWellKnownGroup
68
- # * Admin::SidTypeDeletedAccount
69
- # * Admin::SidTypeInvalid
70
- # * Admin::SidTypeUnknown
71
- # * Admin::SidTypeComputer
72
- #
73
- def sid_type=(stype)
74
- if stype.kind_of?(String)
75
- @sid_type = stype.downcase
76
- else
77
- case stype
78
- when Admin::SidTypeUser
79
- @sid_type = "user"
80
- when Admin::SidTypeGroup
81
- @sid_type = "group"
82
- when Admin::SidTypeDomain
83
- @sid_type = "domain"
84
- when Admin::SidTypeAlias
85
- @sid_type = "alias"
86
- when Admin::SidTypeWellKnownGroup
87
- @sid_type = "well_known_group"
88
- when Admin::SidTypeDeletedAccount
89
- @sid_type = "deleted_account"
90
- when Admin::SidTypeInvalid
91
- @sid_type = "invalid"
92
- when Admin::SidTypeUnknown
93
- @sid_type = "unknown"
94
- when Admin::SidTypeComputer
95
- @sid_type = "computer"
96
- else
97
- @sid_type = "unknown"
98
- end
99
- end
100
- end
101
- end
102
-
103
- class User
104
- # An account for users whose primary account is in another domain.
105
- TEMP_DUPLICATE = 0x0100
106
-
107
- # Default account type that represents a typical user.
108
- NORMAL = 0x0200
109
-
110
- # A permit to trust account for a domain that trusts other domains.
111
- INTERDOMAIN_TRUST = 0x0800
112
-
113
- # An account for a Windows NT/2000 workstation or server that is a
114
- # member of this domain.
115
- WORKSTATION_TRUST = 0x1000
116
-
117
- # A computer account for a backup domain controller that is a member
118
- # of this domain.
119
- SERVER_TRUST = 0x2000
120
-
121
- # Domain and username of the account.
122
- attr_accessor :caption
123
-
124
- # Description of the account.
125
- attr_accessor :description
126
-
127
- # Name of the Windows domain to which a user account belongs.
128
- attr_accessor :domain
129
-
130
- # The user's password.
131
- attr_accessor :password
132
-
133
- # Full name of a local user.
134
- attr_accessor :full_name
135
-
136
- # An array of groups to which the user belongs.
137
- attr_accessor :groups
138
-
139
- # Date the user account was created.
140
- attr_accessor :install_date
141
-
142
- # Name of the Windows user account on the domain that the User#domain
143
- # property specifies.
144
- attr_accessor :name
145
-
146
- # The user's security identifier.
147
- attr_accessor :sid
148
-
149
- # Current status for the user, such as "ok", "error", etc.
150
- attr_accessor :status
151
-
152
- # The user's id (RID).
153
- attr_accessor :uid
154
-
155
- # The user's primary group ID.
156
- attr_accessor :gid
157
-
158
- # The user's home directory
159
- attr_accessor :dir
160
-
161
- # Used to set whether or not the account is disabled.
162
- attr_writer :disabled
163
-
164
- # Sets whether or not the account is defined on the local computer.
165
- attr_writer :local
166
-
167
- # Sets whether or not the account is locked out of the OS.
168
- attr_writer :lockout
169
-
170
- # Sets whether or not the password for the account can be changed.
171
- attr_writer :password_changeable
172
-
173
- # Sets whether or not the password for the account expires.
174
- attr_writer :password_expires
175
-
176
- # Sets whether or not a password is required for the account.
177
- attr_writer :password_required
178
-
179
- # Returns the account type as a human readable string.
180
- attr_reader :account_type
181
-
182
- # Creates an returns a new User object. A User object encapsulates a
183
- # user account on the operating system.
184
- #
185
- # Yields +self+ if a block is provided.
186
- #
187
- def initialize
188
- yield self if block_given?
189
- end
190
-
191
- # Sets the account type for the account. Possible values are:
192
- #
193
- # * User::TEMP_DUPLICATE
194
- # * User::NORMAL
195
- # * User::INTERDOMAIN_TRUST
196
- # * User::WORKSTATION_TRUST
197
- # * User::SERVER_TRUST
198
- #
199
- def account_type=(type)
200
- case type
201
- when TEMP_DUPLICATE
202
- @account_type = 'duplicate'
203
- when NORMAL
204
- @account_type = 'normal'
205
- when INTERDOMAIN_TRUST
206
- @account_type = 'interdomain_trust'
207
- when WORKSTATION_TRUST
208
- @account_type = 'workstation_trust'
209
- when SERVER_TRUST
210
- @account_type = 'server_trust'
211
- else
212
- @account_type = 'unknown'
213
- end
214
- end
215
-
216
- # Returns the SID type as a human readable string.
217
- #
218
- def sid_type
219
- @sid_type
220
- end
221
-
222
- # Sets the SID (Security Identifier) type to +stype+, which can be
223
- # one of the following constant values:
224
- #
225
- # * Admin::SidTypeUser
226
- # * Admin::SidTypeGroup
227
- # * Admin::SidTypeDomain
228
- # * Admin::SidTypeAlias
229
- # * Admin::SidTypeWellKnownGroup
230
- # * Admin::SidTypeDeletedAccount
231
- # * Admin::SidTypeInvalid
232
- # * Admin::SidTypeUnknown
233
- # * Admin::SidTypeComputer
234
- #
235
- def sid_type=(stype)
236
- case stype
237
- when Admin::SidTypeUser
238
- @sid_type = 'user'
239
- when Admin::SidTypeGroup
240
- @sid_type = 'group'
241
- when Admin::SidTypeDomain
242
- @sid_type = 'domain'
243
- when Admin::SidTypeAlias
244
- @sid_type = 'alias'
245
- when Admin::SidTypeWellKnownGroup
246
- @sid_type = 'well_known_group'
247
- when Admin::SidTypeDeletedAccount
248
- @sid_type = 'deleted_account'
249
- when Admin::SidTypeInvalid
250
- @sid_type = 'invalid'
251
- when Admin::SidTypeUnknown
252
- @sid_type = 'unknown'
253
- when Admin::SidTypeComputer
254
- @sid_type = 'computer'
255
- else
256
- @sid_type = 'unknown'
257
- end
258
- end
259
-
260
- # Returns whether or not the account is disabled.
261
- #
262
- def disabled?
263
- @disabled
264
- end
265
-
266
- # Returns whether or not the account is local.
267
- #
268
- def local?
269
- @local
270
- end
271
-
272
- # Returns whether or not the account is locked out.
273
- #
274
- def lockout?
275
- @lockout
276
- end
277
-
278
- # Returns whether or not the password for the account is changeable.
279
- #
280
- def password_changeable?
281
- @password_changeable
282
- end
283
-
284
- # Returns whether or not the password for the account is changeable.
285
- #
286
- def password_expires?
287
- @password_expires
288
- end
289
-
290
- # Returns whether or not the a password is required for the account.
291
- #
292
- def password_required?
293
- @password_required
294
- end
295
- end
296
-
297
8
  class Admin
298
9
  extend FFI::Library
299
10
 
@@ -708,10 +419,18 @@ module Sys
708
419
  end
709
420
  }
710
421
 
711
- if usr.kind_of?(Integer)
712
- query << " and sid like '%-#{usr}'"
422
+ if usr.kind_of?(Numeric)
423
+ if i == 0
424
+ query << " where sid like '%-#{usr}'"
425
+ else
426
+ query << " and sid like '%-#{usr}'"
427
+ end
713
428
  else
714
- query << " and name = '#{usr}'"
429
+ if i == 0
430
+ query << " where name = '#{usr}'"
431
+ else
432
+ query << " and name = '#{usr}'"
433
+ end
715
434
  end
716
435
 
717
436
  domain = options[:domain] || host
@@ -721,7 +440,7 @@ module Sys
721
440
 
722
441
  # Because our 'like' query isn't fulproof, let's parse
723
442
  # the SID again to make sure
724
- if usr.kind_of?(Integer)
443
+ if usr.kind_of?(Numeric)
725
444
  next if usr != uid
726
445
  end
727
446
 
@@ -890,9 +609,17 @@ module Sys
890
609
  }
891
610
 
892
611
  if grp.kind_of?(Integer)
893
- query << " and sid like '%-#{grp}'"
612
+ if i == 0
613
+ query << " where sid like '%-#{grp}'"
614
+ else
615
+ query << " and sid like '%-#{grp}'"
616
+ end
894
617
  else
895
- query << " and name = '#{grp}'"
618
+ if i == 0
619
+ query << " where name = '#{grp}'"
620
+ else
621
+ query << " and name = '#{grp}'"
622
+ end
896
623
  end
897
624
 
898
625
  domain = options[:domain] || host
@@ -996,5 +723,296 @@ module Sys
996
723
 
997
724
  array
998
725
  end
726
+
727
+ class User
728
+ # An account for users whose primary account is in another domain.
729
+ TEMP_DUPLICATE = 0x0100
730
+
731
+ # Default account type that represents a typical user.
732
+ NORMAL = 0x0200
733
+
734
+ # A permit to trust account for a domain that trusts other domains.
735
+ INTERDOMAIN_TRUST = 0x0800
736
+
737
+ # An account for a Windows NT/2000 workstation or server that is a
738
+ # member of this domain.
739
+ WORKSTATION_TRUST = 0x1000
740
+
741
+ # A computer account for a backup domain controller that is a member
742
+ # of this domain.
743
+ SERVER_TRUST = 0x2000
744
+
745
+ # Domain and username of the account.
746
+ attr_accessor :caption
747
+
748
+ # Description of the account.
749
+ attr_accessor :description
750
+
751
+ # Name of the Windows domain to which a user account belongs.
752
+ attr_accessor :domain
753
+
754
+ # The user's password.
755
+ attr_accessor :password
756
+
757
+ # Full name of a local user.
758
+ attr_accessor :full_name
759
+
760
+ # An array of groups to which the user belongs.
761
+ attr_accessor :groups
762
+
763
+ # Date the user account was created.
764
+ attr_accessor :install_date
765
+
766
+ # Name of the Windows user account on the domain that the User#domain
767
+ # property specifies.
768
+ attr_accessor :name
769
+
770
+ # The user's security identifier.
771
+ attr_accessor :sid
772
+
773
+ # Current status for the user, such as "ok", "error", etc.
774
+ attr_accessor :status
775
+
776
+ # The user's id (RID).
777
+ attr_accessor :uid
778
+
779
+ # The user's primary group ID.
780
+ attr_accessor :gid
781
+
782
+ # The user's home directory
783
+ attr_accessor :dir
784
+
785
+ # Used to set whether or not the account is disabled.
786
+ attr_writer :disabled
787
+
788
+ # Sets whether or not the account is defined on the local computer.
789
+ attr_writer :local
790
+
791
+ # Sets whether or not the account is locked out of the OS.
792
+ attr_writer :lockout
793
+
794
+ # Sets whether or not the password for the account can be changed.
795
+ attr_writer :password_changeable
796
+
797
+ # Sets whether or not the password for the account expires.
798
+ attr_writer :password_expires
799
+
800
+ # Sets whether or not a password is required for the account.
801
+ attr_writer :password_required
802
+
803
+ # Returns the account type as a human readable string.
804
+ attr_reader :account_type
805
+
806
+ # Creates an returns a new User object. A User object encapsulates a
807
+ # user account on the operating system.
808
+ #
809
+ # Yields +self+ if a block is provided.
810
+ #
811
+ def initialize
812
+ yield self if block_given?
813
+ end
814
+
815
+ # Sets the account type for the account. Possible values are:
816
+ #
817
+ # * User::TEMP_DUPLICATE
818
+ # * User::NORMAL
819
+ # * User::INTERDOMAIN_TRUST
820
+ # * User::WORKSTATION_TRUST
821
+ # * User::SERVER_TRUST
822
+ #
823
+ def account_type=(type)
824
+ case type
825
+ when TEMP_DUPLICATE
826
+ @account_type = 'duplicate'
827
+ when NORMAL
828
+ @account_type = 'normal'
829
+ when INTERDOMAIN_TRUST
830
+ @account_type = 'interdomain_trust'
831
+ when WORKSTATION_TRUST
832
+ @account_type = 'workstation_trust'
833
+ when SERVER_TRUST
834
+ @account_type = 'server_trust'
835
+ else
836
+ @account_type = 'unknown'
837
+ end
838
+ end
839
+
840
+ # Returns the SID type as a human readable string.
841
+ #
842
+ def sid_type
843
+ @sid_type
844
+ end
845
+
846
+ # Sets the SID (Security Identifier) type to +stype+, which can be
847
+ # one of the following constant values:
848
+ #
849
+ # * Admin::SidTypeUser
850
+ # * Admin::SidTypeGroup
851
+ # * Admin::SidTypeDomain
852
+ # * Admin::SidTypeAlias
853
+ # * Admin::SidTypeWellKnownGroup
854
+ # * Admin::SidTypeDeletedAccount
855
+ # * Admin::SidTypeInvalid
856
+ # * Admin::SidTypeUnknown
857
+ # * Admin::SidTypeComputer
858
+ #
859
+ def sid_type=(stype)
860
+ case stype
861
+ when Admin::SidTypeUser
862
+ @sid_type = 'user'
863
+ when Admin::SidTypeGroup
864
+ @sid_type = 'group'
865
+ when Admin::SidTypeDomain
866
+ @sid_type = 'domain'
867
+ when Admin::SidTypeAlias
868
+ @sid_type = 'alias'
869
+ when Admin::SidTypeWellKnownGroup
870
+ @sid_type = 'well_known_group'
871
+ when Admin::SidTypeDeletedAccount
872
+ @sid_type = 'deleted_account'
873
+ when Admin::SidTypeInvalid
874
+ @sid_type = 'invalid'
875
+ when Admin::SidTypeUnknown
876
+ @sid_type = 'unknown'
877
+ when Admin::SidTypeComputer
878
+ @sid_type = 'computer'
879
+ else
880
+ @sid_type = 'unknown'
881
+ end
882
+ end
883
+
884
+ # Returns whether or not the account is disabled.
885
+ #
886
+ def disabled?
887
+ @disabled
888
+ end
889
+
890
+ # Returns whether or not the account is local.
891
+ #
892
+ def local?
893
+ @local
894
+ end
895
+
896
+ # Returns whether or not the account is locked out.
897
+ #
898
+ def lockout?
899
+ @lockout
900
+ end
901
+
902
+ # Returns whether or not the password for the account is changeable.
903
+ #
904
+ def password_changeable?
905
+ @password_changeable
906
+ end
907
+
908
+ # Returns whether or not the password for the account is changeable.
909
+ #
910
+ def password_expires?
911
+ @password_expires
912
+ end
913
+
914
+ # Returns whether or not the a password is required for the account.
915
+ #
916
+ def password_required?
917
+ @password_required
918
+ end
919
+ end
920
+
921
+ class Group
922
+ # Short description of the object.
923
+ attr_accessor :caption
924
+
925
+ # Description of the group.
926
+ attr_accessor :description
927
+
928
+ # Name of the Windows domain to which the group account belongs.
929
+ attr_accessor :domain
930
+
931
+ # Date the group was added.
932
+ attr_accessor :install_date
933
+
934
+ # Name of the Windows group account on the Group#domain specified.
935
+ attr_accessor :name
936
+
937
+ # Security identifier for this group.
938
+ attr_accessor :sid
939
+
940
+ # Current status for the group, such as "ok", "error", etc.
941
+ attr_accessor :status
942
+
943
+ # The group ID.
944
+ attr_accessor :gid
945
+
946
+ # Sets whether or not the group is local (as opposed to global).
947
+ attr_writer :local
948
+
949
+ # An array of members for that group. May contain SID's.
950
+ attr_accessor :members
951
+
952
+ # Creates and returns a new Group object. This class encapsulates
953
+ # the information for a group account, whether it be global or local.
954
+ #
955
+ # Yields +self+ if a block is given.
956
+ #
957
+ def initialize
958
+ yield self if block_given?
959
+ end
960
+
961
+ # Returns whether or not the group is a local group.
962
+ #
963
+ def local?
964
+ @local
965
+ end
966
+
967
+ # Returns the type of SID (Security Identifier) as a stringified value.
968
+ #
969
+ def sid_type
970
+ @sid_type
971
+ end
972
+
973
+ # Sets the SID (Security Identifier) type to +stype+, which can be
974
+ # one of the following constant values:
975
+ #
976
+ # * Admin::SidTypeUser
977
+ # * Admin::SidTypeGroup
978
+ # * Admin::SidTypeDomain
979
+ # * Admin::SidTypeAlias
980
+ # * Admin::SidTypeWellKnownGroup
981
+ # * Admin::SidTypeDeletedAccount
982
+ # * Admin::SidTypeInvalid
983
+ # * Admin::SidTypeUnknown
984
+ # * Admin::SidTypeComputer
985
+ #
986
+ def sid_type=(stype)
987
+ if stype.kind_of?(String)
988
+ @sid_type = stype.downcase
989
+ else
990
+ case stype
991
+ when Admin::SidTypeUser
992
+ @sid_type = "user"
993
+ when Admin::SidTypeGroup
994
+ @sid_type = "group"
995
+ when Admin::SidTypeDomain
996
+ @sid_type = "domain"
997
+ when Admin::SidTypeAlias
998
+ @sid_type = "alias"
999
+ when Admin::SidTypeWellKnownGroup
1000
+ @sid_type = "well_known_group"
1001
+ when Admin::SidTypeDeletedAccount
1002
+ @sid_type = "deleted_account"
1003
+ when Admin::SidTypeInvalid
1004
+ @sid_type = "invalid"
1005
+ when Admin::SidTypeUnknown
1006
+ @sid_type = "unknown"
1007
+ when Admin::SidTypeComputer
1008
+ @sid_type = "computer"
1009
+ else
1010
+ @sid_type = "unknown"
1011
+ end
1012
+ end
1013
+
1014
+ @sid_type
1015
+ end
1016
+ end
999
1017
  end
1000
1018
  end