class Chef::ReservedNames::Win32::Net

Public Class Methods

default_user_info_3() click to toggle source
# File lib/chef/win32/net.rb, line 35
def self.default_user_info_3
  ui3 = USER_INFO_3.new.tap do |s|
    { usri3_name: nil,
      usri3_password: nil,
      usri3_password_age: 0,
      usri3_priv: 0,
      usri3_home_dir: nil,
      usri3_comment: nil,
      # cspell:disable-next-line
      usri3_flags: UF_SCRIPT | UF_DONT_EXPIRE_PASSWD | UF_NORMAL_ACCOUNT,
      usri3_script_path: nil,
      usri3_auth_flags: 0,
      usri3_full_name: nil,
      usri3_usr_comment: nil,
      usri3_parms: nil,
      usri3_workstations: nil,
      usri3_last_logon: 0,
      usri3_last_logoff: 0,
      usri3_acct_expires: -1,
      usri3_max_storage: -1,
      usri3_units_per_week: 0,
      usri3_logon_hours: nil,
      usri3_bad_pw_count: 0,
      usri3_num_logons: 0,
      usri3_logon_server: nil,
      usri3_country_code: 0,
      usri3_code_page: 0,
      usri3_user_id: 0,
      usri3_primary_group_id: DOMAIN_GROUP_RID_USERS,
      usri3_profile: nil,
      usri3_home_dir_drive: nil,
      usri3_password_expired: 0,
    }.each do |(k, v)|
      s.set(k, v)
    end
  end
end
members_to_lgrmi3(members) click to toggle source
# File lib/chef/win32/net.rb, line 224
def self.members_to_lgrmi3(members)
  buf = FFI::MemoryPointer.new(LOCALGROUP_MEMBERS_INFO_3, members.size)
  Array.new(members.size) do |i|
    member_info = LOCALGROUP_MEMBERS_INFO_3.new(
      buf + i * LOCALGROUP_MEMBERS_INFO_3.size
    )
    member_info[:lgrmi3_domainandname] = FFI::MemoryPointer.from_string(wstring(members[i]))
    member_info
  end
end
net_local_group_add(server_name, group_name) click to toggle source
# File lib/chef/win32/net.rb, line 73
def self.net_local_group_add(server_name, group_name)
  server_name = wstring(server_name)
  group_name = wstring(group_name)

  buf = LOCALGROUP_INFO_0.new
  buf[:lgrpi0_name] = FFI::MemoryPointer.from_string(group_name)

  rc = NetLocalGroupAdd(server_name, 0, buf, nil)
  if rc != NERR_Success
    Chef::ReservedNames::Win32::Error.raise!(nil, rc)
  end
end
net_local_group_add_member(server_name, group_name, domain_user) click to toggle source
# File lib/chef/win32/net.rb, line 209
def self.net_local_group_add_member(server_name, group_name, domain_user)
  server_name = wstring(server_name)
  group_name = wstring(group_name)
  domain_user = wstring(domain_user)

  buf = LOCALGROUP_MEMBERS_INFO_3.new
  buf[:lgrmi3_domainandname] = FFI::MemoryPointer.from_string(domain_user)

  rc = NetLocalGroupAddMembers(server_name, group_name, 3, buf, 1)

  if rc != NERR_Success
    Chef::ReservedNames::Win32::Error.raise!(nil, rc)
  end
end
net_local_group_add_members(server_name, group_name, members) click to toggle source
# File lib/chef/win32/net.rb, line 235
def self.net_local_group_add_members(server_name, group_name, members)
  server_name = wstring(server_name)
  group_name = wstring(group_name)

  lgrmi3s = members_to_lgrmi3(members)
  rc = NetLocalGroupAddMembers(
    server_name, group_name, 3, lgrmi3s[0], members.size
  )

  if rc != NERR_Success
    Chef::ReservedNames::Win32::Error.raise!(nil, rc)
  end
end
net_local_group_del(server_name, group_name) click to toggle source
# File lib/chef/win32/net.rb, line 86
def self.net_local_group_del(server_name, group_name)
  server_name = wstring(server_name)
  group_name = wstring(group_name)

  rc = NetLocalGroupDel(server_name, group_name)
  if rc != NERR_Success
    Chef::ReservedNames::Win32::Error.raise!(nil, rc)
  end
end
net_local_group_del_members(server_name, group_name, members) click to toggle source
# File lib/chef/win32/net.rb, line 263
def self.net_local_group_del_members(server_name, group_name, members)
  server_name = wstring(server_name)
  group_name = wstring(group_name)

  lgrmi3s = members_to_lgrmi3(members)
  rc = NetLocalGroupDelMembers(
    server_name, group_name, 3, lgrmi3s[0], members.size
  )

  if rc != NERR_Success
    Chef::ReservedNames::Win32::Error.raise!(nil, rc)
  end
end
net_local_group_get_members(server_name, group_name) click to toggle source
# File lib/chef/win32/net.rb, line 96
def self.net_local_group_get_members(server_name, group_name)
  server_name = wstring(server_name)
  group_name = wstring(group_name)

  buf = FFI::MemoryPointer.new(:pointer)
  entries_read_ptr = FFI::MemoryPointer.new(:long)
  total_read_ptr = FFI::MemoryPointer.new(:long)
  resume_handle_ptr = FFI::MemoryPointer.new(:pointer)

  rc = ERROR_MORE_DATA
  group_members = []
  while rc == ERROR_MORE_DATA
    rc = NetLocalGroupGetMembers(
      server_name, group_name, 0, buf, -1,
      entries_read_ptr, total_read_ptr, resume_handle_ptr
    )

    nread = entries_read_ptr.read_long
    nread.times do |i|
      member = LOCALGROUP_MEMBERS_INFO_0.new(buf.read_pointer +
                                             (i * LOCALGROUP_MEMBERS_INFO_0.size))
      member_sid = Chef::ReservedNames::Win32::Security::SID.new(member[:lgrmi0_sid])
      group_members << member_sid.to_s
    end
    NetApiBufferFree(buf.read_pointer)
  end

  if rc != NERR_Success
    Chef::ReservedNames::Win32::Error.raise!(nil, rc)
  end

  group_members
end
net_local_group_set_info(server_name, group_name, comment) click to toggle source
# File lib/chef/win32/net.rb, line 184
def self.net_local_group_set_info(server_name, group_name, comment)
  server_name = wstring(server_name)
  group_name = wstring(group_name)
  comment = wstring(comment)

  buf = LOCALGROUP_INFO_1.new
  buf[:lgrpi1_name] = FFI::MemoryPointer.from_string(group_name)
  buf[:lgrpi1_comment] = FFI::MemoryPointer.from_string(comment)

  rc = NetLocalGroupSetInfo(server_name, group_name, 1, buf, nil)
  if rc != NERR_Success
    Chef::ReservedNames::Win32::Error.raise!(nil, rc)
  end
end
net_local_group_set_members(server_name, group_name, members) click to toggle source
# File lib/chef/win32/net.rb, line 249
def self.net_local_group_set_members(server_name, group_name, members)
  server_name = wstring(server_name)
  group_name = wstring(group_name)

  lgrmi3s = members_to_lgrmi3(members)
  rc = NetLocalGroupSetMembers(
    server_name, group_name, 3, lgrmi3s[0], members.size
  )

  if rc != NERR_Success
    Chef::ReservedNames::Win32::Error.raise!(nil, rc)
  end
end
net_use_add_l2(server_name, ui2_hash) click to toggle source
# File lib/chef/win32/net.rb, line 313
def self.net_use_add_l2(server_name, ui2_hash)
  server_name = wstring(server_name)
  group_name = wstring(group_name)

  buf = USE_INFO_2.new

  ui2_hash.each do |(k, v)|
    buf.set(k, v)
  end

  rc = NetUseAdd(server_name, 2, buf, nil)
  if rc != NERR_Success
    Chef::ReservedNames::Win32::Error.raise!(nil, rc)
  end
end
net_use_del(server_name, use_name, force = :use_noforce) click to toggle source
# File lib/chef/win32/net.rb, line 277
def self.net_use_del(server_name, use_name, force = :use_noforce)
  server_name = wstring(server_name)
  use_name = wstring(use_name)
  force_const = case force
                when :use_noforce
                  USE_NOFORCE
                when :use_force
                  USE_FORCE
                when :use_lots_of_force
                  USE_LOTS_OF_FORCE
                else
                  raise ArgumentError, "force must be one of [:use_noforce, :use_force, or :use_lots_of_force]"
                end

  rc = NetUseDel(server_name, use_name, force_const)
  if rc != NERR_Success
    Chef::ReservedNames::Win32::Error.raise!(nil, rc)
  end
end
net_use_get_info_l2(server_name, use_name) click to toggle source
# File lib/chef/win32/net.rb, line 297
def self.net_use_get_info_l2(server_name, use_name)
  server_name = wstring(server_name)
  use_name = wstring(use_name)
  ui2_p = FFI::MemoryPointer.new(:pointer)

  rc = NetUseGetInfo(server_name, use_name, 2, ui2_p)
  if rc != NERR_Success
    Chef::ReservedNames::Win32::Error.raise!(nil, rc)
  end

  ui2 = USE_INFO_2.new(ui2_p.read_pointer).as_ruby
  NetApiBufferFree(ui2_p.read_pointer)

  ui2
end
net_user_add_l3(server_name, args) click to toggle source
# File lib/chef/win32/net.rb, line 130
def self.net_user_add_l3(server_name, args)
  buf = default_user_info_3

  args.each do |k, v|
    buf.set(k, v)
  end

  server_name = wstring(server_name)

  rc = NetUserAdd(server_name, 3, buf, nil)
  if rc != NERR_Success
    Chef::ReservedNames::Win32::Error.raise!(nil, rc)
  end
end
net_user_del(server_name, user_name) click to toggle source
# File lib/chef/win32/net.rb, line 199
def self.net_user_del(server_name, user_name)
  server_name = wstring(server_name)
  user_name = wstring(user_name)

  rc = NetUserDel(server_name, user_name)
  if rc != NERR_Success
    Chef::ReservedNames::Win32::Error.raise!(nil, rc)
  end
end
net_user_get_info_l3(server_name, user_name) click to toggle source
# File lib/chef/win32/net.rb, line 145
def self.net_user_get_info_l3(server_name, user_name)
  server_name = wstring(server_name)
  user_name = wstring(user_name)

  ui3_p = FFI::MemoryPointer.new(:pointer)

  rc = NetUserGetInfo(server_name, user_name, 3, ui3_p)

  if rc != NERR_Success
    Chef::ReservedNames::Win32::Error.raise!(nil, rc)
  end

  ui3 = USER_INFO_3.new(ui3_p.read_pointer).as_ruby

  rc = NetApiBufferFree(ui3_p.read_pointer)

  if rc != NERR_Success
    Chef::ReservedNames::Win32::Error.raise!(nil, rc)
  end

  ui3
end
net_user_set_info_l3(server_name, user_name, info) click to toggle source
# File lib/chef/win32/net.rb, line 168
def self.net_user_set_info_l3(server_name, user_name, info)
  buf = default_user_info_3

  info.each do |k, v|
    buf.set(k, v)
  end

  server_name = wstring(server_name)
  user_name = wstring(user_name)

  rc = NetUserSetInfo(server_name, user_name, 3, buf, nil)
  if rc != NERR_Success
    Chef::ReservedNames::Win32::Error.raise!(nil, rc)
  end
end