sys-admin 1.6.0 → 1.6.1
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 +7 -0
- data/CHANGES +10 -0
- data/README +1 -1
- data/Rakefile +7 -2
- data/doc/sys-admin-unix.txt +164 -164
- data/doc/sys-admin-windows.txt +336 -336
- data/lib/sys/admin/common.rb +1 -1
- data/lib/windows/sys/admin.rb +28 -6
- data/sys-admin.gemspec +3 -1
- data/test/test_sys_admin.rb +1 -1
- data/test/test_sys_admin_windows.rb +17 -12
- metadata +31 -21
data/lib/sys/admin/common.rb
CHANGED
data/lib/windows/sys/admin.rb
CHANGED
@@ -297,7 +297,7 @@ module Sys
|
|
297
297
|
extend FFI::Library
|
298
298
|
|
299
299
|
# The version of the sys-admin library.
|
300
|
-
VERSION = '1.6.
|
300
|
+
VERSION = '1.6.1'
|
301
301
|
|
302
302
|
# This is the error raised in the majority of cases if anything goes wrong
|
303
303
|
# with any of the Sys::Admin methods.
|
@@ -379,7 +379,7 @@ module Sys
|
|
379
379
|
|
380
380
|
# Used by the get_login method
|
381
381
|
ffi_lib :advapi32
|
382
|
-
attach_function :GetUserNameW, [:
|
382
|
+
attach_function :GetUserNameW, [:pointer, :pointer], :bool
|
383
383
|
private_class_method :GetUserNameW
|
384
384
|
|
385
385
|
public
|
@@ -465,7 +465,7 @@ module Sys
|
|
465
465
|
# # Change the password
|
466
466
|
# Sys::Admin.configure_user(
|
467
467
|
# :name => 'asmith',
|
468
|
-
# :password =>
|
468
|
+
# :password => 'new_password'
|
469
469
|
# )
|
470
470
|
#
|
471
471
|
# # Configure a user on a specific domain
|
@@ -486,7 +486,7 @@ module Sys
|
|
486
486
|
|
487
487
|
options.each{ |option, value|
|
488
488
|
if option.to_s == 'password'
|
489
|
-
adsi.
|
489
|
+
adsi.setpassword(value)
|
490
490
|
else
|
491
491
|
adsi.put(option.to_s, value)
|
492
492
|
end
|
@@ -559,6 +559,28 @@ module Sys
|
|
559
559
|
end
|
560
560
|
end
|
561
561
|
|
562
|
+
# Adds +user+ to +group+ on the specified +domain+, or the localhost
|
563
|
+
# if no domain is specified.
|
564
|
+
#
|
565
|
+
def self.add_group_member(user, group, domain=nil)
|
566
|
+
domain ||= Socket.gethostname
|
567
|
+
adsi = WIN32OLE.connect("WinNT://#{domain}/#{group},group")
|
568
|
+
adsi.Add("WinNT://#{domain}/#{user}")
|
569
|
+
rescue WIN32OLERuntimeError => err
|
570
|
+
raise Error, err
|
571
|
+
end
|
572
|
+
|
573
|
+
# Removes +user+ from +group+ on the specified +domain+, or the localhost
|
574
|
+
# if no domain is specified.
|
575
|
+
#
|
576
|
+
def self.remove_group_member(user, group, domain=nil)
|
577
|
+
domain ||= Socket.gethostname
|
578
|
+
adsi = WIN32OLE.connect("WinNT://#{domain}/#{group},group")
|
579
|
+
adsi.Remove("WinNT://#{domain}/#{user}")
|
580
|
+
rescue WIN32OLERuntimeError => err
|
581
|
+
raise Error, err
|
582
|
+
end
|
583
|
+
|
562
584
|
# Configures the +group+ using +options+. If no domain option is
|
563
585
|
# specified then your local host is used, i.e. you are configuring
|
564
586
|
# a local group.
|
@@ -614,7 +636,7 @@ module Sys
|
|
614
636
|
# Returns the user name (only) of the current login.
|
615
637
|
#
|
616
638
|
def self.get_login
|
617
|
-
buffer =
|
639
|
+
buffer = FFI::MemoryPointer.new(:char, 256)
|
618
640
|
nsize = FFI::MemoryPointer.new(:ulong)
|
619
641
|
nsize.write_ulong(buffer.size)
|
620
642
|
|
@@ -622,7 +644,7 @@ module Sys
|
|
622
644
|
raise Error, 'GetUserName() call failed in get_login'
|
623
645
|
end
|
624
646
|
|
625
|
-
buffer.
|
647
|
+
buffer.read_string(nsize.read_ulong * 2).tr(0.chr, '')
|
626
648
|
end
|
627
649
|
|
628
650
|
# Returns a User object based on either +name+ or +uid+.
|
data/sys-admin.gemspec
CHANGED
@@ -4,7 +4,7 @@ require 'rubygems'
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = 'sys-admin'
|
7
|
-
spec.version = '1.6.
|
7
|
+
spec.version = '1.6.1'
|
8
8
|
spec.author = 'Daniel J. Berger'
|
9
9
|
spec.license = 'Artistic 2.0'
|
10
10
|
spec.email = 'djberg96@gmail.com'
|
@@ -17,7 +17,9 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.rubyforge_project = 'sysutils'
|
18
18
|
|
19
19
|
spec.add_dependency('ffi', '>= 1.1.0')
|
20
|
+
|
20
21
|
spec.add_development_dependency('test-unit', '>= 2.5.0')
|
22
|
+
spec.add_development_dependency('rake')
|
21
23
|
|
22
24
|
spec.description = <<-EOF
|
23
25
|
The sys-admin library is a unified, cross platform replacement for the
|
data/test/test_sys_admin.rb
CHANGED
@@ -16,14 +16,7 @@ include Sys
|
|
16
16
|
class TC_Sys_Admin_Win32 < Test::Unit::TestCase
|
17
17
|
def self.startup
|
18
18
|
@@host = Socket.gethostname
|
19
|
-
@@
|
20
|
-
|
21
|
-
# No elevated_security? method for XP yet.
|
22
|
-
if @@version < 6
|
23
|
-
@@elevated = true
|
24
|
-
else
|
25
|
-
@@elevated = Win32::Security.elevated_security?
|
26
|
-
end
|
19
|
+
@@elevated = Win32::Security.elevated_security?
|
27
20
|
end
|
28
21
|
|
29
22
|
def setup
|
@@ -53,12 +46,12 @@ class TC_Sys_Admin_Win32 < Test::Unit::TestCase
|
|
53
46
|
:name => 'foo',
|
54
47
|
:description => 'delete me',
|
55
48
|
:fullname => 'fubar',
|
56
|
-
:password =>
|
49
|
+
:password => 'd1c2b3A4'
|
57
50
|
)
|
58
51
|
}
|
59
52
|
end
|
60
53
|
|
61
|
-
def
|
54
|
+
def test_06_delete_user
|
62
55
|
omit_unless(@@elevated)
|
63
56
|
assert_respond_to(Admin, :delete_user)
|
64
57
|
assert_nothing_raised{ Admin.delete_user('foo') }
|
@@ -74,11 +67,23 @@ class TC_Sys_Admin_Win32 < Test::Unit::TestCase
|
|
74
67
|
omit_unless(@@elevated)
|
75
68
|
assert_respond_to(Admin, :configure_group)
|
76
69
|
assert_nothing_raised{
|
77
|
-
|
70
|
+
Admin.configure_group(:name => 'bar', :description => 'delete me')
|
78
71
|
}
|
79
72
|
end
|
80
73
|
|
81
|
-
def
|
74
|
+
def test_03_add_group_member
|
75
|
+
omit_unless(@@elevated)
|
76
|
+
assert_respond_to(Admin, :add_group_member)
|
77
|
+
assert_nothing_raised{ Admin.add_group_member('foo', 'bar') }
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_04_remove_group_member
|
81
|
+
omit_unless(@@elevated)
|
82
|
+
assert_respond_to(Admin, :remove_group_member)
|
83
|
+
assert_nothing_raised{ Admin.remove_group_member('foo', 'bar') }
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_05_delete_group
|
82
87
|
omit_unless(@@elevated)
|
83
88
|
assert_respond_to(Admin, :delete_group)
|
84
89
|
assert_nothing_raised{ Admin.delete_group('bar') }
|
metadata
CHANGED
@@ -1,52 +1,63 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sys-admin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
5
|
-
prerelease:
|
4
|
+
version: 1.6.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Daniel J. Berger
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-01-24 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: ffi
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 1.1.0
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: 1.1.0
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: test-unit
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: 2.5.0
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: 2.5.0
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: |2
|
56
|
+
The sys-admin library is a unified, cross platform replacement for the
|
57
|
+
'etc' library that ships as part of the Ruby standard library. It
|
58
|
+
provides a common interface for all platforms, including MS Windows. In
|
59
|
+
addition, it provides an interface for adding, deleting and configuring
|
60
|
+
users on MS Windows.
|
50
61
|
email: djberg96@gmail.com
|
51
62
|
executables: []
|
52
63
|
extensions: []
|
@@ -79,27 +90,26 @@ files:
|
|
79
90
|
homepage: http://www.github.com/djberg96/sysutils
|
80
91
|
licenses:
|
81
92
|
- Artistic 2.0
|
93
|
+
metadata: {}
|
82
94
|
post_install_message:
|
83
95
|
rdoc_options: []
|
84
96
|
require_paths:
|
85
97
|
- lib
|
86
98
|
required_ruby_version: !ruby/object:Gem::Requirement
|
87
|
-
none: false
|
88
99
|
requirements:
|
89
|
-
- -
|
100
|
+
- - '>='
|
90
101
|
- !ruby/object:Gem::Version
|
91
102
|
version: '0'
|
92
103
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
|
-
none: false
|
94
104
|
requirements:
|
95
|
-
- -
|
105
|
+
- - '>='
|
96
106
|
- !ruby/object:Gem::Version
|
97
107
|
version: '0'
|
98
108
|
requirements: []
|
99
109
|
rubyforge_project: sysutils
|
100
|
-
rubygems_version:
|
110
|
+
rubygems_version: 2.0.3
|
101
111
|
signing_key:
|
102
|
-
specification_version:
|
112
|
+
specification_version: 4
|
103
113
|
summary: A unified, cross platform replacement for the "etc" library.
|
104
114
|
test_files:
|
105
115
|
- test/test_sys_admin.rb
|