class Net::NTLM::TargetInfo

Represents a list of AV_PAIR structures @see msdn.microsoft.com/en-us/library/cc236646.aspx

Constants

MSV_AV_CHANNEL_BINDINGS
MSV_AV_DNS_COMPUTER_NAME
MSV_AV_DNS_DOMAIN_NAME
MSV_AV_DNS_TREE_NAME
MSV_AV_EOL

Allowed AvId values for an AV_PAIR

MSV_AV_FLAGS
MSV_AV_NB_COMPUTER_NAME
MSV_AV_NB_DOMAIN_NAME
MSV_AV_SINGLE_HOST
MSV_AV_TARGET_NAME
MSV_AV_TIMESTAMP
VALID_PAIR_ID

Attributes

av_pairs[R]

Public Class Methods

new(av_pair_sequence) click to toggle source

@param av_pair_sequence [String] AV_PAIR list from challenge message

# File lib/net/ntlm/target_info.rb, line 22
def initialize(av_pair_sequence)
  @av_pairs = read_pairs(av_pair_sequence)
end

Public Instance Methods

to_s() click to toggle source
# File lib/net/ntlm/target_info.rb, line 28
def to_s
  result = ''
  av_pairs.each do |k,v|
    result << k
    result << [v.length].pack('S')
    result << v
  end
  result << Net::NTLM::TargetInfo::MSV_AV_EOL
  result << [0].pack('S')
  result.force_encoding(Encoding::ASCII_8BIT)
end

Private Instance Methods

read_pairs(av_pair_sequence) click to toggle source
# File lib/net/ntlm/target_info.rb, line 56
def read_pairs(av_pair_sequence)
  offset = 0
  result = {}
  return result if av_pair_sequence.nil?

  until offset >= av_pair_sequence.length
    id = av_pair_sequence[offset..offset+1]

    unless VALID_PAIR_ID.include?(id)
      raise Net::NTLM::InvalidTargetDataError.new( 
        "Invalid AvId #{to_hex(id)} in AV_PAIR structure",
        av_pair_sequence
      )
    end

    length = av_pair_sequence[offset+2..offset+3].unpack('S')[0].to_i
    if length > 0
      value = av_pair_sequence[offset+4..offset+4+length-1]
      result[id] = value
    end

    offset += 4 + length
  end

  result
end
to_hex(str) click to toggle source
# File lib/net/ntlm/target_info.rb, line 83
def to_hex(str)
  return nil if str.nil?
  str.bytes.map {|b| '0x' + b.to_s(16).rjust(2,'0').upcase}.join('-')
end