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.
@@ -34,7 +34,7 @@ module Sys
34
34
  public
35
35
 
36
36
  # The version of the sys-admin library.
37
- VERSION = '1.6.0'
37
+ VERSION = '1.6.1'
38
38
 
39
39
  # Error typically raised if any of the Sys::Admin methods fail.
40
40
  class Error < StandardError; end
@@ -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.0'
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, [:buffer_out, :pointer], :bool
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 => [old_pass, new_pass]
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.changepassword(value[0], value[1])
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 = 0.chr * 256
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.strip.tr(0.chr, '')
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+.
@@ -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.0'
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
@@ -14,6 +14,6 @@ end
14
14
 
15
15
  class TC_Sys_Admin_All < Test::Unit::TestCase
16
16
  test "version is set to expected value" do
17
- assert_equal('1.6.0', Sys::Admin::VERSION)
17
+ assert_equal('1.6.1', Sys::Admin::VERSION)
18
18
  end
19
19
  end
@@ -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
- @@version = `ver`.scan(/\d/).first.to_i
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 => ['a1b2c3D4', 'd1c2b3A4']
49
+ :password => 'd1c2b3A4'
57
50
  )
58
51
  }
59
52
  end
60
53
 
61
- def test_03_delete_user
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
- Admin.configure_group(:name => 'bar', :description => 'delete me')
70
+ Admin.configure_group(:name => 'bar', :description => 'delete me')
78
71
  }
79
72
  end
80
73
 
81
- def test_03_delete_group
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.0
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: 2013-01-05 00:00:00.000000000 Z
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
- description: ! " The sys-admin library is a unified, cross platform replacement
47
- for the\n 'etc' library that ships as part of the Ruby standard library. It\n
48
- \ provides a common interface for all platforms, including MS Windows. In\n addition,
49
- it provides an interface for adding, deleting and configuring\n users on MS Windows.\n"
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: 1.8.24
110
+ rubygems_version: 2.0.3
101
111
  signing_key:
102
- specification_version: 3
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