sys-admin 1.5.0-x86-mswin32-60 → 1.5.1-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 +8 -0
- data/MANIFEST +3 -3
- data/README +1 -1
- data/doc/sys-admin-unix.txt +2 -2
- data/doc/sys-admin-windows.txt +8 -2
- data/lib/sys/admin.rb +55 -19
- data/sys-admin.gemspec +21 -13
- data/test/test_sys_admin.rb +1 -1
- data/test/test_sys_admin_windows.rb +10 -0
- metadata +6 -11
data/CHANGES
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
== 1.5.1 - 23-Jul-2009
|
2
|
+
* Added the User#dir attribute. This attribute contains a user's home
|
3
|
+
directory if set, or nil if it isn't.
|
4
|
+
* User objects returned by the Admin.users method now include the uid.
|
5
|
+
Previously only the Admin.get_user method set it.
|
6
|
+
* Added win32-security as a dependency.
|
7
|
+
* Changed license to Artistic 2.0.
|
8
|
+
|
1
9
|
== 1.5.0 - 29-Mar-2009
|
2
10
|
* INTERFACE CHANGE (WINDOWS ONLY): The interface for MS Windows has undergone
|
3
11
|
a radical change. Most methods now accept a hash of options that are
|
data/MANIFEST
CHANGED
data/README
CHANGED
data/doc/sys-admin-unix.txt
CHANGED
@@ -145,10 +145,10 @@ User#uid
|
|
145
145
|
website at http://www.rubyforge.org/projects/sysutils.
|
146
146
|
|
147
147
|
== License
|
148
|
-
|
148
|
+
Artistic 2.0
|
149
149
|
|
150
150
|
== Copyright
|
151
|
-
Copyright 2002-
|
151
|
+
Copyright 2002-2009, 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.
|
data/doc/sys-admin-windows.txt
CHANGED
@@ -226,6 +226,12 @@ User#description
|
|
226
226
|
|
227
227
|
User#description=
|
228
228
|
Sets the description of the account.
|
229
|
+
|
230
|
+
User#dir
|
231
|
+
Returns the user's home directory.
|
232
|
+
|
233
|
+
User#dir=
|
234
|
+
Sets the user's home directory.
|
229
235
|
|
230
236
|
User#disabled?
|
231
237
|
Returns whether or not the account is disabled.
|
@@ -311,10 +317,10 @@ User#status
|
|
311
317
|
website at http://www.rubyforge.org/projects/sysutils.
|
312
318
|
|
313
319
|
== License
|
314
|
-
|
320
|
+
Artistic 2.0
|
315
321
|
|
316
322
|
== Copyright
|
317
|
-
Copyright 2002-
|
323
|
+
Copyright 2002-2009, Daniel J. Berger
|
318
324
|
|
319
325
|
All Rights Reserved. This module is free software. It may be used,
|
320
326
|
redistributed and/or modified under the same terms as Ruby itself.
|
data/lib/sys/admin.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'win32ole'
|
2
|
-
require '
|
2
|
+
require 'win32/security'
|
3
|
+
require 'win32/registry'
|
3
4
|
require 'socket'
|
4
5
|
|
5
6
|
module Sys
|
@@ -151,6 +152,9 @@ module Sys
|
|
151
152
|
# The user's id (RID).
|
152
153
|
attr_accessor :uid
|
153
154
|
|
155
|
+
# The user's home directory
|
156
|
+
attr_accessor :dir
|
157
|
+
|
154
158
|
# Used to set whether or not the account is disabled.
|
155
159
|
attr_writer :disabled
|
156
160
|
|
@@ -192,17 +196,17 @@ module Sys
|
|
192
196
|
def account_type=(type)
|
193
197
|
case type
|
194
198
|
when TEMP_DUPLICATE
|
195
|
-
@account_type =
|
199
|
+
@account_type = 'duplicate'
|
196
200
|
when NORMAL
|
197
|
-
@account_type =
|
201
|
+
@account_type = 'normal'
|
198
202
|
when INTERDOMAIN_TRUST
|
199
|
-
@account_type =
|
203
|
+
@account_type = 'interdomain_trust'
|
200
204
|
when WORKSTATION_TRUST
|
201
|
-
@account_type =
|
205
|
+
@account_type = 'workstation_trust'
|
202
206
|
when SERVER_TRUST
|
203
|
-
@account_type =
|
207
|
+
@account_type = 'server_trust'
|
204
208
|
else
|
205
|
-
@account_type =
|
209
|
+
@account_type = 'unknown'
|
206
210
|
end
|
207
211
|
end
|
208
212
|
|
@@ -228,25 +232,25 @@ module Sys
|
|
228
232
|
def sid_type=(stype)
|
229
233
|
case stype
|
230
234
|
when Admin::SidTypeUser
|
231
|
-
@sid_type =
|
235
|
+
@sid_type = 'user'
|
232
236
|
when Admin::SidTypeGroup
|
233
|
-
@sid_type =
|
237
|
+
@sid_type = 'group'
|
234
238
|
when Admin::SidTypeDomain
|
235
|
-
@sid_type =
|
239
|
+
@sid_type = 'domain'
|
236
240
|
when Admin::SidTypeAlias
|
237
|
-
@sid_type =
|
241
|
+
@sid_type = 'alias'
|
238
242
|
when Admin::SidTypeWellKnownGroup
|
239
|
-
@sid_type =
|
243
|
+
@sid_type = 'well_known_group'
|
240
244
|
when Admin::SidTypeDeletedAccount
|
241
|
-
@sid_type =
|
245
|
+
@sid_type = 'deleted_account'
|
242
246
|
when Admin::SidTypeInvalid
|
243
|
-
@sid_type =
|
247
|
+
@sid_type = 'invalid'
|
244
248
|
when Admin::SidTypeUnknown
|
245
|
-
@sid_type =
|
249
|
+
@sid_type = 'unknown'
|
246
250
|
when Admin::SidTypeComputer
|
247
|
-
@sid_type =
|
251
|
+
@sid_type = 'computer'
|
248
252
|
else
|
249
|
-
@sid_type =
|
253
|
+
@sid_type = 'unknown'
|
250
254
|
end
|
251
255
|
end
|
252
256
|
|
@@ -288,7 +292,7 @@ module Sys
|
|
288
292
|
end
|
289
293
|
|
290
294
|
class Admin
|
291
|
-
VERSION = '1.5.
|
295
|
+
VERSION = '1.5.1'
|
292
296
|
|
293
297
|
# This is the error raised in the majority of cases if anything goes wrong
|
294
298
|
# with any of the Sys::Admin methods.
|
@@ -307,6 +311,33 @@ module Sys
|
|
307
311
|
|
308
312
|
private
|
309
313
|
|
314
|
+
HKEY = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList\\"
|
315
|
+
|
316
|
+
# Retrieves the user's home directory. For local accounts query the
|
317
|
+
# registry. For domain accounts use ADSI and use the HomeDirectory.
|
318
|
+
#
|
319
|
+
def self.get_home_dir(user, local = false, domain = nil)
|
320
|
+
if local
|
321
|
+
sec = Win32::Security::SID.open(user)
|
322
|
+
key = HKEY + sec.to_s
|
323
|
+
dir = nil
|
324
|
+
|
325
|
+
begin
|
326
|
+
Win32::Registry::HKEY_LOCAL_MACHINE.open(key) do |reg|
|
327
|
+
dir = reg['ProfileImagePath']
|
328
|
+
end
|
329
|
+
rescue Win32::Registry::Error
|
330
|
+
# Not every local user has a home directory
|
331
|
+
end
|
332
|
+
else
|
333
|
+
domain ||= Socket.gethostname
|
334
|
+
adsi = WIN32OLE.connect("WinNT://#{domain}/#{user},user")
|
335
|
+
dir = adsi.get('HomeDirectory')
|
336
|
+
end
|
337
|
+
|
338
|
+
dir
|
339
|
+
end
|
340
|
+
|
310
341
|
# A private method that lower cases all keys, and converts them
|
311
342
|
# all to symbols.
|
312
343
|
#
|
@@ -342,7 +373,7 @@ module Sys
|
|
342
373
|
end
|
343
374
|
|
344
375
|
# Used by the get_login method
|
345
|
-
GetUserName =
|
376
|
+
GetUserName = Win32::API.new('GetUserName', 'PP', 'L', 'advapi32') # :nodoc:
|
346
377
|
|
347
378
|
public
|
348
379
|
|
@@ -677,6 +708,7 @@ module Sys
|
|
677
708
|
u.status = user.status
|
678
709
|
u.uid = uid
|
679
710
|
u.groups = get_groups(domain, user.name)
|
711
|
+
u.dir = get_home_dir(user.name, options[:localaccount], domain)
|
680
712
|
end
|
681
713
|
|
682
714
|
return user_object
|
@@ -740,6 +772,8 @@ module Sys
|
|
740
772
|
domain = options[:domain] || host
|
741
773
|
|
742
774
|
wmi.execquery(query).each{ |user|
|
775
|
+
uid = user.sid.split('-').last.to_i
|
776
|
+
|
743
777
|
usr = User.new do |u|
|
744
778
|
u.account_type = user.accounttype
|
745
779
|
u.caption = user.caption
|
@@ -758,6 +792,8 @@ module Sys
|
|
758
792
|
u.sid_type = user.sidtype
|
759
793
|
u.status = user.status
|
760
794
|
u.groups = get_groups(domain, user.name)
|
795
|
+
u.uid = uid
|
796
|
+
u.dir = get_home_dir(user.name, options[:localaccount], host)
|
761
797
|
end
|
762
798
|
|
763
799
|
if block_given?
|
data/sys-admin.gemspec
CHANGED
@@ -1,16 +1,17 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
|
3
3
|
spec = Gem::Specification.new do |gem|
|
4
|
-
gem.name
|
5
|
-
gem.version
|
6
|
-
gem.author
|
7
|
-
gem.
|
8
|
-
gem.
|
9
|
-
gem.
|
10
|
-
gem.
|
11
|
-
gem.
|
12
|
-
gem.test_file
|
13
|
-
gem.has_rdoc
|
4
|
+
gem.name = 'sys-admin'
|
5
|
+
gem.version = '1.5.1'
|
6
|
+
gem.author = 'Daniel J. Berger'
|
7
|
+
gem.license = 'Artistic 2.0'
|
8
|
+
gem.email = 'djberg96@gmail.com'
|
9
|
+
gem.homepage = 'http://www.rubyforge.org/projects/sysutils'
|
10
|
+
gem.platform = Gem::Platform::RUBY
|
11
|
+
gem.summary = 'A unified, cross platform replacement for the "etc" library.'
|
12
|
+
gem.test_file = 'test/test_sys_admin.rb'
|
13
|
+
gem.has_rdoc = true
|
14
|
+
|
14
15
|
gem.extra_rdoc_files = ['CHANGES', 'README', 'MANIFEST']
|
15
16
|
gem.rubyforge_project = 'sysutils'
|
16
17
|
gem.required_ruby_version = '>= 1.8.2'
|
@@ -31,8 +32,15 @@ spec = Gem::Specification.new do |gem|
|
|
31
32
|
files.delete_if{ |item| item.include?('CVS') }
|
32
33
|
|
33
34
|
gem.files = files
|
34
|
-
end
|
35
35
|
|
36
|
-
|
37
|
-
|
36
|
+
gem.description = <<-EOF
|
37
|
+
The sys-admin library is a unified, cross platform replacement for the
|
38
|
+
'etc' library that ships as part of the Ruby standard library. It
|
39
|
+
provides a common interface for all platforms, including MS Windows. In
|
40
|
+
addition, it provides an interface for adding, deleting and configuring
|
41
|
+
users on MS Windows.
|
42
|
+
EOF
|
38
43
|
end
|
44
|
+
|
45
|
+
Gem.manage_gems if Gem::RubyGemsVersion.to_f < 1.0
|
46
|
+
Gem::Builder.new(spec).build
|
data/test/test_sys_admin.rb
CHANGED
@@ -256,6 +256,16 @@ class TC_Sys_Admin_Win32 < Test::Unit::TestCase
|
|
256
256
|
assert_respond_to(@user, :uid=)
|
257
257
|
end
|
258
258
|
|
259
|
+
def test_user_dir_basic
|
260
|
+
assert_respond_to(@user, :dir)
|
261
|
+
assert_respond_to(@user, :dir=)
|
262
|
+
end
|
263
|
+
|
264
|
+
def test_user_dir
|
265
|
+
assert_nothing_raised{ Admin.get_user(@user_name, :localaccount => true) }
|
266
|
+
assert_kind_of(String, @user_name.dir)
|
267
|
+
end
|
268
|
+
|
259
269
|
# Group class
|
260
270
|
|
261
271
|
def test_group_instance_caption
|
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.5.
|
4
|
+
version: 1.5.1
|
5
5
|
platform: x86-mswin32-60
|
6
6
|
authors:
|
7
7
|
- Daniel J. Berger
|
@@ -9,11 +9,11 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-07-23 00:00:00 -06:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
16
|
-
description:
|
16
|
+
description: " The sys-admin library is a unified, cross platform replacement for the\n 'etc' library that ships as part of the Ruby standard library. It\n provides a common interface for all platforms, including MS Windows. In\n addition, it provides an interface for adding, deleting and configuring\n users on MS Windows.\n"
|
17
17
|
email: djberg96@gmail.com
|
18
18
|
executables: []
|
19
19
|
|
@@ -32,20 +32,15 @@ files:
|
|
32
32
|
- test/test_sys_admin_unix.rb
|
33
33
|
- test/test_sys_admin_windows.rb
|
34
34
|
- CHANGES
|
35
|
-
- doc
|
36
|
-
- examples
|
37
|
-
- ext
|
38
|
-
- lib
|
39
35
|
- MANIFEST
|
40
36
|
- Rakefile
|
41
37
|
- README
|
42
38
|
- sys-admin.gemspec
|
43
|
-
- test
|
44
39
|
- lib/sys/admin.rb
|
45
40
|
has_rdoc: true
|
46
41
|
homepage: http://www.rubyforge.org/projects/sysutils
|
47
|
-
licenses:
|
48
|
-
|
42
|
+
licenses:
|
43
|
+
- Artistic 2.0
|
49
44
|
post_install_message:
|
50
45
|
rdoc_options: []
|
51
46
|
|
@@ -66,7 +61,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
66
61
|
requirements: []
|
67
62
|
|
68
63
|
rubyforge_project: sysutils
|
69
|
-
rubygems_version: 1.3.
|
64
|
+
rubygems_version: 1.3.4
|
70
65
|
signing_key:
|
71
66
|
specification_version: 3
|
72
67
|
summary: A unified, cross platform replacement for the "etc" library.
|