class Win32::SSPI::SecurityBuffer - Documentation for Ruby 3.3

# 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 ext/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 ext/win32/lib/win32/sspi.rb, line 98
    def bufferSize
      unpack
      @bufferSize
    end

bufferType() click to toggle source

    # File ext/win32/lib/win32/sspi.rb, line 103
    def bufferType
      unpack
      @type
    end

to_p() click to toggle source

    # File ext/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 ext/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 ext/win32/lib/win32/sspi.rb, line 129
    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