sys-admin 1.4.3-x86-mswin32-60 → 1.4.4-x86-mswin32-60
Sign up to get free protection for your applications and to get access to all the features.
- 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
|