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 85
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 91
def bufferSize
        unpack
        @bufferSize
end
bufferType() click to toggle source
# File win32/lib/win32/sspi.rb, line 96
def bufferType
        unpack
        @type
end
to_p() click to toggle source
# File win32/lib/win32/sspi.rb, line 106
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 101
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 122
def unpack
        if ! @unpacked && @sec_buffer && @struct
                @bufferSize, @type = @sec_buffer.unpack("LL")
                @buffer = @sec_buffer.unpack("LLP#{@bufferSize}")[2]
                @struct = nil
                @sec_buffer = nil
                @unpacked = true
        end
end