sys-admin 1.4.3-x86-mswin32-60 → 1.4.4-x86-mswin32-60
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.
- data/CHANGES +7 -0
- data/doc/sys-admin-unix.txt +2 -2
- data/doc/sys-admin-windows.txt +3 -3
- data/lib/sys/admin.rb +36 -22
- data/sys-admin.gemspec +6 -7
- data/test/tc_admin.rb +3 -3
- data/test/tc_unix.rb +1 -1
- data/test/tc_windows.rb +41 -27
- metadata +3 -6
- data/sys-admin-1.4.0-x86-mswin32-60.gem +0 -0
- data/sys-admin-1.4.3.gem +0 -0
- data/sys-admin.gemspec~ +0 -39
data/CHANGES
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
== 1.4.4 - 19-Nov-2008
|
2
|
+
* Added the User#uid method for MS Windows (which is just the user's relative
|
3
|
+
identifier).
|
4
|
+
* Now requires test-unit 2.x.
|
5
|
+
* Some updates to the test suite to take advantage of test-unit 2.x features.
|
6
|
+
* Some minor gemspec tweaks.
|
7
|
+
|
1
8
|
== 1.4.3 - 2-Mar-2008
|
2
9
|
* The block form of Admin.users now properly ensures that endpwent() is
|
3
10
|
called. Likewise, the block form of Admin.groups now properly ensures
|
data/doc/sys-admin-unix.txt
CHANGED
@@ -148,13 +148,13 @@ User#uid
|
|
148
148
|
Ruby's
|
149
149
|
|
150
150
|
== Copyright
|
151
|
-
Copyright 2002-
|
151
|
+
Copyright 2002-2008, Daniel J. Berger
|
152
152
|
|
153
153
|
All Rights Reserved. This module is free software. It may be used,
|
154
154
|
redistributed and/or modified under the same terms as Ruby itself.
|
155
155
|
|
156
156
|
== Warranty
|
157
|
-
This
|
157
|
+
This library is provided "as is" and without any express or
|
158
158
|
implied warranties, including, without limitation, the implied
|
159
159
|
warranties of merchantability and fitness for a particular purpose.
|
160
160
|
|
data/doc/sys-admin-windows.txt
CHANGED
@@ -23,7 +23,7 @@ get information about users and groups.
|
|
23
23
|
= Constants
|
24
24
|
== Sys::Admin
|
25
25
|
VERSION
|
26
|
-
The version of this
|
26
|
+
The version of this library, returned as a String.
|
27
27
|
|
28
28
|
== Sys::Admin::User
|
29
29
|
TEMP_DUPLICATE
|
@@ -314,13 +314,13 @@ User#status
|
|
314
314
|
Ruby's
|
315
315
|
|
316
316
|
== Copyright
|
317
|
-
Copyright 2002-
|
317
|
+
Copyright 2002-2008, Daniel J. Berger
|
318
318
|
|
319
319
|
All Rights Reserved. This module is free software. It may be used,
|
320
320
|
redistributed and/or modified under the same terms as Ruby itself.
|
321
321
|
|
322
322
|
== Warranty
|
323
|
-
This
|
323
|
+
This library is provided "as is" and without any express or
|
324
324
|
implied warranties, including, without limitation, the implied
|
325
325
|
warranties of merchantability and fitness for a particular purpose.
|
326
326
|
|
data/lib/sys/admin.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require 'win32ole'
|
2
|
+
require 'Win32API'
|
3
|
+
require 'socket'
|
4
4
|
|
5
5
|
module Sys
|
6
6
|
class Group
|
@@ -142,6 +142,9 @@ module Sys
|
|
142
142
|
# Current status for the user, such as "ok", "error", etc.
|
143
143
|
attr_accessor :status
|
144
144
|
|
145
|
+
# The user's id (RID).
|
146
|
+
attr_accessor :uid
|
147
|
+
|
145
148
|
# Used to set whether or not the account is disabled.
|
146
149
|
attr_writer :disabled
|
147
150
|
|
@@ -279,14 +282,13 @@ module Sys
|
|
279
282
|
end
|
280
283
|
|
281
284
|
class Admin
|
282
|
-
VERSION = '1.4.
|
285
|
+
VERSION = '1.4.4'
|
283
286
|
|
284
287
|
# This is the error raised in the majority of cases if anything goes wrong
|
285
288
|
# with any of the Sys::Admin methods.
|
286
289
|
#
|
287
290
|
class Error < StandardError; end
|
288
|
-
|
289
|
-
|
291
|
+
|
290
292
|
SidTypeUser = 1
|
291
293
|
SidTypeGroup = 2
|
292
294
|
SidTypeDomain = 3
|
@@ -296,10 +298,14 @@ module Sys
|
|
296
298
|
SidTypeInvalid = 7
|
297
299
|
SidTypeUnknown = 8
|
298
300
|
SidTypeComputer = 9
|
301
|
+
|
302
|
+
private
|
299
303
|
|
300
304
|
# Used by the get_login method
|
301
305
|
GetUserName = Win32API.new('advapi32', 'GetUserName', 'PP', 'L') # :nodoc:
|
302
|
-
|
306
|
+
|
307
|
+
public
|
308
|
+
|
303
309
|
# Configures the global +user+ on +domain+ using options.
|
304
310
|
#
|
305
311
|
# See http://tinyurl.com/3hjv9 for a list of valid options.
|
@@ -468,7 +474,7 @@ module Sys
|
|
468
474
|
raise Error, 'GetUserName() call failed in get_login'
|
469
475
|
end
|
470
476
|
|
471
|
-
length
|
477
|
+
length = nsize.unpack('L')[0]
|
472
478
|
username = buffer[0 ... length].chop
|
473
479
|
username
|
474
480
|
end
|
@@ -483,7 +489,7 @@ module Sys
|
|
483
489
|
# default is the local machine. You may also specify whether to
|
484
490
|
# retrieve a local or global account. The default is local.
|
485
491
|
#
|
486
|
-
def self.get_user(
|
492
|
+
def self.get_user(usr, host=Socket.gethostname, local=true)
|
487
493
|
host = Socket.gethostname if host.nil?
|
488
494
|
cs = "winmgmts:{impersonationLevel=impersonate}!"
|
489
495
|
cs << "//#{host}/root/cimv2"
|
@@ -497,29 +503,30 @@ module Sys
|
|
497
503
|
query = "select * from win32_useraccount"
|
498
504
|
query << " where localaccount = true" if local
|
499
505
|
|
500
|
-
if
|
506
|
+
if usr.kind_of?(Fixnum)
|
501
507
|
if local
|
502
|
-
query << " and sid like '%-#{
|
508
|
+
query << " and sid like '%-#{usr}'"
|
503
509
|
else
|
504
|
-
query << " where sid like '%-#{
|
510
|
+
query << " where sid like '%-#{usr}'"
|
505
511
|
end
|
506
512
|
else
|
507
513
|
if local
|
508
|
-
query << " and name = '#{
|
514
|
+
query << " and name = '#{usr}'"
|
509
515
|
else
|
510
|
-
query << " where name = '#{
|
516
|
+
query << " where name = '#{usr}'"
|
511
517
|
end
|
512
518
|
end
|
513
519
|
|
514
520
|
wmi.execquery(query).each{ |user|
|
521
|
+
uid = user.sid.split('-').last.to_i
|
522
|
+
|
515
523
|
# Because our 'like' query isn't fulproof, let's parse
|
516
524
|
# the SID again to make sure
|
517
|
-
if
|
518
|
-
if
|
519
|
-
next
|
520
|
-
end
|
525
|
+
if usr.kind_of?(Fixnum)
|
526
|
+
next if usr != uid
|
521
527
|
end
|
522
|
-
|
528
|
+
|
529
|
+
user_object = User.new do |u|
|
523
530
|
u.account_type = user.accounttype
|
524
531
|
u.caption = user.caption
|
525
532
|
u.description = user.description
|
@@ -536,9 +543,14 @@ module Sys
|
|
536
543
|
u.sid = user.sid
|
537
544
|
u.sid_type = user.sidtype
|
538
545
|
u.status = user.status
|
546
|
+
u.uid = uid
|
539
547
|
end
|
540
|
-
|
548
|
+
|
549
|
+
return user_object
|
541
550
|
}
|
551
|
+
|
552
|
+
# If we're here, it means it wasn't found.
|
553
|
+
raise Error, "no user found for '#{usr}'"
|
542
554
|
end
|
543
555
|
|
544
556
|
# In block form, yields a User object for each user on the system. In
|
@@ -644,7 +656,7 @@ module Sys
|
|
644
656
|
next if grp != gid
|
645
657
|
end
|
646
658
|
|
647
|
-
|
659
|
+
group_object = Group.new do |g|
|
648
660
|
g.caption = group.caption
|
649
661
|
g.description = group.description
|
650
662
|
g.domain = group.domain
|
@@ -656,8 +668,10 @@ module Sys
|
|
656
668
|
g.sid_type = group.sidtype
|
657
669
|
g.status = group.status
|
658
670
|
end
|
659
|
-
|
671
|
+
|
672
|
+
return group_object
|
660
673
|
}
|
674
|
+
|
661
675
|
# If we're here, it means it wasn't found.
|
662
676
|
raise Error, "no group found for '#{grp}'"
|
663
677
|
end
|
data/sys-admin.gemspec
CHANGED
@@ -2,27 +2,27 @@ require 'rubygems'
|
|
2
2
|
|
3
3
|
spec = Gem::Specification.new do |gem|
|
4
4
|
gem.name = 'sys-admin'
|
5
|
-
gem.version = '1.4.
|
5
|
+
gem.version = '1.4.4'
|
6
6
|
gem.author = 'Daniel J. Berger'
|
7
7
|
gem.email = 'djberg96@gmail.com'
|
8
8
|
gem.homepage = 'http://www.rubyforge.org/projects/sysutils'
|
9
|
-
gem.platform = Gem::Platform::
|
9
|
+
gem.platform = Gem::Platform::RUBY
|
10
10
|
gem.summary = 'A unified, cross platform replacement for the "etc" package.'
|
11
11
|
gem.description = 'A unified, cross platform replacement for the "etc" package.'
|
12
12
|
gem.test_file = 'test/tc_admin.rb'
|
13
13
|
gem.has_rdoc = true
|
14
14
|
gem.extra_rdoc_files = ['CHANGES', 'README', 'MANIFEST']
|
15
15
|
gem.rubyforge_project = 'sysutils'
|
16
|
+
gem.required_ruby_version = '>= 1.8.2'
|
16
17
|
|
17
18
|
files = Dir["doc/*"] + Dir["examples/*"]
|
18
19
|
files += Dir["test/*"] + Dir["[A-Z]*"]
|
19
20
|
|
20
|
-
if
|
21
|
+
if Config::CONFIG['host_os'].match('mswin')
|
21
22
|
files += Dir["lib/sys/admin.rb"]
|
22
|
-
gem.
|
23
|
+
gem.platform = Gem::Platform::CURRENT
|
23
24
|
else
|
24
|
-
files += Dir["ext
|
25
|
-
gem.required_ruby_version = '>= 1.8.0'
|
25
|
+
files += Dir["ext/**/*.{c,h}"]
|
26
26
|
gem.extensions = ['ext/extconf.rb']
|
27
27
|
gem.extra_rdoc_files << 'ext/sys/admin.c'
|
28
28
|
gem.require_path = 'lib'
|
@@ -34,6 +34,5 @@ spec = Gem::Specification.new do |gem|
|
|
34
34
|
end
|
35
35
|
|
36
36
|
if $PROGRAM_NAME == __FILE__
|
37
|
-
Gem.manage_gems
|
38
37
|
Gem::Builder.new(spec).build
|
39
38
|
end
|
data/test/tc_admin.rb
CHANGED
@@ -5,10 +5,10 @@
|
|
5
5
|
# test suite based on the platform.
|
6
6
|
###############################################################################
|
7
7
|
$LOAD_PATH.unshift Dir.pwd
|
8
|
-
$LOAD_PATH.unshift Dir.pwd
|
8
|
+
$LOAD_PATH.unshift File.join(Dir.pwd, 'test')
|
9
9
|
|
10
10
|
if File::ALT_SEPARATOR
|
11
|
-
require
|
11
|
+
require 'tc_windows'
|
12
12
|
else
|
13
|
-
require
|
13
|
+
require 'tc_unix'
|
14
14
|
end
|
data/test/tc_unix.rb
CHANGED
data/test/tc_windows.rb
CHANGED
@@ -7,29 +7,35 @@
|
|
7
7
|
#
|
8
8
|
# It is assumed that this test will be run via the 'rake test' task.
|
9
9
|
###############################################################################
|
10
|
-
require
|
11
|
-
|
12
|
-
|
10
|
+
require 'rubygems'
|
11
|
+
gem 'test-unit'
|
12
|
+
|
13
|
+
require 'test/unit'
|
14
|
+
require 'sys/admin'
|
15
|
+
require 'socket'
|
13
16
|
include Sys
|
14
17
|
|
15
18
|
class TC_Sys_Admin_Win32 < Test::Unit::TestCase
|
19
|
+
def self.startup
|
20
|
+
@@host = Socket.gethostname
|
21
|
+
end
|
22
|
+
|
16
23
|
def setup
|
17
|
-
@
|
18
|
-
@
|
19
|
-
@
|
20
|
-
@
|
21
|
-
@
|
22
|
-
@
|
23
|
-
@group_id = 546 # best guess, may fail
|
24
|
+
@user = User.new
|
25
|
+
@user_name = 'guest'
|
26
|
+
@user_id = 501 # best guess, may fail
|
27
|
+
@group = Group.new
|
28
|
+
@group_name = 'guests'
|
29
|
+
@group_id = 546 # best guess, may fail
|
24
30
|
end
|
25
31
|
|
26
32
|
def test_version
|
27
|
-
assert_equal('1.4.
|
33
|
+
assert_equal('1.4.4', Admin::VERSION)
|
28
34
|
end
|
29
35
|
|
30
36
|
def test_01_add_local_user
|
31
37
|
assert_respond_to(Admin, :add_local_user)
|
32
|
-
assert_nothing_raised{ Admin.add_local_user(
|
38
|
+
assert_nothing_raised{ Admin.add_local_user('foo') }
|
33
39
|
end
|
34
40
|
|
35
41
|
def test_add_global_user
|
@@ -39,7 +45,7 @@ class TC_Sys_Admin_Win32 < Test::Unit::TestCase
|
|
39
45
|
def test_02_config_local_user
|
40
46
|
assert_respond_to(Admin, :config_local_user)
|
41
47
|
assert_nothing_raised{
|
42
|
-
Admin.config_local_user("foo",{
|
48
|
+
Admin.config_local_user("foo", {
|
43
49
|
:description => "delete me",
|
44
50
|
:fullname => "fubar"
|
45
51
|
})
|
@@ -71,7 +77,7 @@ class TC_Sys_Admin_Win32 < Test::Unit::TestCase
|
|
71
77
|
def test_02_config_local_group
|
72
78
|
assert_respond_to(Admin, :config_local_group)
|
73
79
|
assert_nothing_raised{
|
74
|
-
Admin.config_local_group(
|
80
|
+
Admin.config_local_group('bar', {:description => 'delete me'})
|
75
81
|
}
|
76
82
|
end
|
77
83
|
|
@@ -107,10 +113,10 @@ class TC_Sys_Admin_Win32 < Test::Unit::TestCase
|
|
107
113
|
end
|
108
114
|
|
109
115
|
def test_get_user_remote
|
110
|
-
assert_nothing_raised{ Admin.get_user(@user_name,
|
111
|
-
assert_nothing_raised{ Admin.get_user(@user_id,
|
112
|
-
assert_kind_of(User, Admin.get_user(@user_name,
|
113
|
-
assert_kind_of(User, Admin.get_user(@user_id,
|
116
|
+
assert_nothing_raised{ Admin.get_user(@user_name, @@host) }
|
117
|
+
assert_nothing_raised{ Admin.get_user(@user_id, @@host) }
|
118
|
+
assert_kind_of(User, Admin.get_user(@user_name, @@host))
|
119
|
+
assert_kind_of(User, Admin.get_user(@user_id, @@host))
|
114
120
|
end
|
115
121
|
|
116
122
|
def test_users
|
@@ -127,8 +133,8 @@ class TC_Sys_Admin_Win32 < Test::Unit::TestCase
|
|
127
133
|
end
|
128
134
|
|
129
135
|
def test_users_remote
|
130
|
-
assert_nothing_raised{ Admin.users(
|
131
|
-
assert_nothing_raised{ Admin.users(
|
136
|
+
assert_nothing_raised{ Admin.users(@@host) }
|
137
|
+
assert_nothing_raised{ Admin.users(@@host){ |u| } }
|
132
138
|
end
|
133
139
|
|
134
140
|
def test_user_instance_caption
|
@@ -205,6 +211,11 @@ class TC_Sys_Admin_Win32 < Test::Unit::TestCase
|
|
205
211
|
assert_respond_to(@user, :account_type)
|
206
212
|
assert_respond_to(@user, :account_type=)
|
207
213
|
end
|
214
|
+
|
215
|
+
def test_user_instance_uid
|
216
|
+
assert_respond_to(@user, :uid)
|
217
|
+
assert_respond_to(@user, :uid=)
|
218
|
+
end
|
208
219
|
|
209
220
|
def test_get_group
|
210
221
|
assert_respond_to(Admin, :get_group)
|
@@ -219,8 +230,8 @@ class TC_Sys_Admin_Win32 < Test::Unit::TestCase
|
|
219
230
|
end
|
220
231
|
|
221
232
|
def test_get_group_remote
|
222
|
-
assert_nothing_raised{ Admin.get_group(@group_name,
|
223
|
-
assert_kind_of(Group, Admin.get_group(@group_name,
|
233
|
+
assert_nothing_raised{ Admin.get_group(@group_name, @@host) }
|
234
|
+
assert_kind_of(Group, Admin.get_group(@group_name, @@host))
|
224
235
|
end
|
225
236
|
|
226
237
|
def test_groups
|
@@ -235,10 +246,10 @@ class TC_Sys_Admin_Win32 < Test::Unit::TestCase
|
|
235
246
|
end
|
236
247
|
|
237
248
|
def test_groups_remote
|
238
|
-
assert_nothing_raised{ Admin.groups(
|
239
|
-
assert_nothing_raised{ Admin.groups(
|
240
|
-
assert_kind_of(Array, Admin.groups(
|
241
|
-
assert_kind_of(Group, Admin.groups(
|
249
|
+
assert_nothing_raised{ Admin.groups(@@host) }
|
250
|
+
assert_nothing_raised{ Admin.groups(@@host){ |g| } }
|
251
|
+
assert_kind_of(Array, Admin.groups(@@host))
|
252
|
+
assert_kind_of(Group, Admin.groups(@@host).first)
|
242
253
|
end
|
243
254
|
|
244
255
|
def test_group_instance_caption
|
@@ -292,7 +303,6 @@ class TC_Sys_Admin_Win32 < Test::Unit::TestCase
|
|
292
303
|
end
|
293
304
|
|
294
305
|
def teardown
|
295
|
-
@host = nil
|
296
306
|
@user = nil
|
297
307
|
@user_name = nil
|
298
308
|
@user_id = nil
|
@@ -300,4 +310,8 @@ class TC_Sys_Admin_Win32 < Test::Unit::TestCase
|
|
300
310
|
@group_name = nil
|
301
311
|
@group_id = nil
|
302
312
|
end
|
313
|
+
|
314
|
+
def self.shutdown
|
315
|
+
@@host = nil
|
316
|
+
end
|
303
317
|
end
|
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.4.
|
4
|
+
version: 1.4.4
|
5
5
|
platform: x86-mswin32-60
|
6
6
|
authors:
|
7
7
|
- Daniel J. Berger
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-11-19 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -39,10 +39,7 @@ files:
|
|
39
39
|
- MANIFEST
|
40
40
|
- Rakefile
|
41
41
|
- README
|
42
|
-
- sys-admin-1.4.0-x86-mswin32-60.gem
|
43
|
-
- sys-admin-1.4.3.gem
|
44
42
|
- sys-admin.gemspec
|
45
|
-
- sys-admin.gemspec~
|
46
43
|
- test
|
47
44
|
- lib/sys/admin.rb
|
48
45
|
has_rdoc: true
|
@@ -67,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
67
64
|
requirements: []
|
68
65
|
|
69
66
|
rubyforge_project: sysutils
|
70
|
-
rubygems_version: 1.
|
67
|
+
rubygems_version: 1.3.1
|
71
68
|
signing_key:
|
72
69
|
specification_version: 2
|
73
70
|
summary: A unified, cross platform replacement for the "etc" package.
|
Binary file
|
data/sys-admin-1.4.3.gem
DELETED
Binary file
|
data/sys-admin.gemspec~
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
|
3
|
-
spec = Gem::Specification.new do |gem|
|
4
|
-
gem.name = 'sys-admin'
|
5
|
-
gem.version = '1.4.3'
|
6
|
-
gem.author = 'Daniel J. Berger'
|
7
|
-
gem.email = 'djberg96@gmail.com'
|
8
|
-
gem.homepage = 'http://www.rubyforge.org/projects/sysutils'
|
9
|
-
gem.platform = Gem::Platform::RUBY
|
10
|
-
gem.summary = 'A unified, cross platform replacement for the "etc" package.'
|
11
|
-
gem.description = 'A unified, cross platform replacement for the "etc" package.'
|
12
|
-
gem.test_file = 'test/tc_admin.rb'
|
13
|
-
gem.has_rdoc = true
|
14
|
-
gem.extra_rdoc_files = ['CHANGES', 'README', 'MANIFEST']
|
15
|
-
gem.rubyforge_project = 'sysutils'
|
16
|
-
|
17
|
-
files = Dir["doc/*"] + Dir["examples/*"]
|
18
|
-
files += Dir["test/*"] + Dir["[A-Z]*"]
|
19
|
-
|
20
|
-
if RUBY_PLATFORM.match('mswin')
|
21
|
-
files += Dir["lib/sys/admin.rb"]
|
22
|
-
gem.required_ruby_version = '>= 1.8.2'
|
23
|
-
else
|
24
|
-
files += Dir["ext/**/*"]
|
25
|
-
gem.required_ruby_version = '>= 1.8.0'
|
26
|
-
gem.extensions = ['ext/extconf.rb']
|
27
|
-
gem.extra_rdoc_files << 'ext/sys/admin.c'
|
28
|
-
gem.require_path = 'lib'
|
29
|
-
end
|
30
|
-
|
31
|
-
files.delete_if{ |item| item.include?('CVS') }
|
32
|
-
|
33
|
-
gem.files = files
|
34
|
-
end
|
35
|
-
|
36
|
-
if $PROGRAM_NAME == __FILE__
|
37
|
-
Gem.manage_gems
|
38
|
-
Gem::Builder.new(spec).build
|
39
|
-
end
|