Class: Chef::Util::Windows::NetGroup

Inherits:
Chef::Util::Windows show all
Defined in:
lib/chef/util/windows/net_group.rb

Overview

wrapper around a subset of the NetGroup* APIs. nothing Chef specific, but not complete enough to be its own gem, so util for now.

Instance Method Summary collapse

Constructor Details

#initialize(groupname) ⇒ NetGroup

Returns a new instance of NetGroup.

[View source]

44
45
46
# File 'lib/chef/util/windows/net_group.rb', line 44

def initialize(groupname)
  @name = multi_to_wide(groupname)
end

Instance Method Details

#local_addObject

[View source]

80
81
82
83
84
85
# File 'lib/chef/util/windows/net_group.rb', line 80

def local_add
  rc = NetLocalGroupAdd.call(nil, 0, pack_str(@name), nil)
  if rc != NERR_Success
    raise ArgumentError, get_last_error(rc)
  end
end

#local_add_members(members) ⇒ Object

[View source]

91
92
93
# File 'lib/chef/util/windows/net_group.rb', line 91

def local_add_members(members)
  modify_members(members, NetLocalGroupAddMembers)
end

#local_deleteObject

[View source]

95
96
97
98
99
100
# File 'lib/chef/util/windows/net_group.rb', line 95

def local_delete
  rc = NetLocalGroupDel.call(nil, @name)
  if rc != NERR_Success
    raise ArgumentError, get_last_error(rc)
  end
end

#local_get_membersObject

[View source]

48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/chef/util/windows/net_group.rb', line 48

def local_get_members
  group_members = []
  handle = 0.chr * PTR_SIZE
  rc = ERROR_MORE_DATA

  while rc == ERROR_MORE_DATA
    ptr   = 0.chr * PTR_SIZE
    nread = 0.chr * PTR_SIZE
    total = 0.chr * PTR_SIZE

    rc = NetLocalGroupGetMembers.call(nil, @name, 1, ptr, -1,
                                      nread, total, handle)
    if (rc == NERR_Success) || (rc == ERROR_MORE_DATA)
      ptr = ptr.unpack('L')[0]
      nread = nread.unpack('i')[0]
      members = 0.chr * (nread * (PTR_SIZE * 3)) #nread * sizeof(LOCALGROUP_MEMBERS_INFO_1)
      memcpy(members, ptr, members.size)

      #3 pointer fields in LOCALGROUP_MEMBERS_INFO_1, offset 2*PTR_SIZE is lgrmi1_name
      nread.times do |i|
        offset = (i * 3) + 2
        member = lpwstr_to_s(members, offset)
        group_members << member
      end
      NetApiBufferFree(ptr)
    else
      raise ArgumentError, get_last_error(rc)
    end
  end
  group_members
end

#local_set_members(members) ⇒ Object

[View source]

87
88
89
# File 'lib/chef/util/windows/net_group.rb', line 87

def local_set_members(members)
  modify_members(members, NetLocalGroupSetMembers)
end