Method: Chef::Util::Windows::LogonSession#open

Defined in:
lib/chef/util/windows/logon_session.rb

#openObject



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/chef/util/windows/logon_session.rb', line 42

def open
  if session_opened
    raise "Attempted to open a logon session that was already open."
  end

  username = wstring(original_username)
  password = wstring(original_password)
  domain = wstring(original_domain)

  logon_type = (authentication == :local) ? (Chef::ReservedNames::Win32::API::Security::LOGON32_LOGON_NETWORK) : (Chef::ReservedNames::Win32::API::Security::LOGON32_LOGON_NEW_CREDENTIALS)
  status = Chef::ReservedNames::Win32::API::Security.LogonUserW(username, domain, password, logon_type, Chef::ReservedNames::Win32::API::Security::LOGON32_PROVIDER_DEFAULT, token)

  unless status
    last_error = FFI::LastError.error
    raise Chef::Exceptions::Win32APIError, "Logon for user `#{original_username}` failed with Win32 status #{last_error}."
  end

  @session_opened = true
end