class Win32::SSPI::SecurityBuffer

Creates binary representations of a SecBufferDesc structure, including the SecBuffer contained inside.

Constants

SECBUFFER_TOKEN
SECBUFFER_VERSION
TOKENBUFSIZE

Public Class Methods

new(buffer = nil) click to toggle source
# File win32/lib/win32/sspi.rb, line 92
def initialize(buffer = nil)
  @buffer = buffer || "\0" * TOKENBUFSIZE
  @bufferSize = @buffer.length
  @type = SECBUFFER_TOKEN
end

Public Instance Methods

bufferSize() click to toggle source
# File win32/lib/win32/sspi.rb, line 98
def bufferSize
  unpack
  @bufferSize
end
bufferType() click to toggle source
# File win32/lib/win32/sspi.rb, line 103
def bufferType
  unpack
  @type
end
to_p() click to toggle source
# File win32/lib/win32/sspi.rb, line 113
def to_p
  # Assumption is that when to_p is called we are going to get a packed structure. Therefore,
  # set @unpacked back to nil so we know to unpack when accessors are next accessed.
  @unpacked = nil
  # Assignment of inner structure to variable is very important here. Without it,
  # will not be able to unpack changes to the structure. Alternative, nested unpacks,
  # does not work (i.e. @struct.unpack("LLP12")[2].unpack("LLP12") results in "no associated pointer")
  @sec_buffer ||= [@bufferSize, @type, @buffer].pack("LLP")
  @struct ||= [SECBUFFER_VERSION, 1, @sec_buffer].pack("LLP")
end
token() click to toggle source
# File win32/lib/win32/sspi.rb, line 108
def token
  unpack
  @buffer
end

Private Instance Methods

unpack() click to toggle source

Unpacks the SecurityBufferDesc structure into member variables. We only want to do this once per struct, so the struct is deleted after unpacking.

# File win32/lib/win32/sspi.rb, line 129
def unpack
  if ! @unpacked && @sec_buffer && @struct
    @bufferSize, @type = @sec_buffer.unpack("LL")
    @buffer = @sec_buffer.unpack1("x8P#{@bufferSize}")
    @struct = nil
    @sec_buffer = nil
    @unpacked = true
  end
end