In Files

Parent

Files

Net::NTLM::Message::Type2

Public Class Methods

parse(str) click to toggle source
# File lib/net/ntlm.rb, line 647
def parse(str)
  t = new
  t.parse(str)
  t
end

Public Instance Methods

parse(str) click to toggle source
# File lib/net/ntlm.rb, line 654
def parse(str)
  super(str)
  if has_flag?(:TARGET_INFO)
    enable(:context)
    enable(:target_info)
    super(str)
  end
  if ( (len = data_edge - head_size) > 0)
    self.padding = "\00"" * len
    super(str)
  end
end
response(arg, opt = {}) click to toggle source
# File lib/net/ntlm.rb, line 667
def response(arg, opt = {})
  usr = arg[:user]
  pwd = arg[:password]
  if usr.nil? or pwd.nil?
    raise ArgumentError, "user and password have to be supplied"
  end
  
  if opt[:workstation]
    ws = opt[:workstation]
  else
    ws = ""
  end
  
  if opt[:client_challenge]
    cc  = opt[:client_challenge]
  else
    cc = rand(MAX64)
  end
  cc = NTLM::pack_int64le(cc) if cc.is_a?(Integer)
  opt[:client_challenge] = cc

  if has_flag?(:OEM) and opt[:unicode]
    usr = NTLM::decode_utf16le(usr)
    pwd = NTLM::decode_utf16le(pwd)
    ws  = NTLM::decode_utf16le(ws)
    opt[:unicode] = false
  end

  if has_flag?(:UNICODE) and !opt[:unicode]
    usr = NTLM::encode_utf16le(usr)
    pwd = NTLM::encode_utf16le(pwd)
    ws  = NTLM::encode_utf16le(ws)
    opt[:unicode] = true
  end

  tgt = self.target_name
  ti = self.target_info

  chal = self[:challenge].serialize
  
  if opt[:ntlmv2]
    ar = {:ntlmv2_hash => NTLM::ntlmv2_hash(usr, pwd, tgt, opt), :challenge => chal, :target_info => ti}
    lm_res = NTLM::lmv2_response(ar, opt)
    ntlm_res = NTLM::ntlmv2_response(ar, opt)
  elsif has_flag?(:NTLM2_KEY)
    ar = {:ntlm_hash => NTLM::ntlm_hash(pwd, opt), :challenge => chal}
    lm_res, ntlm_res = NTLM::ntlm2_session(ar, opt)
  else
    lm_res = NTLM::lm_response(pwd, chal)
    ntlm_res = NTLM::ntlm_response(pwd, chal)
  end
  
  Type3.create({
        :lm_response => lm_res,
        :ntlm_response => ntlm_res,
        :domain => tgt,
    :user => usr,
    :workstation => ws,
    :flag => self.flag
  })
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.