sys-admin 1.6.0 → 1.6.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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