In Files

  • ruby-3.1.2/ext/win32/lib/win32/sspi.rb

Files

Class/Module Index [+]

Quicksearch

Win32::SSPI::SecurityBuffer

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

Public Class Methods

new(buffer = nil) click to toggle source
 
               # File ruby-3.1.2/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 ruby-3.1.2/ext/win32/lib/win32/sspi.rb, line 98
def bufferSize
  unpack
  @bufferSize
end
            
bufferType() click to toggle source
 
               # File ruby-3.1.2/ext/win32/lib/win32/sspi.rb, line 103
def bufferType
  unpack
  @type
end
            
to_p() click to toggle source
 
               # File ruby-3.1.2/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 ruby-3.1.2/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 ruby-3.1.2/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